如何让FFPLAY播放IP摄像头流指定时长后自动退出?
解决FFPLAY播放RTSP流无法自动退出的问题
问题背景
在树莓派连接HDMI显示器的场景下,使用FFPLAY播放IP摄像头RTSP流时,窗口布局、缩放功能正常,但通过-t参数指定自动退出时间后,画面会在指定时间冻结,但FFPLAY进程仍持续运行,无法自动退出;通过FFMPEG管道输出到FFPLAY的方式也存在同样问题。
可行解决方案
方案1:使用系统timeout命令强制终止进程
由于RTSP属于实时流(无固定时长),FFPLAY的-t参数依赖输入流的时长信息,因此无法正常触发自动退出。直接使用系统级的timeout命令强制限制FFPLAY的运行时间,是最可靠的方式:
timeout 10 env DISPLAY=:0 ffplay -rtsp_transport tcp -left 0 -top 0 -noborder -i rtsp://user:pass@192.168.4.157:46449/live -vf scale=480:240 -an -autoexit
timeout 10表示强制进程运行10秒后终止- 该命令不受流本身的时长特性影响,确保到点退出
方案2:完善FFMPEG管道命令,添加-autoexit参数
之前的管道命令中,FFPLAY未启用-autoexit参数,导致FFMPEG停止输出后,FFPLAY仅冻结画面但不退出。修改后的命令如下:
ffmpeg -rtsp_transport tcp -t 10 -i rtsp://user:pass@192.168.4.157:46449/live -vf scale=480:240 -an -f matroska - | env DISPLAY=:0 ffplay -left 0 -top 0 -noborder -autoexit -
- FFPLAY的
-autoexit参数会在输入流结束时自动退出进程 - FFMPEG的
-t 10确保10秒后停止输出流,触发FFPLAY的自动退出逻辑
方案3:调整FFPLAY参数,结合RTSP超时与自动退出
通过设置RTSP连接超时时间,配合-autoexit实现退出,但该方案仅适用于流在超时后中断的场景,可靠性略低于前两种:
env DISPLAY=:0 ffplay -rtsp_transport tcp -left 0 -top 0 -noborder -stimeout 10000000 -i rtsp://user:pass@192.168.4.157:46449/live -vf scale=480:240 -an -autoexit
-stimeout 10000000表示RTSP连接超时时间为10秒(单位:微秒)- 若流在超时后中断,FFPLAY会因
-autoexit参数自动退出
内容的提问来源于stack exchange,提问作者PiBer2
相关产品推荐
相关产品推荐

