0

mp4 ビデオ ファイルの GOV ヘッダーの内容にアクセスする方法を知りたいです。

Axis カメラを使用して、mp4 形式でハードディスクに保存されている RTSP 経由でビデオをストリーミングしています。ドキュメントによると、カメラは特定のトリガー データを MPEG4 GOV ヘッダーに挿入しますが、この情報にアクセスまたは取得する方法がわかりません。

C++ アプリケーションを開発していますが、現時点ではデータをプログラムで処理する必要はないため、GOV ヘッダーの内容を視覚化できるソリューションで十分です。

4

2 に答える 2

0

補足データは通常、ストリームに直接埋め込まれ、MP4 ファイルのビデオ ペイロード データに書き込まれます。意図は、ストリーム全体を MPEG-4 に準拠させ、内部に追加データを保持することです。通常、デコーダーはそれを無視します。

通常、そのデータをファイルからストリーミングし、ストリームを解析して、トリガー情報を含むデータの部分を抽出する必要があります。ビデオ ストリーミング用の特定の API (ファイル フォーマット/デマルチプレクサなど - 結局、OS と環境は何ですか?) が必要であり、それらが正確に何を埋め込んでいるか、どのように正確に解析する必要があるかを確認するには、Axis の技術情報が必要です。

于 2012-12-21T09:26:35.957 に答える
0

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;
}
于 2013-01-07T18:32:35.353 に答える