web-dev-qa-db-ja.com

RTMPを介したNodeJSおよびRED 5メディアサーバー

これは直接的な「これを行う方法」というよりはむしろ概念的な質問です。

HTML5とnodeJS/binaryJSで(webRTCなどからストリームデータを取得する場所に関係なく)オーディオをストリーミングするフラッシュのようなソリューションを実装することは一般に可能ですか?もしそうなら、これについてどう思いますか?

Stackoverflowへの問い合わせは1つしかありません ここにあります と2010年からの問い合わせです。それ以降、NodeJSとHTML5は成長して成熟しています。

人々が通常行うこと:サーバーへのマルチメディアストリーミング(つまり、ビデオまたはオーディオ)を使用する場合、現時点でFlashに勝るものはありません。 getUserMedia() が完全に到着するまで---正直に言うと しばらく時間がかかる ブラウザユーザーの99%が使用するまで。

データをサーバーにストリーミングする一般的な方法は、クライアントフラッシュまたはFlexアプリケーションを使用して、次に RED5[〜#〜] fms [〜 #〜] または Wowza 。たとえば、RTMP経由でマイク入力を送信するクライアントアプリは、次のようになります(簡易バージョン)

import flash.net.NetStream;

private var myMic:Microphone;
private var nc:NetConnection;
private var ns:NetStream

nc = new NetConnection();    
ns = new NetStream(nc);
nc.connect(rtmp://localhost/serverApp);
myMic = Microphone.getMicrophone();
ns.attachAudio(myMic);

サーバーアプリケーションと組み合わせることで、データをサーバーにストリーミングすることが簡単にできます。

私がやりたいこと:アプリサーバーを nodeJS で実行します(おそらく実装 socketIO 着信RTMPストリームをキャッチする binaryJS )。何かのようなもの

//require
var rtmp = require('node-rtmp'),
var fs = require('fs');

//rtmp server address
var rtmpServer = 'rtmp://localhost';

//create a binary server listening that receives stream data
var RTMPServer = rtmp.RTMPServer();
var server = RTMPServer ({port: 1935});

server.on('connection', function(client){
 //check if user is allowed to do so
 rtmp.newStream(client.stream);
});

おそらく、socketIOを使用して、eventEmittersを介したユーザーインタラクションを区別する方が良いでしょう。

利点は何でしょうか:一般的に言えば、この種のアプローチを行うのは少しオーバーヘッドのように見えますが、私にとっては利点があるかもしれません。これについてもコメントしてください。

  • 実行することにより、ユーザー操作の簡単な検証 express およびsocketIO
  • フラッシュ(RTMP経由)とgetUserMedia()のハイブリッド実装(binaryJSとMozilla AudioAPIを追加することによるバイナリ転送メカニズム経由)
  • getUserMedia()が完全にサポートされると、フラッシュの実装を簡単に削除できます
  • rtmpのフォローアップとユーザー操作の一般的な制御を強化
  • サーバーフレームワークへの簡単な実装

UPDATE:node-rtmpパッケージのみ の責任者であるMalcontenti-Wilson氏と話しました==しかし、8か月前に書かれていなかったため中止されました。これを使用したか、コードをチェックできた人はいますか?

UPDATE 2:Malcontenti-Wilson氏にメールを送って、注意を喚起します node-mtrude (一種の奇妙な名前)私たちがおそらく望んでいるようなことをしています。誰かがこの種のパッケージで作業していますか?

60
toxicate20

はい、可能ですが、いくつか問題があります。

1)Red5はひどく文書化されておらず、バグがあります。

2)rtmpe/rtmps

3)パフォーマンス/スケーラビリティ

4)1から3は克服できるものですが、メディア配信とそれに関連するすべての問題を非常に親密に知ることなくしてはできません。あなたが終わった時までに、あなたは本当にそれを理解している800人のような一人になるでしょう。予期しない問題を解決するには、長い道のりをたどる必要があります。

2
Steve Kallestad

vertx というプラットフォームが利用可能になり、ポリゴットの開発が可能になりました。そのため、red5 jarを既存のコードと共にサーバー側に含めることができ、rtmpストリーミングサーバーを実行できます。クライアント側では、video.jsやJWプレーヤーなどを使用してストリームを再生でき、フラッシュフォールバックポリシーが設定されています。クライアント側で公開しているので、JavaScriptベースのRTMP実装が利用可能かどうかはわかりません。

1
Vivek

[〜#〜] wcs [〜#〜] は、Flash、WebRTC、SIP、Websocket、およびWowza互換プロトコル(RTSP、RTMP)のハイブリッド実装です。

ストリーム変換スキーム: enter image description here

1
John Doe

これは古い質問ですが、これにつまずくつもりの人のためにこの代替案を投稿しています。 ノードメディアサーバーは、私が使用しているpocの1つで使用している非常に優れたメディアサーバーで、rtmpをサポートしています https://www.npmjs .com/package/node-media-server

そのgitリポジトリも非常に活気があります。実際、pocで使用する前にいくつかの変更を加えました。そしてコードもよく書かれています。 https://github.com/illuspas/Node-Media-Server

PS。ライブストリーミング用のOBSの魅力のように機能します。

0