Не имеет значения, кодирует ли ваш кодировщик видео со скоростью 10FPS или 30FPS, с помощью метки времени RTP вы сообщаете приемнику, какова длительность паузы между двумя кадрами. Таким образом, вы определяете, что на лету для каждого кадра. Таким образом, вы можете отправить 10 кадров в секунду (10 кадров в секунду), а в другую секунду вы можете отправить 30 кадров (30 кадров в секунду). Вам нужно только правильно установить метку времени RTP. И если я получу ваш вопрос, вы сомневаетесь, как это сделать ...
Пусть начальная отметка времени равна 0, вы добавляете время настенных часов в миллисекундах, умноженное на 100, к последней отметке времени RTP или можете использовать любую шкалу времени, которую хотите. Чтобы декодер декодировал видео со скоростью 10 к / с со скоростью 30 к / с, добавьте 333000 к метке времени RTP для каждого пакета ... но давайте рассмотрим ваш пример:
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, но он будет работать в течение 50 мс (разница во времени между кадрами 1 и 2) перед тем как нарисовать кадр 2, и так далее ...
И, как вы можете видеть, декодер использует временные метки RTP, чтобы знать, когда отображать каждую из них, и не возражает против того, было ли видео кодировано со скоростью 30 или 10 кадров в секунду.
Кроме того, если видео составляет 30 кадров в секунду, это не означает, что на каждую секунду будет 30 пакетов RTP. Иногда их может быть больше 100, поэтому у вас не может быть формулы, обеспечивающей правильный расчет метки времени RTP.
Полагаю, это то, что тебе нужно ... надеюсь, я помог, не -1, если бы я не ... =)