エンコーダーがビデオを 10FPS でエンコードするか 30FPS でエンコードするかは関係ありません。RTP タイムスタンプを使用して、2 つのフレーム間の一時停止の長さを受信者に伝えます。そのため、フレームごとにその場で決定します。そうすれば、1 秒間に 10 フレーム (10 fps) を送信でき、1 秒間に 30 フレーム (30 fps) を送信できます。RTP タイムスタンプを正しく設定するだけで済みます。そして、私があなたの質問を受け取ったら、あなたはこれを行う方法を疑っています...
開始タイム スタンプを 0 にして、最後の RTP タイムスタンプに 100 を掛けたミリ秒単位の壁時計時間を追加するか、任意のタイム スケールを使用できます。デコーダーに 10fps ビデオを 30fps でデコードさせるには、各パケットの RTP タイムスタンプに 333000 を追加します...ただし、例を見てみましょう:
Frame # RTP Time Time between frames [ms]
[ 1] 0 0
[ 2] 50000 50
[ 3] 90000 40
[ 4] 420000 33
したがって、このように RTP タイムスタンプを設定(Time in ms * 100000)
すると、デコーダがフレーム 1 をロードしてデコードし、次にフレーム 2 をロードしてデコードしますが、フレーム 2 を描画する前に 50 ミリ秒 (フレーム 1 とフレーム 2 の時間差) スリープします。 、 等々...
ご覧のとおり、デコーダーは RTP タイムスタンプを使用して各タイムスタンプをいつ表示するかを判断し、ビデオが 30 fps でエンコードされたか 10 fps でエンコードされたかを気にしません。
また、ビデオが 30 fps の場合、1 秒あたり 30 の RTP パケットがあるという意味ではありません。場合によっては 100 を超えることがあるため、正しい RTP タイムスタンプ計算を保証する数式を使用することはできません。
私はこれがあなたが必要としているものだと思います...私が助けてくれることを願っています.