Преобразование приложения B H.264 в MPEG-TS

SO...

У меня есть видеоданные RAW H.264, снятые через RTSP в локальном файле, и я пытаюсь воспроизвести видео в приложении Java FX. Для этого мне нужно использовать Http Live Streaming.

Я успешно создал прототип архитектуры Java FX, которая может воспроизводить видео через HLS на локальном сервере, используя локальную папку, содержащую файл .m3u8 (индекс HLS) и набор файлов .ts (MPEG-TS). Последняя часть для меня — заменить файлы .ts файлами .264/.h264 и на локальном сервере выполнить конвертацию/обёртку данных H.264 Annex B в MPEG-TS.

У меня возникли проблемы с определением того, что требуется для преобразования H.264 Annex B в MPEG-TS. Я нашел следующую информацию...

«Приложение B обычно используется в живых и потоковых форматах, таких как транспортные потоки ...»

szatmary.org/блог/25

«Приложение B документа определяет один такой формат, который упаковывает блоки NAL в формат, напоминающий традиционный элементарный видеопоток MPEG, что делает его пригодным для использования с такими контейнерами, как MPEG PS/TS, неспособными обеспечить требуемое кадрирование…»

wiki.multimedia.cx/?title=H.264

«Java FX поддерживает ряд различных типов мультимедиа. Типом мультимедиа считается комбинация формата контейнера и одной или нескольких кодировок. В некоторых случаях формат контейнера может быть просто элементарным потоком, содержащим закодированные данные».

docs.oracle.com/javafx/2/api/javafx/scene/media/package-summary.html

"Используйте атрибут CODECS тега EXT-X-STREAM-INF. Если этот атрибут присутствует, он должен включать все кодеки и профили, необходимые для воспроизведения потока..."

developer.apple.com/library/ios/documentation/networkinginternet/conceptual/streamingmediaguide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html

Кажется, мне не хватает чего-то простого в Elementary и Transport Streams. Я использовал ffmpeg для преобразования моего файла H.264 в файл TS и попытался понять различия. У меня есть представление о примерных различиях форматов, но мне все еще не хватает деталей, чтобы это сделать. У кого-нибудь есть ссылка, демонстрирующая это, или кто-нибудь знает что-то простое о том, как обслуживать данные Приложения B H.264 через MPEG-TS?

Я не собираюсь использовать какой-либо инструмент, мне нужен пользовательский формат файла локально, где я анализирую данные Приложения B H.264 и выполняю изменение формата в памяти на лету. Я знаю способ использовать ffmpeg с каналами для достижения этой цели, но я не хочу иметь никаких зависимостей, а производительность важна.


person Lane    schedule 03.06.2014    source источник


Ответы (1)


Это не изменение формата. Это контейнер. Нет необходимости разбирать приложение b, чтобы записать его в файл TS. TS упаковывает PES, который упаковывает поток приложения b. Формат mpegts довольно сложен, особенно без сторонней библиотеки. Код ts, который я написал и использую в работе, составляет около 1000 строк C++.

Чтобы написать код TS, начните с попытки чтения файла TS с помощью шестнадцатеричного редактора и обращения к документации в Википедии. Книга Демистификация видео также содержит довольно хорошую документацию.

person szatmary    schedule 04.06.2014
comment
Вы правы, я имел в виду выполнение мультиплексирования / переноса H.264 Annex B в MPEG-TS. Мне нужно проанализировать данные H.264 Annex B, потому что файлы, которые у меня будут, имеют пользовательский формат (для моей компании). Как минимум, мне нужен транспортный поток для одной программы (etherguidesystems.com/Glossary/ ), который, я думаю, мне нужно выяснить, как создать соответствующие PAT, PMT и PES и т. д. Я опубликую обновление, когда выясню это. - person Lane; 05.06.2014
comment
См. мой другой вопрос с ответом Сатмари для получения дополнительной информации... mpeg ts">stackoverflow.com/questions/24564680/ - person Lane; 08.07.2014