我想从代码中获得与该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个地方)。它构建成功,但是您需要将其链接到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个字节似乎对于解码此流非常重要。
ftyp
这是mp4格式类型框。 0, 0, 0, 36
是盒子的大小