首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FFMPEG中碎片MP4创建的刷新与延迟问题

FFMPEG中碎片MP4创建的刷新与延迟问题
EN

Stack Overflow用户
提问于 2015-06-16 13:23:09
回答 3查看 6.4K关注 0票数 10

我正在使用以下命令为html5流创建一个分段的html5:

代码语言:javascript
复制
-i rtsp://172.20.28.52:554/h264 -vcodec copy -an -f mp4 -reset_timestamps 1 -movflags empty_moov+default_base_moof+frag_keyframe -loglevel quiet -
  1. "-i rtsp://172.20.28.52:554/H 264“,因为源是来自ip摄像机的rtp数据包流中的h264。为了进行测试,摄像机的GOP为1(即所有帧都是关键帧)。
  2. "-vcodec复制“,因为我不需要转码,只需要重新编译到mp4。
  3. "-movflags empty_moov+default_base_moof+frag_keyframe“根据媒体源扩展规范创建一个分段的mp4。
  4. "-“结尾,以便将mp4输出到stdout。我正在抓取输出并通过网络套接字将其发送到web客户端。

一切都很好,期待一个延迟问题,我正试图解决。如果每次从stdout输入数据时,都记录带有到达时间戳的数据,则得到以下输出:

16/06/2015 15:40:45.239 got数据大小= 24 16/06/2015 15:40:45.240 got数据大小= 7197 16/06/2015 15:40:45.241 got数据大小= 32768 16/06/2015 15:40:45.241 got数据大小= 4941 16/06/2015 15:40:45.241 got数据大小= 12606 16/06/2015 15:40:45.241 got数据大小= 6345 16/06/2015 15:40:45.241 got数据大小= 6339 16/06/2015 15:40:45.242 got数据大小= 6336 16/06/2015 15:40:45.242 got数据大小= 6361 16/06/2015 15:40:45.242 got数据大小= 6337 16/06/2015 15:40:45.242 got数据大小= 6331 16/06/2015 15:40:45.242 got数据大小= 6359 16/06/2015 15:40:45.243 got数据大小= 6346 16/06/2015 15:40:45.243 got数据大小= 6336 16/06/2015 15:40:45.243 got数据大小= 6338 16/06/2015 15:40:45.243 got数据大小= 6357 16/06/2015 15:40:45.243 got数据大小= 6357 16/06/2015 15:40:45.243 got数据大小= 6322 16/06/2015 15:40:45.243 got数据大小= 6359 16/06/2015 15:40:45.244 got数据大小= 6349 16/06/2015 15:40:45.244 got数据大小= 6353 16/06/2015 15:40:45.244 got数据大小= 6382 16/06/2015 15:40:45.244 got数据大小= 6403 16/06/2015 15:40:45.304 got数据大小= 6393 16/06/2015 15:40:45.371 got数据大小= 6372 16/06/2015 15:40:45.437 got数据大小= 6345 16/06/2015 15:40:45.504 got数据大小= 6352 16/06/2015 15:40:45.571获得数据大小= 6340 16/06/2015 15:40:45.637 got数据大小= 6331 16/06/2015 15:40:45.704 got数据大小= 6326 16/06/2015 15:40:45.771 got数据大小= 6360 16/06/2015 15:40:45.838 got数据大小= 6294 16/06/2015 15:40:45.904 got数据大小= 6328 16/06/2015 15:40:45.971 got数据大小= 6326 16/06/2015 15:40:46.038 got数据大小= 6326 16/06/2015 15:40:46.105获得数据大小= 6340 16/06/2015 15:40:46.171 got数据大小= 6341 16/06/2015 15:40:46.238 got数据大小= 6332

正如你所看到的,前23行(包含大约1.5秒的视频数据)几乎立即到达,然后每两条连续线之间的延迟为70 is,这是有意义的,因为视频是每秒15帧。这种行为会导致大约1.5秒的延迟。

这看起来像是一个冲水的问题,因为我不知道为什么ffmpeg需要在内存中保存前23帧,特别是因为每个帧都是它在mp4中自己的片段。但是,我找不到任何方法可以使ffmpeg更快地刷新这些数据。

有人有什么建议吗?

我想指出,这是这个问题的后续问题:Live streaming dash content using mp4box

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-30 07:49:04

删除延迟的关键是使用-probesize参数:

正整数(输入) 设置探测大小(以字节为单位),即要分析的数据大小以获取流信息。更高的值将允许检测更多的信息,以防信息分散到流中,但会增加延迟。必须是不小于32的整数。默认情况下是5000000。

默认情况下,该值为5,000,000字节,相当于1.5秒的视频。通过将这个值减少到20万,我几乎完全消除了延迟。

票数 5
EN

Stack Overflow用户

发布于 2015-07-30 05:14:52

我通过使用-g选项来设置组中的帧数来解决延迟问题。在我的例子中,我使用了-g 2。我怀疑,如果不将其显式化,片段要么等待源提供密钥框架,要么在关闭片段并将其转储到stdout之前使用一个非常大的默认值来生成密钥框架。

票数 0
EN

Stack Overflow用户

发布于 2015-08-26 06:33:42

通常,在控制台输出的情况下,将禁用stdout的缓冲。如果从代码中运行ffmpeg,则会启用缓冲区,因此只有在缓冲区已满或命令结束时才能获得数据。

你必须消除你的操作系统的标准缓冲。在窗户上--这是不可能的有http://manpages.ubuntu.com/manpages/maverick/man1/stdbuf.1.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30868854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档