MpegTs ファイルの再生にシーク機能を実装したいと考えています。PCRを時間(mescs)に変換する方法を教えてください。PCRがシークに使用されていることは知っていますが(VLCで見たことがあります)、これを行う方法を知りたいです。
敬具、ヴェン
PCR は、エンコーダ側で 27 MHz クロックを表すクロックです。したがって、PCR クロックの各ティックは 1/27 マイクロ秒を表します。
最初のステップは、PCR パケットを解析できるようにすることです。PCR ティックは、特定の PID によって維持されます (主にビデオですが、オーディオまたは代替パケットの場合もあります)。PCR がパケットに存在する場合、それはアダプテーション フィールド、タイプ 2 または 3 です。PCR を解析する方法を理解するには、これまたはwikiを参照できます。
パケットの PCR 値を取得すると (64 ビット整数を使用)、そのパケットのタイムスタンプ P0 が得られます。これで、タイム スタンプ P1 を使用して、次の PCR パケットを取得するときに、正確に 10 秒を求めることができます。
P1 = P0 + 10 * 27 * 10^6
そのため、タイムスタンプ P1 以上を含む別のパケットを確認すると、10 秒経過していることを確認できます。
状況によっては、PCR が不連続性を検出する可能性があることに注意してください。そのため、PCR のベース シフトの時点でさらに計算が必要になります。