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)そしてソケットはバイナリデータを処理できません、私はデータを破損していますか?
私は専門家ではありませんが、これを可能な限り調査しようとしました。これが解決できない場合でも、誰かが私が正しいのか、それとも私が失敗しているのかを教えてくれるようにしたいと思います:)