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


Я нахожусь в ситуации, когда мне нужно получить кусок MPEG4V1 (Microsoft MPEG-4 VKI Кодек V1) данные, расположенные в начале пакета (это было отправлено каким-то блоком видеорегистратора).

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

  • сжатые данные MPEG4 .
  • длинное целое число-количество событий и растяжек.
  • длинное целое число-число событий.
  • событие-последовательность событий.
  • длинное целое число - Количество растяжек.
  • растяжка-последовательность растяжек.
  • длинный целочисленный циклический избыточный код (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 ..и не какая-то специфическая вещь поставщика видеорегистратора..

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

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

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

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

2 3

2 ответа:

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

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

Еще одна вещь, о которой вы должны знать, - это контейнеры. Ави-это контейнер, но есть и много других. С MPEG2-TS и MPEG2 в-ПС, МП4, МКВ, мов (в формате QuickTime), flv и Ogg, но только, чтобы назвать несколько. Общим для всех форматов контейнеров является то, что они обеспечивают фреймворк для хранения и/или потоковой передачи кадров / пакетов кодека. Контейнеры дают вам информацию, необходимую для обращения в фреймы / пакеты.

Контейнеры имеют дело с де - / мультиплексорами, короткими "muxers".

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

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

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

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