プロジェクトをテストしています。MPEG-4 ts パケットのペイロード データ (一部のバイトをゼロにする) を、ユーザーからのパーセンテージで分割する必要があります。「.ts」ファイルのパケットをパケット(188バイト)ごとに読み取ることでそれを行っています。しかし、ビデオはプロセスの後で本当に泥だらけに変化しています. (ちなみに私はC言語でプログラムを書いています)
そこで、I フレームに属するデータ/パケットを見つけ、それらに触れずに他のデータをパーセンテージでスクランブルすることにしました。私は以下を見つけることができました
(16 進数) 00 00 00 01 E0 ビデオ PES パケットの開始 .. .. 00 00 01 B8 グループ オブ ピクチャ ヘッダーの開始 .. .. 00 00 01 00 ピクチャ スタート コード。これは 32 ビットです。この直後の 10 ビットは、一時参照と呼ばれます。したがって、時間参照には、ピクチャ スタート コードに続くバイトと、ピクチャ スタート コードの後の 2 番目のバイトの最初の 2 ビット、つまり 1 バイト (8 ビット) + 2 ビットが含まれます。これらはスキップする必要があります。ここで、存在する 3 ビット (ピクチャ スタート コードからの 2 番目のバイトの 3、4、および 5 番目のビット) は、フレーム タイプ、つまり I、B、または P を示します。 0x38 と右シフト >> 3 で。
たとえば、データはそのようなものです。
00 00 01 00 00 0F FF F8 00 00 01 B5..........など。
ここで、最初の 4 バイト 00 00 01 00 はピクチャ スタート コードです。5 番目のバイトと 6 番目のバイトの最初の 2 ビットは、一時的な参照です。したがって、問題は 6 番目のバイトにあります --> 0F
((0F & 38)>>3)
フレーム タイプ = 1 ==> I フレーム
フレーム タイプ 000 禁止
フレームタイプ 001 イントラコード化 (I) - iframe
フレームタイプ 010 予測符号化 (P) - p フレーム
フレーム タイプ 011 双方向予測符号化 (B) - b フレーム
ただし、これは MPEG-2 用です。MPEG-4トランスポートストリーム(拡張子は「.ts」)のビット演算でフレームタイプを認識して取得するパターンはあるのでしょうか?
そして、そのフレームに属するバイト数またはパケット数を取得する必要がありますか?
助けてくれてどうもありがとう