ホームページ  >  記事  >  バックエンド開発  >  nginx サーバーでマルチメディア ストリームの記録とトランスコーディングを実装する方法

nginx サーバーでマルチメディア ストリームの記録とトランスコーディングを実装する方法

WBOY
WBOYオリジナル
2016-08-08 09:25:482092ブラウズ

nginx ストリーミング メディア サーバーの展開に関する記事は数多くありますが、今日はストリームを MP4 ファイルにトランスコードして保存する際にストリームをサーバーにプッシュする方法について説明します。ここでは ffmpeg を使用します。

1. まず注意すべき点は、exec コマンドが使用できないことです。クライアントのプッシュ ストリームが終了すると、呼び出された外部プログラムは自動的に終了します。その結果、ffmpeg は最終的に完全なエンコードを実行できなくなります。このコマンドは、受信したトラフィックを他のアドレスにプッシュする場合にのみ適しています。
2. 記録コマンドでは exec_record_done を使用する必要があります。つまり、録音が完了すると、録音されたファイルは自動的にトランスコードされて MP4 ファイルが取得されます。 Record_interval コマンドが使用されるかどうかに応じて、2 つの異なる状況が存在します。
2A. Record_interval を使用しない場合、トランスコーディングはストリーミングが停止した後 (つまり、レコードが完全に停止した後) に実行され、それまでは出力は取得されません。
2B を使用する場合は、設定できます。録画を再開するたびにトランスコーディングを実行し、record_append on コマンドと組み合わせると、最後に録画されたビデオが 1 つのファイルに確実に含まれるようになります。そうでない場合は、録画ごとに別のファイルが生成されます。この 2 つのコマンドを使用した後、一定間隔でトランスコードが実行されますが、最終的には同じファイルに出力 (上書き) されます。利点は、ほぼ「リアルタイム」でトランスコードできることですが、欠点は、ffmpeg を繰り返し呼び出してシステム リソースを占有することです。
3. 上記 2 つの方法で得られる最終的なトランスコードされたファイル (期間) は同じであることに注意してください。
4. nginx.conf の設定例
application hls {  
             live on;  
             hls on;  
	    
            record all;
            record_path /home/zhanghui/test;
			#record_interval 10s;
			#record_append on;


            hls_path /tmp/app;  
            hls_fragment 5s; 


			# convert recorded file to mp4 format
			exec_record_done '/usr/local/bin/ffmpeg' -y -i /home/zhanghui/test/livestream.flv -vcodec libx264 -f mp4 /home/zhanghui/test/test_record.mp4 2>>/home/zhanghui/test/test_record.log;
       }

上記では、nginx サーバー上でマルチメディア ストリームの記録とトランスコーディングを実現する方法を、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。