我在用ffmpeg重放一个实时的饲料。不幸的是,输入分辨率偶尔会发生变化,但是ffmpeg继续运行。我使用的nginx服务器不能很好地处理这个问题,并且继续使用音频流,但是视频大多是黑色或绿色的,带有一些工件。
理想情况下,我想要的是在输入分辨率更改时停止ffmpeg,因为我有一个脚本来检测ffmpeg停止并重新启动它。
我在我的ffmpeg命令中使用了-c:v副本,因为不幸的是,我的机器不够强大,无法动态地将实时视频重新编码到一个恒定的分辨率(至少在没有显著质量下降的情况下)。
ffmpeg -i "http://mpegts-live-stream" -c:v copy -c:a aac -ac 2 -f flv "rtmp://nginxserver/live/streamname"
发布于 2022-10-22 11:13:13
因此,ffmpeg不能检测流复制过程中输入参数的变化,但我们可以通过向进程添加最小的解码负载来解决这一问题。
ffmpeg -xerror -skip_frame:v nokey -flags:v +drop_changed -i "http://mpegts-live-stream" -c:v copy -c:a aac -ac 2 -f flv "rtmp://nginxserver/live/streamname" -an -f null -
-xerror
:错误时退出
-skip_frame:v nokey
:仅解码视频流的关键帧
-flags:v +drop_changed
:当参数(如分辨率)发生变化时,下降帧和信号误差
-an -f null -
:映射需要解码流的视频输出流,否则不会发生解码。
https://stackoverflow.com/questions/74162777
复制相似问题