如果connention中断,则ffmpeg将从直播流录制视频关闭

法罕·沙希德(Farhan Shahid)

我正遇到FFMPEG流的问题。我试图将我的实时流记录到File_Name.ts文件中。使用以下代码可以正常工作

ffmpeg -i“ http://clientportal.link:8080/live/tmalik/Tanveer/9026.m3u8” -c复制abc.ts -y

但是实际的问题是我的输入流不是很稳定,并且在平均1个小时后会停止播放4-6秒。

现在,如果我从Link(在上面的代码中作为输入提供)返回流,则可以通过任何方式自动重新连接。

重要的是在UBUNTU机器上工作。因此,如果有任何bash文件将被磨碎。

剥壳机

制作一个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。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章