我正面临FFMPEG流的问题。我试图记录我的现场运行流File_Name。ts文件。使用以下代码
可以正常工作<>之前ffmpeg -i "http://clientportal.link:8080/live/tmalik/Tanveer/9026。-c copy abc。ts - y之前但实际问题是我的输入流不是很稳定,它在平均1小时后停止4-6秒。
现在有任何方法,我可以自动重新连接,如果我得到了我的流从链接返回(上面给出的代码作为输入)。
重要的是我在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 .