Нужна помощь по обработке данных MPEG4V1 - PullRequest
2 голосов
/ 13 сентября 2011

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

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

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

0 голосов
/ 13 сентября 2011

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

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

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

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

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

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

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

...