метка времени h264 RTP

У меня есть беспорядок о метке времени пакета h264 RTP. Я знаю, что стенная тактовая частота видео составляет 90 кГц, которые я определил в SDP SIP. Частота кадров моего кодера не точно 30 кадр/с, это является переменным. Это варьируется от 15 кадр/с до 30 кадр/с на лету. Так, я не могу использовать фиксированную метку времени.

Мог любой говорить мне метку времени следующего закодированного пакета.
После того, как 0 миллисекунд закодировали метку времени RTP = 0 (Позвольте стартовой метке времени 0),
После того, как 50 миллисекунд закодировали метку времени RTP =?
После того, как 40 миллисекунд закодировали метку времени RTP =?
После того, как 33 миллисекунды закодировали метку времени RTP =?

Какова формула, когда закодированная частота кадров является переменной?

Заранее спасибо.

7
задан Ralf 19 May 2015 в 18:03
поделиться

1 ответ

Не имеет значения, кодирует ли ваш кодировщик видео со скоростью 10 или 30 кадров в секунду, с помощью метки времени 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 как это (время в мс * 100000) , вы заставите декодер загружать и декодировать кадр 1, а затем загружать и декодировать кадр 2, но он будет спать в течение 50 мс (разница во времени между кадром 1 и кадром 2), прежде чем он будет рисовать кадр 2, и так далее.

И, как вы можете видеть, декодер использует временные метки RTP, чтобы знать, когда отображать каждую из них, и не возражает, если видео было закодировано со скоростью 30 или 10 кадров в секунду.

Кроме того, если скорость видео составляет 30 кадров в секунду, это не означает, что каждую секунду будет 30 пакетов RTP. Иногда их может быть больше 100, поэтому у вас не может быть формулы, обеспечивающей правильное вычисление метки времени RTP.

Думаю, это то, что вам нужно ... надеюсь, я помог, не надо -1 мне, если бы я не ... =)

13
ответ дан 6 December 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: