30

ffmpegRTMP ストリーミングを入力または出力として処理し、うまく機能しています。

いくつかのビデオ (python スクリプトによって管理される動的プレイリスト) を RTMP サーバーにストリーミングしたいのですが、現在非常に単純なことを行っています: FFMPEG を使用してビデオを 1 つずつ RTMP サーバーにストリーミングしていますが、これにより接続が切断されますビデオが終了するたびに、次のビデオが始まるとストリームの準備が整います。

これらのビデオを、接続が切断されることなく連続してストリーミングしたいのですが、ストリームは正しく表示されます。

このコマンドを使用して、動画を 1 つずつサーバーにストリーミングします

ffmpeg -re -y -i myvideo.mp4 -vcodec libx264 -b:v 600k -r 25 -s 640x360 \
-filter:v yadif -ab 64k -ac 1 -ar 44100 -f flv \
"rtmp://mystreamingserver/app/streamName"

私は何日もの間、インターネット上でいくつかの回避策を探しましたが、名前付きパイプを入力として使用することについて話している人を見つけましffmpegffmpeg。ビデオが来ますが、それ自体も閉じます。

これを行う方法はありますか?ffmpeg(接続を切断することなく、RTMP サーバーに動画の動的プレイリストをストリーミングします

4

4 に答える 4

9

更新(受け入れられた回答を削除できないため):適切な解決策は、連結のものと同様のカスタムデマルチプレクサを実装することです。現在、他のクリーンな方法はありません。手を汚してコーディングする必要があります。

以下は醜いハックです。これは非常に悪い方法です。絶対にやめてください。

このソリューションでは、concat demuxerを使用し、すべてのソース メディア ファイルが同じコーデックを使用することを前提としています。この例は MPEG-TS に基づいていますが、RTMP でも同じことができます。

  1. 次の形式で、ダイナミック プレイリストのエントリ ポイントの膨大なリストを保持するプレイリスト ファイルを作成します。

    file 'item_1.ts' file 'item_2.ts' file 'item_3.ts' [...] file 'item_[ENOUGH_FOR_A_LIFETIME].ts'

    これらのファイルは単なるプレースホルダーです。

  2. 現在のプレイリスト インデックスを追跡し、オンザフライでシンボリック リンクを作成するスクリプトを作成します。current_index + 1

    ln -s /path/to/what/to/play/next.ts item_1.ts

    ln -s /path/to/what/to/play/next.ts item_2.ts

    ln -s /path/to/what/to/play/next.ts item_3.ts

    [...]

  3. プレイを開始 ffmpeg -f concat -i playlist.txt -c copy output -f mpegts udp://<ip>:<port>

  4. 怒ったシステム管理者に追われて名前を呼ばれる

于 2015-03-14T14:57:24.670 に答える