web-dev-qa-db-ja.com

ffmpegを使用して、ライブrtmpストリームをライブhlsストリームにトランスコードするにはどうすればよいですか?

ライブrtmpストリームをリアルタイムでhlsストリームに変換しようとしています。

読んだ後にいくつかのアイデアを得た

http://sonnati.wordpress.com/2011/08/30/ffmpeg-%E2%80%93-the-swiss-army-knife-of-internet-streaming-%E2%80%93- part-iv /

ライブrtmpストリームをhlsに変換できますが、実行時には変換できません。コマンドを実行してhslファイル(.m3u8および.ts)をテストすると、表示できませんが、コマンドを中断してチェックすると、必要に応じてhlsファイルが取得されます。

私は解決策をグーグルで検索しましたが、適切な答えを得ることができませんでした。

どんな体も助けてくれますか?

前もって感謝します...

34
Kiran

これは、入力ファイルまたはストリームを使用したHLSストリーミングの簡単なガイドです。

私はuser1390208のアプローチに従っているので、FFMSPEGを使用してrtmpストリームを生成し、サーバーはそれを受け取ってHLSを提供します。 Unreal/Wowza/Adob​​eの代わりに、rtmpモジュールを備えた無料のサーバーnginxを使用します。これはセットアップが非常に簡単です。これは私が簡単に行う方法です:Any input file or stream -> ffmpeg -> rtmp -> nginx server -> HLS -> Clientまたはそれ以上の詳細:

入力ビデオファイルまたはストリーム(http、rtmp、何でも)-> ffmpegはx.264 + aacへのライブトランスコード、rtmpへの出力-> nginxはrtmpを取得し、ユーザー(クライアント)にHLSを提供します。そのため、クライアント側ではVLCなどを使用して、nginxが提供する.m3u8ファイルに接続できます。

  • this nginxのセットアップガイドに従いました。
  • これ はnginxの設定ファイルです。
  • これは、入力ファイルをrtmpにトランスコードするためにffmpegを使用する方法です。

    ffmpeg -re -i mydirectory/myfile.mkv -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost:12345/hls/mystream;
    

    (.mkvは、入力に応じて、5.1サウンドで1080pです。より低いビットレートを使用する必要があります!)

どこからrtmpストリームを取得しますか?

  • ファイル?その後、あなたはまさに私のアプローチを使用することができます。
  • ストリームYを持つサーバーX次に、ffmpegコマンドを次のように変更する必要があります。

    ffmpeg -re -i rtmp://theServerX/yourStreamY -c:v libx264 -b:v 5M -pix_fmt yuv420p -c:a:0 libfdk_aac -b:a:0 480k -f flv rtmp://localhost:12345/hls/mystream;
    

    または、rtmpストリームがすでにh.264/aacエンコードされている場合、ffmpegでcopyオプションを使用して、コンテンツをnginxに直接ストリーミングしてみてください。

私のnginx設定ファイルで見るように:

  • 私のrtmpサーバーには、「hls」という「アプリケーション」があります。 nginxがffmpegのrtmpストリームをリッスンする場所を説明する部分です。そのため、ffmpegはrtmp://localhost:12345/hls/mystream;にストリームします。
  • Httpサーバーにはlocation /hlsがあります。これは、VLCでhttp://myServer:80/hls/mystream.m3u8に接続してHLSストリームにアクセスできることを意味します。

すべてが明確ですか?ハッピーストリーミング!

70
user3069376

このRTMPからHLSへのコマンドライン設定を試してください。

ffmpeg -v verbose -i rtmp://<Host>:<port>/<stream> -c:v libx264 -c:a aac -ac 1 -strict -2 -crf 18 -profile:v baseline -maxrate 400k -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 <pathToFolderYouWantTo>/<streamName>.m3u8

HLSフィードに多少の遅延がある場合があります。ただし、動作します。

21
Sumoanand

この質問の更新として、ffmpegを使用せずにRTMPからHLSへのライブトランスコーディングを完了することに成功しました。

User3069376が共有するまったく同じnginx構成ファイルを使用し、.m3uhマニフェストを生成するパスに非常に注意するだけで、RTMPモジュール内のhlsオプションがそれを処理します。

ビデオプレーヤーに関しては、Video.Jsは魅力的なものでしたo

2
chinchillaboy