Linuxには、ファイルの作成を待ってシンボリックリンクを生成する方法があります。

Linuxには、ファイルの作成を待ってシンボリックリンクを生成する方法があります。

質問が変なようです。しばらく時間をかけてお読みください。

1-ffmpegコマンドを含む.shがあります(このコマンドは機能し、ここではすべてが正常です)。

2 - 録音を開始するためにAPI呼び出しを介して.shをトリガーします(ここでもうまく機能します)。

3-ffmpegが.mp4の生成を開始します。

4- .mp4を.m3u8にシンボリックリンクしたいのですが(Safariは.mp4をマニフェストとして読んでいないので)。

**気になるかもしれません。 .shのffmpegを変更して.m3u8を出力したらどうでしょうか?

*****頑張ったただし、不明な理由から、スクリプトは.mp4を除くすべての拡張子が好きではありません。

***** .mov .mkv .m3u8を出力すると=>理由はわかりませんが、10秒後に停止します:(

*****私が見つけた解決策は、ffmpegが.mp4を生成し、hls.jsがSafariを含むすべてのブラウザで再生できるように.m3u8へのシンボリックリンクを生成することでした。

私はシンボリックリンクを作成する前にこの.mp4が存在するのを待つ方法を探しています。

以前はシンボリックリンクの作成をテストしていましたが、ln -s fileThatDontExistsYet.mp4 NewFile.m3u8NewFile.m3u8にアクセスしようとすると、404が見つかりませんでした。手動で.mp4を待ってから同じコマンドを実行すると、=>動作します。

それで、この奇妙な状況では、私はシンボリックリンクを作成する前にx秒間眠ることが危険で良い習慣ではないことを知りました。ファイルがシンボリックリンクに到達するまでLinuxコマンドを繰り返す方法はありますか?

--------編集1 ---

コンテキスト: SERVER1 => ウェブサイト SERVER2 => docker で実行されている openvidu

-1- ユーザーがチャットルーム(SERVER2)を作成します。 -2- SERVER2 が SERVER1 に Webhook を送信し、セッションの開始を指示します。 -3- 次に、API呼び出し:SERVER1はSERVER2にcomposite.shを記録してトリガーするように指示します。 ----追加:SERVER1はx秒待機し、リモートでSSHを介してシンボリックリンクを生成します。 -4- .shがffmpegを起動します。 -5- ffmpegがチャット中に.mp4を生成します。 -6-私の修正(下記参照)はHLSフォーマットストリームを作成することです。 -7-他のユーザーがブラウザを介して.m3u8にアクセスできるようにします。 (ページには.m3u8を再生するためのhls.jsがあります。){SERVER1} -8- 4秒のストリーミング遅延を達成できますが、これは悪くありません。 ;)

完全なソース.shを見ることができるリンクは次のとおりです。https://raw.githubusercontent.com/OpenVidu/openvidu/master/openvidu-server/docker/openvidu-recording/scripts/composed.sh

******** 79行*****変更されました

-c:a aac -c:v libx264 -preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p

これで

-c:a aac -c:v libx264 -movflags +dash 
-preset ultrafast -crf 28 -refs 4 -qmin 4 -pix_fmt yuv420p 
-tune zerolatency -c:a aac -ac 2 -profile:v main 
-flags -global_header -bufsize 969k 
-hls_time 1 -hls_list_size 0 -g 30 
-start_number 0 -streaming 1 -hls_playlist 1 
-lhls 1 -hls_playlist_type event -f hls

奇妙に見えますが、うまくいきます。唯一の関心事は、シンボリックリンクが作成されるまで「x秒待つ」です...サーバーが非常に忙しく、x秒後に.mp4が生成されます。流れ。

ベストアンサー1

あなたの質問全体を読んでいないことを認めなければなりませんが、タイトルで判断すると次のようになります。

while [ ! -f /tmp/originalfile ] ; do sleep 1 ; done ; ln -s /tmp/originalfile /tmp/symlink

おすすめ記事