gpt4 book ai didi

FFMPEG RTMP 流录制超时

转载 作者:行者123 更新时间:2023-12-04 22:45:26 35 4
gpt4 key购买 nike

[已解决] -- 最终编辑中的解决方案
我正在使用 ffmpeg 录制 rtmp 直播,并希望添加一个标志,该标志将在新数据停止到达时自动停止处理。
如果我启动和停止脚本(通过按需终止进程来停止),一切都很好,记录被保存并且可以播放。
但是,当流在没有手动调用 STOP 的情况下从源停止时,脚本仍将运行一段时间,并且生成的文件将被损坏(通过手动停止调用进行测试,并在录制前停止流,模拟浏览器/标签关闭或断开连接 - 失败)
我正在运行的命令

$command = "ffmpeg -i {$rtmpUrl} -c:v copy -c:a copy -t 3600 {$path} >/dev/null  2>/dev/null &";
$res = shell_exec($command)
我尝试在这样的输入之前和之后添加 -timeout 0 选项
$command = "ffmpeg -timeout 0 -i {$rtmpUrl} -c:v copy -c:a copy -t 3600 {$path} >/dev/null  2>/dev/null &"; 
$command = "ffmpeg -i {$rtmpUrl} -c:v copy -c:a copy -timeout 0 -t 3600 {$path} >/dev/null  2>/dev/null &";
但没有改善。
我在这里想念什么?当新数据停止来自实时流时,有什么方法可以自动停止脚本(这意味着流停止并且录制也应该停止)。
注意 $rtmpUrl 和 $path 已被检查,只要脚本在直播结束前停止,一切正常。
任何建议都非常感谢
稍后编辑:意识到超时设置在错误的位置,先添加但结果仍然相同,所以仍在寻找任何建议
$command = "timout 0 ffmpeg -i {$rtmpUrl} -c:v copy -c:a copy -t 3600 {$path} >/dev/null  2>/dev/null &";
最终编辑
如果有人发现此线程正在寻找类似情况下的解决方案,
解决了,超时不是我想要的,而是使用 -re标志为我们修复了它。
现在,当没有更多新帧进入时脚本停止
$command = "ffmpeg -re -i {$rtmpUrl} -c:v copy -c:a copy -t 3600 {$path} >/dev/null  2>/dev/null &";

最佳答案

“-re”标志对我没有帮助,但我发现了其他标志“-rw_timeout 5000000”(以微秒为单位),所以命令

ffmpeg -rw_timeout 5000000  -i rtmp://localhost:1935/video/$1 -c:v copy -c:a copy /var/www/rec/$1.mp4 2>> /var/www/log/ffmpeg.log
空闲 5 秒后退出,我得到了好文件。
该命令从外部 sh 文件执行,该文件从/etc/nginx/sites-available/mysite exec_push 命令调用,因此 nginx-rtmp 不会杀死 ffmpeg。

关于FFMPEG RTMP 流录制超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63110469/

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