パケットの先頭にある MPEG4V1 ( Microsoft MPEG-4 VKI Codec V1 )データのチャンクを取得する必要がある状況にあります( DVR ユニットによって送信されました)。
パケット構造は次のようになります。
- 圧縮された MPEG4 データ。
- long integer - イベントとトリップワイヤーの数。
- long integer - イベントの数。
- イベント - イベントのシーケンス。
- long integer - トリップワイヤの数。
- Tripwire - Tripwires シーケンス。
- 長整数 - 巡回冗長コード (CRC)。
したがって、 MPEG4データがどこで終了するかを知る方法の指示はありません(またはそこにありますか? )、「イベントとトリップワイヤーの数」などのこの追加データの読み取りをどこから開始する必要があります...
実際のデータがどのように見えるかを確認できるように、2 つのパケットをアップロードしました: recvData1.txt、 recvData2.txt。
avcodec_decode_video 関数を備えた FFmpeg ライブラリを使用してこれらのパケットをデコードしようとしましたが、結果を期待してrecvDataバッファーの末尾からバイトごとに削除しました
が、FFmpeg は常に次のようなエラー メッセージを返しました。
「[msmpeg4v1 @ 038865a0] 無効な開始コード」、「[msmpeg4v1 @ 038865a0] ヘッダーが破損しています」。
私は MPEG4 が内部からどのように動作するかを知る専門家ではありませんが、エラー メッセージから判断すると、バッファの先頭でデコードするためのデータが欠落していることは明らかです。
だから私はここで取得しているMPEGデータのどの部分/種類がわかりません..
おそらくそれは、「終了」表示などを備えたある種のMPEGの「フレーム」データですか?
recvDataバッファーの開始点を、ネット "http://www.trekmania.net/clips/video_clips4.htm" で見つけた MPEG4V1 でエンコードされたビデオ ファイルの一部と比較して、バッファーの開始点に実際に含まれているかどうかを確認しました。 MPEG データ..ある種の DVR ベンダー固有のものではありません..
そして、ある種のヘッダーか何かのように見える約 20 バイトのデータ (パケット データの開始時、および約 180 バイトの直後の .avi ファイル内) があることに気付きました..
この画像を確認してください: "http://ggodis.gamedev.lt/stackOverflow/recvData.jpg"
MPEG4V1 データのこの部分が何を表しているか知っている人がいるでしょうか?
PS ..受信したパケットの CRC 値を確認しましたが、正しい値でした..