Нужна помощь по обработке данных 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 ответа:
Я успешно декодировал свои пакеты. Данные в начале моего буфера были "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-это очень тонкий формат контейнера, который в значительной степени зависит от неповрежденного заголовка. Если заголовок поврежден, он не может быть воспроизведен должным образом.