gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:13:08 24 4
gpt4 key购买 nike

我想从代码中获得与此 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的nice videostreamer图书馆。

我发布了 sample code到 pastebin.com(400 位置)。它构建成功,但您需要将其链接到 avformat , avdevice , avcodecavutil .

我尽力达到相同的结果,但是当我运行此代码时,字节 #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 个字节对于解码此流似乎非常重要。

最佳答案

102, 116, 121, 112在 ascii 中是 ftyp这是mp4格式类型框。 0, 0, 0, 36是盒子的大小
109, 111, 111, 118在 ascii 中是 mdat这是数据框。 0, 0, 0, 0是盒子的大小。

在这种情况下,mdat 的大小box 是未知的,因为我们还不知道所有视频和音频帧的大小。因此使用零占位符。文件完成后,应使用正确的大小覆盖大小值

关于ffmpeg - avformat 代码产生的输出与具有相同参数的 ffmpeg 略有不同 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60232119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com