Нужна помощь в обработке данных MPEG4V1

Мне нужно получить фрагмент MPEG4V1 (Microsoft MPEG-4 VKI Codec V1) данных, расположенных в начале пакета (отправлено каким-то устройством DVR).

Структура пакета выглядит примерно так:

  • Сжатые данные MPEG4.
  • Длинное целое число — количество событий и натяжек.
  • Длинное целое — количество событий.
  • Событие - последовательность событий.
  • Длинное целое число — количество растяжек.
  • Tripwire - Последовательность Tripwires.
  • Длинное целое число — циклический избыточный код (CRC).

Таким образом, нет никакого указания, как узнать, где заканчиваются данные MPEG4 (Или есть?), и с чего я должен начать чтение этих дополнительных данных, таких как "Количество событий и триггеров" и т. д.

Я загрузил два пакета, чтобы вы могли увидеть, как выглядят реальные данные: recvData1.txt, recvData2.txt.

Я пытался декодировать эти пакеты, используя библиотеку FFmpeg с функцией avcodec_decode_video и удаляя байт за байтом из конца моего буфера recvData в надежде на какие-либо результаты,
но FFmpeg всегда возвращался с такие сообщения об ошибках:

«[msmpeg4v1 @ 038865a0] неверный стартовый код», «заголовок [msmpeg4v1 @ 038865a0] поврежден».

Я не очень хорошо разбираюсь в том, как работает MPEG4 изнутри, но по сообщениям об ошибках ясно видно, что мне не хватает некоторых данных для декодирования в начале буфера.

Поэтому я не уверен, какую часть/вид данных MPEG я здесь получаю.
Возможно, это какие-то данные "кадра" MPEG с указанием "конец" или что?

Я даже сравнил начало моего буфера recvData с некоторыми видеофайлами в формате MPEG4V1, которые я нашел в сети "http://www.trekmania.net/clips/video_clips4.htm", чтобы проверить, начало моего буфера действительно содержит данные MPEG .. а не какой-то конкретный материал поставщика DVR..

И я заметил, что есть около 20 байтов данных (в начале моих пакетных данных и в файлах .avi сразу после ~ 180 байтов ...), которые выглядят как какой-то заголовок или что-то в этом роде.

Пожалуйста, проверьте это изображение: "http://ggodis.gamedev.lt/stackOverflow/recvData.jpg"

Может быть, кто-нибудь знает, что представляет собой эта часть данных MPEG4V1?

P.S. ..Я проверил значения CRC для полученных пакетов, и они были правильными..


person Gediminas    schedule 13.09.2011    source источник


Ответы (2)


Я успешно расшифровал свои пакеты. Данные в начале моего буфера были «BITMAPINFOHEADER».. Это все, что мне нужно было знать.

person Gediminas    schedule 14.09.2011

Здесь вы имеете дело с двумя разными вещами: контейнерами и кодеками. Кодек используется для кодирования/декодирования (отсюда enCOder DECoder → CODEC) данных в некоторой цифровой форме. Таким семейством кодеков является MPEG4 Video во всех его вариантах.

Еще одна вещь, о которой вам нужно знать, это контейнеры. AVI — это контейнер, но есть и много других. MPEG2-TS, MPEG2-PS, MP4, MKV, MOV (Quicktime), FLV, Ogg, и это лишь некоторые из них. Общим для всех форматов контейнеров является то, что они обеспечивают основу для хранения и/или потоковой передачи кадров/пакетов кодека. Контейнеры предоставляют вам информацию, необходимую для обращения к фреймам/пакетам.

Контейнеры обрабатываются де-/мультиплексорами, короткими «мультиплексорами».

Пожалуйста, проверьте это изображение: "http://ggodis.gamedev.lt/stackOverflow/recvData.jpg"

Шутки в сторону? Вы знаете, что некоторые используют шестнадцатеричные редакторы для просмотра/манипулирования потоками данных RAW? Открытие их в текстовом редакторе может привести к потере всей важной информации из-за неправильной интерпретации составных кодовых точек Unicode или чего-то подобного.

Так что я не уверен в том, какую часть/вид данных MPEG я получаю здесь. Может быть, это какие-то данные "кадра" MPEG с указанием "конца" или что-то в этом роде?

Это выглядит как часть файла-контейнера MP4. MP4 — это очень деликатный формат контейнера, который в значительной степени зависит от неповрежденного заголовка. Если заголовок поврежден, он не может быть воспроизведен должным образом.

person datenwolf    schedule 13.09.2011
comment
Спасибо datenwolf за ответ. Насчет моего изображения recvData.jpg, я просто устал показывать суть того, что я имел в виду.. Я не манипулирую никакими своими RAW-данными и знаю про HEX-редакторы, спасибо ;) - person Gediminas; 13.09.2011