首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从udp流传输时,轻轻停止ffmpeg (允许其完成mp4文件的写入)

从udp流传输时,轻轻停止ffmpeg (允许其完成mp4文件的写入)
EN

Stack Overflow用户
提问于 2014-04-12 03:13:59
回答 3查看 3.9K关注 0票数 8

我正尝试在服务器上接收UDP流,并将其写入mp4文件。这可以很好地工作:

代码语言:javascript
复制
  ffmpeg -i udp://127.0.0.1:12345 -codec copy out.mp4

如果我按CTRL+C (或向进程发送SIGINT ),ffmpeg退出,我就有了一个可以工作的mp4文件。

但是,如果数据停止进入udp端口(例如,在10分钟的流之后),并且我尝试停止ffmpeg,则需要2个中断信号,此时ffmpeg突然退出并导致无法播放的mp4文件。

有人知道如何在没有输入数据的情况下防止mp4挂起,或者强制它写出FMPEG头吗?

我知道我可以指定url选项。

代码语言:javascript
复制
 udp://127.0.0.1:12345?timeout=<microseconds>

但是,我需要能够忽略录制过程中偶尔(5-10分钟长)的停顿,并且只在录制结束时退出。因此,即使我设置了timeout=60000000,它也会导致我的应用程序在我想要停止流时等待10分钟(例如,如果没有数据),并且当我向它发送一个SIGINT时,我需要它立即退出

EN

回答 3

Stack Overflow用户

发布于 2020-11-28 06:54:12

你可以添加movflag,即使你强制停止了ffmpeg,你仍然可以播放mp4文件。

ffmpeg -i input -movflags +frag_keyframe+separate_moof+omit_tfhd_offset+empty_moov output

更多细节在这里(Gyan的回答):

https://video.stackexchange.com/a/18179/33701

其他建议:

添加像-reconnect_streamed 1这样的标志,如果出现错误,ffmpeg将尝试重新连接。

文档:https://ffmpeg.org/ffmpeg-protocols.html

票数 1
EN

Stack Overflow用户

发布于 2014-10-16 02:55:56

找到了一个解决方法:如果没有数据传入,则将图像(例如绿屏)作为视频转发到所需的端口。例如:

代码语言:javascript
复制
ffmpeg -loop 1 -y -re -i greenscreen.jpg -r 30 -vcodec libx264 -an -f h264 udp://127.0.0.1:12345

这样,编写mp4文件的ffmpeg将优雅地停止,但您可能会在结束时获得1-2秒的绿屏视频。

问题是,我不确定如何自动检测“无数据”

票数 -2
EN

Stack Overflow用户

发布于 2015-07-23 01:37:33

将SIGINT发送到ffmpeg进程会通过正确保存报头来轻轻地杀死它。至少对于2.5.7之后的版本

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

https://stackoverflow.com/questions/23020834

复制
相关文章

相似问题

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