改进bash脚本,用于检查ffmpeg何时将流式IP cam rtsp挂起到youtube

改进bash脚本,用于检查ffmpeg何时将流式IP cam rtsp挂起到youtube,ffmpeg,youtube,stream,rtsp,Ffmpeg,Youtube,Stream,Rtsp,背景 我有一个花园的IP摄像头id,我想实时流到youtube,所以我决定使用ffmpeg来实现这一点 问题 每当我的IP cam重新启动或断开连接时;一旦IP cam重新联机,ffmpeg将卡在同一帧上,并且不会恢复 我的解决方案 我将ffmpeg输出记录到一个文件中,然后让脚本每隔几秒钟获取日志的最后一行,并比较帧号。如果帧号匹配,它将终止ffmpeg进程并启动另一个ffmpeg进程 我的问题 有没有更好更有效的方法 logchecker.sh ffmpeg.sh 我一直在尝试做类似的事情。

背景

我有一个花园的IP摄像头id,我想实时流到youtube,所以我决定使用ffmpeg来实现这一点

问题

每当我的IP cam重新启动或断开连接时;一旦IP cam重新联机,ffmpeg将卡在同一帧上,并且不会恢复

我的解决方案

我将ffmpeg输出记录到一个文件中,然后让脚本每隔几秒钟获取日志的最后一行,并比较帧号。如果帧号匹配,它将终止ffmpeg进程并启动另一个ffmpeg进程

我的问题

有没有更好更有效的方法

logchecker.sh

ffmpeg.sh


我一直在尝试做类似的事情。我使用ffmpeg录制IP摄像机镜头(Reolink),因为内置的ftp功能跳过了每个文件之间几秒钟的录制。有时录音会中断12秒。我使用Raspberry Pi作为服务器,我一直在使用以下命令来记录相机:

pgrep -x ffmpeg || ffmpeg -rtsp_transport tcp -i rtsp://admin:password@192.168.1.100:554//h264Preview_01_main -c copy -map 0 -f segment -segment_time 60 -segment_format mp4 -segment_atclocktime 1 -reset_timestamps 1 -strftime 1 /srv/dev-disk-by-id-usb-Seagate_Expansion_Desk_2HC015KJ-0-0-part1/camera/Backyard-%Y%m%d-%H%M%S.mp4
我用来检查ffmpeg是否挂起的命令是:

test `stat -L -c %Y /proc/$(pgrep -x ffmpeg)/fd/4` -ge $(($EPOCHSECONDS - 10)) || killall ffmpeg
事实证明,管道编号4是指向正在写入的当前文件的系统链接,因此我检查上次修改的时间,如果它不在最后10秒内,那么我将终止该进程。时间会证明这是不是正确的解决方案

pgrep -x ffmpeg || ffmpeg -rtsp_transport tcp -i rtsp://admin:password@192.168.1.100:554//h264Preview_01_main -c copy -map 0 -f segment -segment_time 60 -segment_format mp4 -segment_atclocktime 1 -reset_timestamps 1 -strftime 1 /srv/dev-disk-by-id-usb-Seagate_Expansion_Desk_2HC015KJ-0-0-part1/camera/Backyard-%Y%m%d-%H%M%S.mp4
test `stat -L -c %Y /proc/$(pgrep -x ffmpeg)/fd/4` -ge $(($EPOCHSECONDS - 10)) || killall ffmpeg