node-media-server を使用するプロセスの一部を記録します。この記事の環境はWindowsです。この記事は初心者向けです。 使用されるもの: 以下、ポイントをいくつか挙げます(間違いがあればご指摘ください)。 Node-media-server はストリーミング メディア サーバーです。これは、ストリーム形式を変換したり、ビデオ ストリームに対して何らかの操作を実行したり、ストリーム アドレスを外部にプッシュしたりするために使用されるトランジット ステーションと考えることができます。 ffmpeg は、変換する必要があるビデオまたはビデオ ストリームをストリーミング メディア サーバーにプッシュするためのストリーミング ツールとして使用されます。 ストリームのプルとは、ストリーミング サーバーからビデオ ストリームをプルすることを意味し、視聴者はストリーミング サーバーによって公開されたストリーム アドレスをプルして視聴します。ビデオ プレーヤーで再生すると、ストリームが取得されます。 インストールnode-media-server は node.Js をベースに開発されているため、まず npm を使用してインストールする必要があります。 npm ノードメディアサーバーをインストールします node-media-server の作成と実行新しい app.js を作成します。次のコードを書いてapp.jsを実行します。 NodeMediaServer が必要です ('node-media-server')。 定数設定 = { rtmp: 港: 1935年、 チャンクサイズ: 60000、 gop_cache: 真、 ピング: 60, ping_タイムアウト: 30 }, http: { ポート: 8000、 allow_origin: '*'、 } }; var nms = 新しいNodeMediaServer(config) nms.run(); localhost:8000/admin アドレスにアクセスして、node-media-server 管理インターフェイスにアクセスできます。スクリーンショットは次のとおりです。 FFmpeg コマンドを使用してアドレスをプッシュします。ビデオファイルをプッシュする 以下のコードを実行するときは、node-media-server を起動する必要があります。 ffmpeg -re -i ./video.mp4 -c コピー -f flv rtmp://localhost:1935/live/STREAM_NAME 上記のコマンドは、node-media-server を通過した後、2 つのストリーム アドレスを生成します。 rtmp の一種。 flv。前者はコンピューターでプレイでき、後者は携帯電話とコンピューターの両方でプレイできます。 rtmpアドレスはFFmpegのコマンドアドレスです flv アドレスは http://localhost:8000/live/STREAM_NAME.flv です。 rtspストリームをプッシュrtsp (カメラ ビデオ ストリーム) をプッシュするには、上記の ./video.mp4 を変更するだけです。テスト中、ブロガーは、rtsp ストリームをプッシュすると、緑色の画面が表示されるか、パケット損失が発生することを発見しました。特に、hls と組み合わせると、パケット損失率がさらに高くなるため、コマンドを使用して rtsp ストリームをプッシュすることは推奨されません。 HLSストリーム形式を変換するhls ストリームを変換する際に注意すべき点の 1 つは、mediaroot パラメータを指定する必要があることです。デフォルト値は node-media-server 内で設定されていますが、一度設定することをお勧めします。次に、次の構成を使用します。 NodeMediaServer が必要です ('node-media-server')。 ffmpeg をロードするには、 'ffmpeg' という引数を使用します。 定数設定 = { rtmp: 港: 1935年、 チャンクサイズ: 60000、 gop_cache: 真、 ピング: 60, ping_タイムアウト: 30 }, http: { ポート: 8979、 mediaroot: './media/', // allow_origin: '*' と記述することをお勧めします。 }, trans: { // ここでのパラメータはtransパラメータであり、relayパラメータではありません。relayパラメータのhls設定は無効です ffmpeg: './bin/ffmpeg.exe', //FFmpegの場所を指定しますtasks: [ { アプリ: 'ライブ'、 ac: 'acc', VC: 'libx264', hls: 本当、 hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]', ダッシュ: 真、 ダッシュフラグ: '[f=ダッシュ:window_size=3:extra_window_size=5]' } ] } }; var nms = 新しいNodeMediaServer(config) nms.run(); 上記のコードを開始した後、FFmpeg を使用してストリームをプッシュします。しばらくすると、mediaroot が指すディレクトリに live/STREAM_NAME フォルダーが生成され、その中に m3u8 ファイルが含まれていることがわかります。最初にm3u8ファイルを生成する必要があるため、ストリーミングカメラの場合は比較的大きな遅延が発生します。 m3u8 アドレスは次のとおりです: http://localhost:8000/live/STREAM_NAME/index.m3u8 m3u8 の再生で問題が発生した場合は、ac および vc パラメータを削除してみてください。 OP は実際にはこれら 2 つのパラメータを使用しませんでした。 コードを使用してrtspをストリーミングする一部のユーザーの場合、クロスエンド プレビューのために rtsp カメラ ビデオ ストリームをプッシュする必要がある場合があります。ブロガーはこの方法を使用することを推奨しています。この方法では、FFmpeg コマンドを実行するために cmd を使用する必要はなく、ブロガーは遅延が 3 秒であることをテストしました (イントラネット、外部ネットワーク アドレスがないため、外部ネットワークはあまり明確ではありません)。遅延が少なくなります。 コードは次のとおりです。 NodeMediaServer が必要です ('node-media-server')。 定数設定 = { rtmp: 港: 1935年、 チャンクサイズ: 60000、 gop_cache: 真、 ピング: 60, ping_タイムアウト: 30 }, http: { ポート: 8979、 メディアルート: './media/', allow_origin: '*'、 }, リレー: { ffmpeg: './bin/ffmpeg.exe', タスク: { アプリ: 'ライブ'、 モード: '静的'、 エッジ: 'rtsp://admin:****@192.168.4.167:554/Streaming/Channels/101', //rtsp 名前: 「テクノロジー」 rtsp_transport : 'tcp', //['udp', 'tcp', 'udp_multicast', 'http'] } ] }, }; var nms = 新しいNodeMediaServer(config) nms.run(); この方法では、rtmp と flv の 2 つのビデオ ストリームを生成できます。 要約するブロガーは、主にカメラ ストリームを転送するプロジェクトのためにストリーミング メディア サーバーを構築しましたが、JAVA の同僚が以前にそれを扱ったことがあり、大量のハードウェア リソースを消費することが分かりました。ただし、ブロガーは node-media-server を使用した場合にどれだけのリソースが消費されるかを把握していないため、まだ具体的なテストが必要です。さらに、カメラ ストリーミングの場合、不要なパフォーマンス消費を避けるために、OP は、オブザーバーがプレビューを開始したときにのみ、サーバーがストリーミング メディア切り替え機能 (rtsp ストリームを切り替えるコードを使用) を開始できるようにすることを意図しています。オブザーバーがプレビューを閉じると、ストリーミング メディア機能はすぐにオフになります。これにより、パフォーマンスの不必要な消費を回避できます。結局のところ、コードを介して直接操作できるため、より便利であり、サーバーへの負担をある程度軽減することもできます。 これで、node-media-server を使用してシンプルなストリーミング メディア サーバーを構築する方法についての説明は終わりです。node-media-server を使用してストリーミング メディア サーバーを構築する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux での crontab スケジュール実行コマンドの詳細な説明
>>: MySQL の大きなデータ テーブルにフィールドを追加する方法
開発中にサーバーを起動する必要がある場合、ローカルテストではポートを直接書き込み、実際の環境ではバイ...
1. 目標: mysql の character_set_server の値を latin1 から ...
CentOS 8 が利用可能になりました! CentOS 8 と RedHat Enterprise...
目次複数の条件文複数属性オブジェクトスイッチステートメントを置き換えるデフォルトパラメータとデストラ...
W3C は最近、「 XHTML Basic1.1 」と「 Mobile Web Best Prac...
序文MySQLクエリはselectコマンドを使用し、limitとoffsetパラメータを使用して、指...
mysql使用中に接続数が超過していることが判明しました~~~~ [root@linux-node...
目次執筆の背景プロジェクトの説明事前準備注記執筆の背景以前のプロジェクトではTencent Maps...
この記事では、優れた Web ページのカラー マッチングの事例を 20 件集めて紹介します。これらの...
Linux に VMWare をインストールするには、公式 Web サイト https://www....
1. 切断理由WebSocket が切断される理由は多数あります。WebSocket が切断されたと...
序文一般的な開発では、画像をディレクトリにアップロードし、ディレクトリとファイル名を連結してデータベ...
この記事では、JavaScriptで簡単なGobangゲームを実装するための具体的なコードを参考まで...
どの DBMS でも、インデックスは最適化にとって最も重要な要素です。データ量が少ない場合、適切なイ...
背景:かなり前(2017.6.5、記事にはタイムリーさがあり、特に使用されているツールは頻繁に更新さ...