5

Node.jsでRTMPを実装しようとしていますが、ドキュメントを見て試した後、できません。node.jsがデータのストリームをどのように処理するかを確認することはできないと思います。

私はこのコードをフォークしています:https ://github.com/timwhitlock/node-amf/tree/master/node-rtmp

コードと不十分に記述されたadobeのドキュメントによると、接続後、ハンドシェイクプロセスが開始され、クライアントは1537オクテットのストリームを送信します。最初のストリームはrtmpバージョン(常に3である必要があります)であり、次の4つはタイムスタンプです。他の4つは0(0000)である必要があり、残りのデータはすべてランダムな文字です。

現在、リンクされたライブラリはこれをすべて実行しますが、4つのゼロをチェックする時点で壊れます。Netモジュールを使用してサーバーを作成し、接続イベントをリッスンします。イベントによって提供されるソケットオブジェクトを使用して、エンコーディングを「バイナリ」に設定し(このタイプのエンコーディングは、ドキュメントhttp://nodejs.org/api/stream.html#stream_stream_setencoding_encodingで確認できる限り存在しません)、次に4つのゼロをチェックしてみてください

とにかくソケットが「utf8」でエンコードされているのではないかと思います。最初のバイトを出力するときにストリームが台無しになる場所があり、同じデータになることはありません。ソケットのエンコーディングを16進数に変更すると、探している4つのゼロを示す一致が見つかりました。

V | TIME   |4 ZEROS |RANDOM DATA
03|0091c3ee|80000702|3e904115
03|0091ea60|80000702|f6e2d38a
03|00921a47|80000702|f2e21db3

03|0092eaeb|80000702|15834dbf
03|00931e0d|80000702|5f0b7891
03|00933c68|80000702|b4980c5d

ビデオやオーディオなどの実際のデータをサーバーにストリーミングする必要がある場合でも、そのように機能させることができます(Bufferオブジェクトを渡してこれを使用してソケットバイナリデータから書き込むことができることを知っています: https ://github.com/substack/node-binary)そしてソケットはバイナリデータを処理できません、私はデータを破損していますか?

私は専門家ではありませんが、これを可能な限り調査しようとしました。これが解決できない場合でも、誰かが私が正しいのか、それとも私が失敗しているのかを教えてくれるようにしたいと思います:)

4

2 に答える 2

1

ええと、私の答えは同じドキュメントにありました。Netモジュールによって返されたソケットオブジェクトでsetEncoding()をまったく呼び出さないと、プレーンなバイナリバッファを受け取ることができ、自由に解析できるので、これは可能です。

それでも、受信したデータは0ではないので(バイト5、6、7、8には128 0 7 2があります)、バイナリデータを正しく解析する方法を知る必要がありますが、少なくとも今のところ、これは可能のようです。

よろしく、シャドウ。

于 2012-08-10T11:03:24.093 に答える
0

これはエンコーディングの問題ではありません(あなたはそれを台無しにしていません)。私が見つけた最も近い説明は、Red5のソースにあります。

OutboundHandshake.java:96

どういうわけか、そのフィールドは実装のバージョンを送信するために使用されます。

于 2015-07-23T17:05:19.653 に答える