2016-10-05 4 views
2

私はFFMPEGストリームの問題に直面しています。ライブ実行ストリームをFile_Name.tsファイルに記録しようとしています。そのコードffmpegライブストリームからビデオを録画する場合、エンベロープが打ち切られた場合

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

以下で細かい作業が、実際の問題は、私の入力ストリームが4-6秒の平均1時間後くらい安定しており、その停止ではないということです。

ここでは、私がストリームから戻ってきた場合に自動的に再接続できる方法があります(上記のコードで入力として与えられています)。

重要なことは、私がUBUNTUマシンで作業していることです。だから、もし怒っているbashファイルがあれば。

+0

この問題を解決するまでクリティカルなビデオが欠落している場合は、cmdを「無限ループ」に入れるようなストップギャップソリューションを使用できます。「真実だ。 do ffmpeg ....;これは停止するたびにffmpegを再起動します。おそらく、ファイル名に日付/時刻スタンプを追加して、あとでソフトウェアでそれらを組み立てることができます。 (私はそのようなものは存在すると知っていますが、何を使うべきかを教えてくれません)。 '-c copy abc。$(/ bin/date +%Y%m%d。%H%M%S).ts ...'を使用して、作成された各ファイルに新しい日付スタンプを追加します。がんばろう。 – shellter

+0

お返事ありがとうございます。私はあなたがこれで私を助けることができますbashとgudではないです。 –

+0

私は少しお手伝いしますが、私はテクニカルサポートにはいりたくありません。ビジー状態になりました。ちょっと後に、より完全なバージョンを投稿します。がんばろう。 – shellter

答えて

1

(単なるテキストエディタ、それを保存するには、Windowsエディタを使用していない)ファイルに

#!/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 

保存は、このようなbashスクリプトを作ります。

は今

もちろん変更
nohup /path/to/ffmpegRestarter.sh > /tmp/ffmpegRestarter.log.${startDateTime}.$$ 2>&1 & 

(、/path/toに、あなたのターミナルコマンドラインから実行して

chmod +x ffmpegRestarter.sh 

で、(それがスクリプトとして実行されます)実行可能ファイルとしてファイルをマークスクリプトへの適切なパス)

これで、端末セッションで他のことを行うことができます。あるいは、監視のためだけに別の端末セッションを開始することができます。あなたは、ファイルを見て停止するCtrl-Cを使用

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

を使用することによって物事が起こっているかを確認するために/tmp/${logName}.logファイルの末尾に見ることができます。

端末をすべて終了し、後でそのファイルを見ることができます。

ます。また、作成されているか、ファイルを監視したいので、あなたが望む任意の数に-5を変更することができ、そしてそれはあなたのそれぞれの最後のNファイルが表示されます以下の2つのコマンド

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

を使用しますタイプ。

あなたは問題があると思いますし、スクリプトを殺したい、

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。

+0

このスクリプトのおかげで。その作業の罰金と完璧。私が今必要としている最後のものは1つだけです。 30秒後に別のプロセスをbashファイルで起動できますか? –

+0

@FarhanShahid:編集を参照してください。 – shellter

+0

@FarhanShahid:http://meta.stackexchange.com/a/5235/160242 :-)。がんばろう。 – shellter

関連する問題