avformat代码产生的输出与具有相同参数的ffmpeg略有不同-为什么?

问题描述 投票:0回答:1

我想从代码中获得与该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库,但我不想将ffmpeg用作程序调用(即,不建议使用exec *函数。

我用avformat创建了一个小的演示代码示例,用于将RTSP H264转换为MP4 remux。该代码高度复用了horgh不错的videostreamer库。

我将sample code发布到了pastebin.com(400个地方)。它构建成功,但是您需要将其链接到avformatavdeviceavcodecavutil

我尽了最大的努力来达到相同的结果,但是,当我运行此代码时,字节#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, 

您可以在我的代码输出的第二行看到以000 0 109

而ffmpeg给出003 76 109

其余所有数据(即使未在此处粘贴字节)也完全相同(至少对于前548个字节而言)。

我的代码有什么问题?这2个字节似乎对于解码此流非常重要。

ffmpeg libavcodec libavformat
1个回答
0
投票
102, 116, 121, 112为ftyp这是mp4格式类型框。 0, 0, 0, 36是盒子的大小
© www.soinside.com 2019 - 2024. All rights reserved.