Извлечь длину видео из IDR или без IDR (H.264/AVC - организация потока битов)

У меня есть поток для флэш-плеера, который поступает из блоков H.264 - SPS, PPS, IDR и не-IDR. Пока что структура FLV генерируется из bytearray. Единственная проблема, которая осталась для меня, это понять, как я могу получить те метки времени UI24, которые нужны FLVTag.

1 ответ

Чтобы получить время для каждого FLVTag вы делаете:

  1. Сначала получите частоту кадров из SPS-файла, вам нужно проверить, что для timer_info_present_flag установлено значение 1;

хронология_инфо_представление_флаг: 1

num_units_in_tick: 1000

шкала времени: 120000

fixed_frame_rate_flag: 1

Итак, вы считаете это следующим образом:

time_scale / (2 * num_units_in_tick) = frame_rate fps;
120000 /

2 * 1000 = 60 кадров в секунду

После этого вы получите милисекунды на кадр -> 1 / 60 = 0,01666(6). Таким образом, вы подсчитываете кадры (IDR и NDR) и соответственно увеличиваете отметку времени. Для кадров SPS и PPS я сбрасываю текущую временную метку туда, где мы находимся в настоящее время.

Другие вопросы по тегам