Androidのローカルソケットからh264コード化データを読み取り、パケット化するAndroid用のrtpビデオストリーマーを作成しています。問題は私がそれをしたということですが、私はクライアント側(Voip)で黒いフレームを取得し続けます。
通信は次のようになります:Android-> Asterisk-> Jitsi(Osx)(およびその逆)
私がまだ理解していないことがいくつかあります。
1)Androidのメディアレコーダーは生のh264ストリームを提供しますが、そのストリームに基づいてNALがいつ開始/終了するかを知るにはどうすればよいですか?0x000001パターンはありませんが、0x0000があります(これはセパレーターであると想定しています)。
編集:
さらに情報を追加します。これらは、入力バッファの2つの(最初の、2番目の)異なる読み取りです(順番に)。正しければ、最初の4バイトを使用してNALUの長さを取得し、5番目のバイト(インデックス4)をNALUヘッダーにします。
将来の使用のために、バイトの値をここにコピーします。
1) 0 0 12 114 101 -72 4 25 -15 -1 -121 -53 .....
length = (114&0xFF) + (12&0xFF)*256 + (0&0xFF)
length -> 3186
forbidden = 101 & 0x80
forbidden -> 0
nri = 101 & 0x60
nri -> 96
nal_unit_type = 101 & 0x1F
nal_unit_type -> 5
2) 0 0 1 -93 97 -32 32 103 -14 93 -1 ....
length = (-93&0xFF) + (1&0xFF)*256 + (0&0xFF)
length -> 419
forbidden = 97 & 0x80
forbidden -> 0
nri = 97 & 0x60
nri -> 96
nal_unit_type = 97 & 0x1F
nal_unit_type -> 1
これは正しいです?
2)そのストリームからNALuタイムスタンプとその長さを取得するにはどうすればよいですか?
3)何らかの理由で、パケットにマークが付けられています(マーカーの設定を解除しても)。(pcapファイルを確認する場合)[修正済み:すべてのパケットに同じSSCRを使用していなかった]
これは、アスタリスク(Androidからのストリーム)からのストリームのpcapキャプチャです。AndroidデバイスはAndroidICSを搭載したAsusTransformPrimeです。
sdpでpacketization-mode(1
)とprofile-level-id(42801e
)を送信しています。また、sprops(sps:Z0KAHpWgUHxA
、psp :)パラメーターを送信しようとしましaM48gA==
たが、何も変更されていません。
乾杯。