Ваш вопрос бессмыслен, поэтому кто-то проголосовал за вас.
Файл-контейнер
Во-первых, нет такого понятия, как H264 file
. Может быть файл-контейнер (MP4, AVI, MKV), содержащий видео в кодировке H264. Этот формат контейнера обычно также содержит данные о длительности видео. Поэтому вам нужно разобрать этот файл, проверить документацию по формату, чтобы увидеть, где сохраняется продолжительность, а затем извлечь его.
Самый простой способ - использовать FFMPEG, как предложил Аугусто.
Байтовый поток NAL
Если ваш файл состоит только из блоков NAL, сохраненных один за другим, например, в потоке байтов NAL, НЕТ СПОСОБНОСТИ получить продолжительность видео! Поскольку изображение, закодированное в формате H264, не содержит информации о времени.
Если это так, вы все равно можете сделать приближение, если знаете FPS видео... Вам нужно подсчитать все кадры в файле, за исключением:
- Наборы параметров последовательности
- Наборы параметров изображения
- Конец потока
- Конец последовательности
- Данные фильтра
- Разделитель единиц доступа
А потом посчитай: NUMBER_OF_FRAMES / FPS = DURATION_IN_SECONDS
Поток RTP
Если вы ошибаетесь и над каждым блоком NAL есть заголовок RTP, вы можете легко получить продолжительность видео, проверив время RTP каждого заголовка RTP. Что означают байты в заголовке RTP, вы можете узнать здесь: http://www.networksorcery.com/enp/protocol/rtp.htm. Вы хотите получить часть TIMESTAMP
(целое число 4 байта) из каждого. Код должен сделать это:
int last_timestamp = GetNextTimestamp();
double duration_in_ms = 0;
while(true)
{
int next = GetNextTimestamp();
duration_in_ms += (next - last_timestamp)/90000.0;
last_timestamp = next;
}
person
Cipi
schedule
26.09.2011