Размер видео (по горизонтали и вертикали) из транспортного потока MPEG-2

Мне нужно знать, как получить высоту и ширину, а также любые другие описательные данные, которые я могу, из транспортного потока MPEG (TS).

Прежде чем появится этот ответ: я хорошо знаю заголовок видеопоследовательности (00 00 00 B3). Это часть спецификации программного потока MPEG (т. е. файла MPEG), не транспортного потока MPEG.

Если я сохраняю транспортный поток в файл .ts, я могу получить эту информацию от ffmpeg, но мне нужно иметь возможность делать это независимо от ffmpeg в среде, где ffmpeg недоступен. Поэтому мне нужно проанализировать эти данные в файле вручную, и я не могу найти НИЧЕГО о каких-либо соответствующих метаданных, кроме временных меток (начало фрагмента) из MPEG-TS.

Спасибо!


person Dodger    schedule 20.07.2011    source источник


Ответы (3)


Боюсь, вам придется проверить ISO 13818-1 (также известный как H.222) и немного прочитать о пакетах транспортного потока, PID-фильтрации и пакетах PES.

Поток делится на пакеты. Каждый пакет (обычно) имеет длину 188 байт. Заголовок пакета содержит PID (идентификатор пакета), который позволяет фильтровать только интересующие вас пакеты.

Пакеты составляют пакеты PES, которые содержат данные MPEG-2 + метаданные (например, данные синхронизации). Вам нужно будет создать, а затем проанализировать пакеты PES, прежде чем вы сможете узнать ширину и высоту видео.

Как узнать, какие PID вас интересуют? Для этого вам придется прочитать о PAT и PMT. PAT сообщает вам, как получить PMT, а PMT сообщает вам, какие PID содержат информацию MPEG-2.

Все это описано (подробно) в документах выше. Но есть много руководств и объяснений в Интернете. Например, здесь, но есть и много других. статья Википедии — хорошее место для начала.

person Omri Barel    schedule 20.07.2011
comment
Ответ - путь касательной! - person Dipan Mehta; 27.11.2011
comment
@Dipan, вопрос заключался в том, как разобрать файл данных вручную (файл транспортного потока MPEG-2). Если вы не знаете о пакетах TS, разделах, PAT и PMT, как вы можете получить пакеты PES? Во всяком случае, ваш ответ не касается разбора файла, а предполагает, что у OP есть поток пакетов PES. - person Omri Barel; 27.11.2011

Размер видео НЕ является свойством Транспортного потока. Это свойство самого элементарного видеопотока. Транспортный поток или пакет PES не содержит заголовка.

Чтобы извлечь разрешение (ширина x высота), вам нужно будет идентифицировать начальный пакет PES (с PUSI), а затем начать синтаксический анализ заголовков es. Вам нужно извлечь часть Sequence header из ISO/IEC 13818-part 2 (видео), чтобы получить ответ. Посмотрите эту вики для быстрой справки.

person Dipan Mehta    schedule 27.11.2011

На самом деле заголовок видеопоследовательности (00 00 01 B3) является частью спецификации ISO/IEC 13818-2, которая описывает элементарный битовый поток видео. Таким образом, транспортный поток также будет содержать этот заголовок.

Проблема здесь в том, чтобы извлечь содержимое этого заголовка. Вы не можете просто найти этот стартовый код и использовать байты, следующие за ним. Это может быть довольно сложной задачей, потому что: 1. Содержимое заголовка может быть разбито на два пакета PES или транспортного потока 2. Если транспортный поток содержит не только видеопоток, эта последовательность байтов может быть найдена в некоторых аудио или двоичных данных.

person rusxg    schedule 12.08.2011