【发布时间】:2020-05-30 14:16:55
【问题描述】:
我想从代码中获得与此 ffmpeg 命令行调用完全相同的结果:
ffmpeg -i CAMERARTSPLINK -c:v copy -an -movflags +frag_keyframe+empty_moov -f mp4
当我运行上面的命令时,它会给出这个二进制结果:
got 36 bytes: 0, 0, 0, 36, 102, 116, 121, 112, ..., 111, 54, 109, 112, 52, 49,
got 512 bytes: 0, 0, 3, 76, 109, 111, 111, 118, 0, 0, 0, ..., 132, 0, 0, 3, 0, 4, 0, 0, 3, 0, 202,
代码可以利用 ffmpeg 库和包含,但我不想将 ffmpeg 用作程序调用(即不首选 exec* 函数)。
我使用avformat 创建了一个小型演示代码示例,用于 RTSP H264 到 MP4 再复用。
该代码高度重用了horgh的漂亮videostreamer库。
我将sample code 发布到 pastebin.com(400 位置)。它构建成功,但您需要将其与avformat、avdevice、avcodec 和avutil 链接。
我尽力达到相同的结果,但是当我运行此代码时,字节 #38 之后的前几个字节是不同的(可能不仅仅是那些,我没有比较字节 #548 之后的任何内容):
writeOutput: writing 36 bytes: 0, 0, 0, 36, 102, 116, 121, 112, ..., 111, 54, 109, 112, 52, 49,
writeOutput: writing 512 bytes: 0, 0, 0, 0, 109, 111, 111, 118, 0, 0, 0, ..., 132, 0, 0, 3, 0, 4, 0, 0, 3, 0, 202,
您可以在我的代码输出的第二行看到以 0 0 0 0 109 开头,
而 ffmpeg 给了 0 0 3 76 109.
所有其余的(甚至这里没有粘贴字节)数据都是完全一样的(至少前 548 个字节)。
我的代码有什么问题?这 2 个字节似乎对于解码此流非常重要。
【问题讨论】:
标签: ffmpeg libavcodec libavformat