まず、私の下手な英語で申し訳ありません。C++ でビデオ ストリーミング サーバーを作成しています。1 つの TS-FILE として HTTP 経由でストリーミングする必要がある複数の mpeg2-ts ファイル (映画と広告) があります。問題は、すべての mpeg-ts ファイルに独自のタイムスタンプ (PCR、PTS、DTS) があることです。そして、私が理解しているように、連続したストリーミング フローを作成するには、すべての新しい PCR (PTS、DTS) 値が最後の PCR (PTS、DTS) 値から継続する必要があります。
これは、私が言っていることをよりよく理解するための写真です: http://i.stack.imgur.com/vL1m6.png (メッセージに私の写真を直接含めることはできません。申し訳ありません)
pcr`1、pcr`2、pcr`3 のタイムスタンプを新しいものに置き換える必要があります。たとえば、pcr3 タイムスタンプを含む ts-packet を送信し、さらにいくつかの ts パケット (PCR の値を含まない) を送信した後、アドバタイズメントを挿入したいと考えています。私の質問は、pcr`1、pcr`2、pcr`3 などの新しい値をどのように計算するのですか?
現在のビデオのビットレートを計算し、最後の PCR タイムスタンプ (この場合は pcr3) 以降にプログラムが送信したビット数をこのビットレートで割るのは正しいですか? つまり、(新しいタイムスタンプ) = (前のタイムスタンプ) + (ビット数) / (ビットレート) です。または、より効率的な方法はありますか?
PTS と DTS のタイムスタンプについては、これらのタイムスタンプが非線形になる可能性があることをここで読みました。最後に受け取った元の PCR と比較して計算するのは正しいでしょうか? つまり:
pts_new = (original_pts - last_original_pcr) + pcr_new.
dts_new = (original_dts - last_original_pcr) + pcr_new.
(original_pts - last_original_pcr) is the difference between pts and pcr values
pcr_new is the last modified pcr value
私のプログラムは、mpeg-ts ストリームでこれらのタイムスタンプを読み取って編集できます。幸いなことに、その方法に関する文献はたくさんあります。しかし、これらのタイムスタンプの新しい値を計算するにはどうすればよいでしょうか?
mpeg2-ts の仕様を学習し始めたばかりで、何か間違っている場合は訂正してください。前もって感謝します。あなたが私を理解してくれることを願っています。