RTSP 経由でストリーミングしている場合、MPEG4 ヘッダーは送信されません。代わりに、クライアントからの DESCRIBE 要求を介して「SDP」(セッション記述プロトコル) 情報が交換されます。この sdp ファイルには、mpeg4 ヘッダーの MDAT アトムから実際に取得されたフレーム レートなどのエンコードされたバージョンが含まれています。
gov アトムにアクセスして p フレームの i フレームの差分を特定する必要がある場合は、サーバーで MPEG4 ヘッダーを解析し、別のチャネルを介して送信してみてください。
MPEG4 ヘッダーの外観は、基本的にはプレーンテキストのアトム名であり、通常は 4 バイトの長さ (プラットフォームによってはバイト スワップが必要です)、そしてデータです。
これは、mpeg4 ヘッダー パーサーにあるデバッグ コードです。
public boolean valid_atom(byte[] word, int offset) {
for (int i = 0; i < 4; i++)
if (!(word[i + offset] >= 'a' && word[i + offset] <= 'z') && !(word[i + offset] >= 'A' && word[i + offset] <= 'Z'))
return false;
return true;
}
...
public int parse_atom(byte[] b, int offset, int depth) {
int len;
len = ifba(b, offset);
Log.d(TAG, String.format("atom: %c%c%c%c depth %d @ %d len %d", b[offset + 4], b[offset + 5], b[offset + 6], b[offset + 7], depth, offset, len));
return len;
}
...
private int ifba(byte[] buffer, int offset) {
int retval = (buffer[offset] & 0xFF) << 24;
retval += (buffer[offset + 1] & 0xFF) << 16;
retval += (buffer[offset + 2] & 0XFF) << 8;
retval += (buffer[offset + 3] & 0XFF);
return retval;
}