私は最近、
nginxのRoman Harutyunyan(@rarutyunyan)の素晴らしいモジュールについてのトピック「
nginxベースのオンラインブロードキャスト サーバー 」に出会いました:
nginx-rtmp-module 。 このモジュールは設定が非常に簡単で、nginxに基づいてビデオやライブブロードキャストを公開するためのサーバーを作成できます。
モジュールについては
GitHubのページで読むことができますが、簡単な使用例をいくつか示します。 このトピックがビデオビジネスの初心者(私のような)に役立つことを願っています。
RTMPの概要
RTMP(リアルタイムメッセージングプロトコル)は、アドビシステムズ独自のブロードキャストプロトコルです。 デフォルトのトランスポートはTCP(ポート1935)です。 HTTPでRTMP(RTMPT)をカプセル化することもできます。 RTMPクライアントは、主にAdobe Flash Playerです。
ビデオコーデック-H.264、AACオーディオコーデック、nellymoserまたはMP3、MP4またはFLVコンテナー。
ビデオを公開する
つまり、ビデオオンデマンド(VOD)です。 nginx.confをrtmpセクション{server {...}}に追加するだけです。
application vod { play /var/videos; }
(注:もちろん、このセクションをvodと呼ぶ必要はありません)これで、ビデオファイルを正しい形式で/ var / videosフォルダーに入れ、プレーヤーにプレーヤーを「フィード」することができます(例:rtmp://server/vod/file.flv)。 私が理解しているように、MP4はビデオの巻き戻しをネイティブでサポートしており、FLVは個別にインデックス付けする必要があります。
次の例はすべて、ffmpeg for Windowsを使用した「ライブ」ブロードキャストに関するものです。 ただし、この情報はLinuxユーザーには役立ちます。
生放送
公開用に同じRTMPプロトコルを使用して、ビデオとオーディオのストリームをサーバーに送信できます。 そして、お客様は放送を見ることができます。 これを行うには、サーバーにセクションを追加します。
application live { allow publish 1.2.3.4; allow publish 192.168.0.0/24; deny publish all; allow play all; live on; }
例に示すように、信頼できるIP以外のすべてのユーザーへのパブリケーションへのアクセスを直ちにブロックすることをお勧めします。
ブロードキャストするマシンで、最初にDirectShowデバイスのリストを取得する必要があります。 スタート-実行-cmd、ffmpeg / binフォルダーに移動して実行します:
ffmpeg -list_devices true -f dshow -i dummy
ソースの名前にロシア語の文字が含まれている場合は、krakozyabramiとして表示できます。 Trub管理者はiconvをハッチングしており、私のような単純な人はLebedevのWebサイトで byakを解読します 。 FFmpegは、読みやすい碑文を提供する必要があります。これで、ビデオおよびオーディオソースの名前がわかったら、
ffmpegでキャプチャしてサーバーに送信できます。
ウェブカメラ
少なくとも、ビデオソース、コーデック、およびサーバーを指定する必要があります。
ffmpeg -f dshow -i video="Webcam C170" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"
「Webcam C170」の代わりに、リストからカメラの名前を置き換える必要があります。
-anスイッチは、オーディオストリームを送信していないことを示します。 オーディオストリームが必要な場合、起動ラインは次のようになります。
ffmpeg -f dshow -i video="Webcam C170" -f dshow -i audio=" ..." -c:v libx264 -c:a libfaac -ar 44100 -ac 2 -f flv "rtmp://1.2.3.4/live/test.flv live=1"
ここでは、libfaacコーデック、サンプリングレート44100、2チャネル(ステレオ)を使用します。 AACの代わりにMP3(libmp3lameコーデック)を使用できます。

アナログカメラ
カメラにアナログ出力がある場合は、キャプチャデバイスを使用してコンピューターに接続できます。 Dealextremeで
安価なPALカメラと
USBキャプチャカードを使用します。
ffmpeg -r pal -s pal -f dshow -i video="USB2.0 ATV" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"

画面キャプチャ
2つのオプションがあります:
FFSplitをインストールするか、FFmpegで
screen-capture-recorderを使用し
ます 。
FFSplitは次の理由により使いやすい 便利なGUIがありますが、XP / 2003では機能しません。
2番目の方法を選択する場合、FFmpegの起動ラインは次のようになります。
ffmpeg -f dshow -i video="screen-capture-recorder" -c:v libx264 -an -r 2 -f flv "rtmp://1.2.3.4/live/test.flv live=1"
オーディオストリームは、virtual-audio-capturerでキャプチャできます。
アプリケーションでの画面キャプチャの例リレー
当然、FFmpegのビデオまたはオーディオファイル(またはストリーム)をサーバーに中継できます。 次の例では、リモートカメラからMJPEGビデオを送信します。
ffmpeg -f mjpeg -i video="http://iiyudana.miemasu.net/nphMotionJpeg?Resolution=320x240&Quality=Standard" -c:v libx264 -f flv "rtmp://1.2.3.4/live/test.flv live=1"
ただし、そのような目的のためには、RTMPサーバー自体でプッシュオプションを使用して中間リンクを除外し、サーバー自体でストリームをプルする方が合理的です。
日本のある種のウェブカメラチューニング、問題解決
-プリセット名 H.264には、超高速、超高速、超高速、高速、高速、中、低速、低速、超低速の圧縮/速度比のセットがいくつかあります。 したがって、生産性を高めたい場合は、以下を使用する必要があります。
-preset ultrafast
-crf 数は、ビットレートと品質に直接影響します。 値は0〜51で、値が大きいほど画質が低下します。 デフォルトは23、18-ロスレス品質です。 CRFが6減少すると、ビットレートは約2倍になります。
-r numberは、入力および出力FPSを指定します。 画像のキャプチャ元のソースについては、代わりに-r
-reを設定してネイティブFPSを使用できます。
-rtbufsize numberは、リアルタイムバッファーのサイズです。 バッファオーバーフローとフレームドロップに関するメッセージが常に表示される場合は、大きなバッファ(たとえば100000k)を配置できますが、これにより伝送遅延が増加する可能性があります。
-pix_fmtはカラーモデルを設定します。 画像の代わりに黒い四角が表示され、サウンドが機能する場合は、
yuv420pまたは
yuv422pを インストールしてみてください。
-s入力および出力画像サイズの
widthxheight 。
-g number私が理解する限り、これはキー間の最大フレーム数です。 FPSが非常に小さい場合は、この値を低く設定して、ブロードキャスト開始の遅延を減らすことができます。
-keyint_min numberは、キーフレーム間のフレーム
の最小数です。
-vf "crop = w:h:x:y"ビデオのトリミング
-ゼロ遅延の 「マジック」オプションを
調整して、ブロードキャスト遅延を減らします。 彼女が具体的に何をするか、私は見つけられなかった(-:
-analyzeduration 0は、継続時間分析を無効にします。これにより、ブロードキャストの待ち時間を短縮できます
上記のオーディオオプションに加えて、オーディオストリームがMP3 / AACへの追加の変換を必要としない場合、
-acodecコピーが必要になる場合があります。
例:音のない低遅延ウェブカメラからブロードキャストし、画像の上部に現在の時刻を描画します
ffmpeg -r 25 -rtbufsize 1000000k -analyzeduration 0 -s vga -copyts -f dshow -i video="Webcam C170" -vf "drawtext=fontfile=verdana.ttf:fontcolor=yellow@0.8:fontsize=48:box=1:boxcolor=blue@0.8:text=%{localtime}" -s 320x240 -c:v libx264 -g 10 -keyint_min 1 -preset UltraFast -tune zerolatency -crf 25 -an -r 3 -f flv "rtmp://1.2.3.4:1935/live/b.flv live=1"
サイト上のプレーヤー
ここではすべてが簡単です。
Flowplayerや
JW Playerなど、人気のあるプレーヤーの1つをサイトに配置します。
デモページでJW Player接続の例を見ることができます。
次は?
rtmpモジュールを使用すると、ビデオブロードキャストだけでなく、ビデオチャット、インターネットラジオ、ウェビナー用のシンプルなプラットフォームも作成できます。 がんばれ!
nginx-rtmp-moduleとffmpegの基本的な機能のみを考慮しました。 可能性ははるかに広いので、ドキュメントに注意してください。
Nginx-rtmp-moduleブログWiki nginx-rtmp-moduleFFmpegドキュメントストリーミングガイドx264エンコーディングガイドフィルタリングガイド