node-media-serverを使用してシンプルなストリーミングメディアサーバーを構築する

node-media-serverを使用してシンプルなストリーミングメディアサーバーを構築する

node-media-server を使用するプロセスの一部を記録します。この記事の環境はWindowsです。この記事は初心者向けです。

使用されるもの: nodeJsffmpegnode-media-server

以下、ポイントをいくつか挙げます(間違いがあればご指摘ください)。

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 をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Nodejsはローカルサーバーを構築し、クロスドメインの問題を簡単に解決します
  • Node.js でローカル サーバーを構築し、ファイルにアクセスする方法
  • nodeJS でローカル ファイル サーバーを構築するいくつかの方法の概要
  • node.js を使用してシンプルな Web サーバーを構築する方法のチュートリアル
  • Nodejs はシンプルな Web サーバーを構築します。詳細な説明と例
  • Nodejs で Web サーバーを構築する方法
  • データをリクエストするためのプロキシサーバーを構築するためのNode.jsの詳細な説明
  • NodeJsはローカルサーバーを構築し、携帯電話のアクセスを使用して例を説明します
  • Windows 上で Node.js を使用して静的ファイル サーバーを構築する簡単な方法
  • NodeはExpressを通じて独自のサーバーを構築します

<<:  Linux での crontab スケジュール実行コマンドの詳細な説明

>>:  MySQL の大きなデータ テーブルにフィールドを追加する方法

推薦する

Linuxにgitをインストールする方法

1. はじめにGit は、規模の大小を問わずあらゆるプロジェクトを俊敏かつ効率的に処理するために使用...

JS の 6 つの継承方法とその長所と短所

目次序文プロトタイプチェーン継承コンストラクタの継承組み合わせ継承(プロトタイプチェーン継承とコンス...

XHTML Web ページ チュートリアル

<br />この記事は主に、初心者にXHTMLの基本知識と、XHTMLとHTMLの違いを...

DIV と画像の水平および垂直の中央揃えは複数のブラウザと互換性があります

最初のタイプ: 完全な CSS コントロール、レイヤーフローティング (ログインページに適しています...

製品を選択した後、右下隅に√記号を表示するための純粋なCSS

おすすめの記事: CSS 疑似クラスの右下隅をクリックすると、選択を示すチェックマークが表示されます...

TypeScript デコレータ定義

目次1. コンセプト1.1 定義1.2 デコレータファクトリー1.3 デコレータの組み合わせ1.4 ...

MySQLのインストール時に発生する可能性のある問題

質問1:インストール中に net start mysql と入力すると、次のエラー メッセージが表示...

JavaScript の絶妙なスネーク実装プロセス

目次1. HTML構造を作成する2. テーブルを作成する3. ヘビの頭と体を作る4. 食べ物を作る5...

HTML における src と href の違いについての簡単な説明

簡単に言うと、srcは「このリソースをロードしたい」という意味で、hrefは「このリソースに関連付け...

WeChatアプレットは写真アップロード機能を実現

この記事の例では、WeChatアプレットで写真をアップロードするための具体的なコードを参考までに共有...

スーパーバイザーによるDockerfileのマルチサービスイメージパッケージ操作

Dockerfileの作成yumソースを設定する cd /tmp/docker vim Docker...

Tomcat の静的ページ (html) で中国語の文字化けが発生する問題の究極の解決策

tomcatでは、jspは文字化けしませんが、htmlの中国語は文字化けします理由はいくつかあります...

docker を使用してシンプルな C/C++ プログラムをデプロイする方法

1. まずhello-world.cppファイルを作成しますプログラムコードは次のとおりです。 #i...

ウェブページ経由で jar パッケージを Nexus にアップロードする方法

Maven を使用してプロジェクトを管理する場合、jar パッケージをプライベート ウェアハウスにア...

HTMLページ間でパラメータを渡すフロントエンド方式の詳細な説明

プロジェクトでよくある状況として、案件リストなどのリストが存在することがあります。リスト内の項目をク...