ffmpeg录制来自直播的视频,如果连接入侵则关闭

时间:2016-10-05 21:51:04

标签: bash ubuntu video ffmpeg stream

我遇到了FFMPEG流的问题。我正在尝试将我的实时运行流记录到File_Name.ts文件中。它的工作正常,代码如下

ffmpeg -i "http://clientportal.link:8080/live/tmalik/Tanveer/9026.m3u8" -c copy abc.ts -y

但实际问题是我的输入流不稳定,平均1小时后停止4-6秒。

现在有什么方法可以自动重新连接,如果我从Link获得我的流(在代码中作为输入给出)。

重要的是在UBUNTU机器上工作。所以,如果有任何bash文件将被扼杀。

1 个答案:

答案 0 :(得分:1)

制作一个类似

的bash脚本
#!/bin/bash
# this script will run until someone kills it
echo PID="$PID"
while true ; do
    startDateTime=$(/bin/date +%Y-%m-%d.%H%M)
    echo "starting ffmpeg at ${startDateTime}"
    ffmpeg -i "http://clientportal.link:8080/live/tmalik/Tanveer/9026.m3u8" -c copy abc."${startDateTime}".ts -y
    # sleep 0.5
done

将其保存到文件中(不要使用Windows编辑器进行保存,只需使用纯文本编辑器)。

现在使用

将文件标记为可执行文件(因此它将作为脚本运行)
chmod +x ffmpegRestarter.sh

从终端命令行以

运行它
nohup /path/to/ffmpegRestarter.sh > /tmp/ffmpegRestarter.log.${startDateTime}.$$ 2>&1 &

(当然,将/path/to更改为脚本的正确路径。)

您现在可以在终端会话中执行其他操作,或者您可以启动另一个终端会话,仅用于监控,您可以查看/tmp/${logName}.log文件的末尾以查看事物的方式正在使用

tail -f /tmp/ffmpegRestarter.log."${startDateTime}".* 

您使用Ctrl-C停止观看该文件。

您可以完全退出终端并稍后返回查看该文件。

您还希望监控正在创建的文件,因此请使用这两个命令

/bin/ls -l /path/to/abc.* | tail -5
/bin/ls -l /tmp/ffmpegRestarter.log.* | tail -5

您可以将-5更改为您想要的任何数字,它会显示每种类型的最后N个文件。

如果您认为存在问题且想要终止该脚本,请使用

pid=$(grep '[P]ID=' /tmp/ffmpegRestarter.log.YYYY-MM-DD.HHMM.$$)
pid=${pid#PID=}
ps -ef | grep "$pid"   # this line to confirm that the job is still running
# will return something like
# userX    1088  1029  0 16:31 ?        00:00:00 /path/to/ffmpegRestarter.sh
kill $pid

#worst case, use
kill -9 $pid
# dont get in a habit of using `-9` on kill, bad things can happen! ;-)

我在这里留下了一些小错误,所以你必须考虑发生了什么以及缺少什么 ;-) ...

根据您的查询" 30秒后运行另一个程序",您只需要

nohup /path/to/ffmpegRestarter.sh > /tmp/ffmpegRestarter.log.${startDateTime}.$$ 2>&1 &
sleep 30
anotherProgram

IHTH。