3

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==たが、何も変更されていません。

乾杯。

4

1 に答える 1

0
  1. 「android h264 ストリーム形式」はありません。RTP がトランスポート プロトコルとして使用される場合、パケット化はRFC6184に従う必要があります。RTP ペイロード形式の開始コードは存在しません。RTP パケットに含まれるものは、NAL ユニットが集約、フラグメント化されるかどうかを指定するパケット化モードに完全に依存します。詳細については、パケット化モードに関する RFC セクションを参照してください。パケット化モードは通常、SDP を介して通信されます。

  2. タイムスタンプは RTP ヘッダーの一部です。NAL ユニットの長さもパケット化モードに依存します。

  3. マークとはどういう意味ですか?RTPマーカービットが設定されているということですか? その場合、これも RFC で定められた規則に従う必要があります。

于 2012-05-12T17:29:49.080 に答える