ライブrtmpストリームをリアルタイムでhlsストリームに変換しようとしています。
読んだ後にいくつかのアイデアを得た
ライブrtmpストリームをhlsに変換できますが、実行時には変換できません。コマンドを実行してhslファイル(.m3u8および.ts)をテストすると、表示できませんが、コマンドを中断してチェックすると、必要に応じてhlsファイルが取得されます。
私は解決策をグーグルで検索しましたが、適切な答えを得ることができませんでした。
どんな体も助けてくれますか?
前もって感謝します...
これは、入力ファイルまたはストリームを使用したHLSストリーミングの簡単なガイドです。
私はuser1390208のアプローチに従っているので、FFMSPEGを使用してrtmpストリームを生成し、サーバーはそれを受け取ってHLSを提供します。 Unreal/Wowza/Adobeの代わりに、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ファイルに接続できます。
これは、入力ファイルを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://localhost:12345/hls/mystream;
にストリームします。location /hls
があります。これは、VLCでhttp://myServer:80/hls/mystream.m3u8
に接続してHLSストリームにアクセスできることを意味します。すべてが明確ですか?ハッピーストリーミング!
この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フィードに多少の遅延がある場合があります。ただし、動作します。
この質問の更新として、ffmpegを使用せずにRTMPからHLSへのライブトランスコーディングを完了することに成功しました。
User3069376が共有するまったく同じnginx構成ファイルを使用し、.m3uhマニフェストを生成するパスに非常に注意するだけで、RTMPモジュール内のhlsオプションがそれを処理します。
ビデオプレーヤーに関しては、Video.Jsは魅力的なものでしたo