декодирование MPEG 2 - PullRequest
       40

декодирование MPEG 2

5 голосов
/ 23 февраля 2009

Я хочу понять, как работает декодирование видео и аудио, особенно синхронизация времени (как получить видео со скоростью 30 кадров в секунду, как связать это со звуком и т. Д.). Я не хочу знать ВСЕ детали, только суть этого. Я хочу иметь возможность написать упрощенное видео высокого уровня для реального видео / аудио декодера.

Не могли бы вы предоставить мне указатели? Фактический исходный код C / C ++ видео / аудио декодера MPEG2 был бы самым быстрым способом понять то, что я думаю.

Ответы [ 6 ]

6 голосов
/ 23 февраля 2009

Считывание исходного кода с работающего кодека кажется правильным решением. Я предлагаю следующее:

http://www.mpeg.org/MPEG/video/mssg-free-mpeg-software.html

Учитывая, что это упомянуто на веб-сайте mpeg.org, я бы сказал, что вы найдете здесь то, что вам нужно.

Раньше у меня было некоторое время, чтобы поработать над декодированием видео в формате MPEG (без звука), и принципы довольно просты. Включены некоторые чистые изображения, некоторые промежуточные изображения, которые описаны относительно ближайших основных, а остальные описаны с использованием ближайших основных / промежуточных изображений.

Один временной интервал, одно изображение. Но последние кодеки гораздо сложнее, я думаю!

РЕДАКТИРОВАТЬ: синхронизация

Я не специалист по синхронизации аудио и видео, но, похоже, проблема связана с использованием слоя синхронизации (см. там для определения).

3 голосов
/ 23 февраля 2009

Для аудио / видео синхронизации, в основном, каждый видео и аудио кадр должен иметь отметку времени. Отметка времени обычно известна как PTS (Представление отметки времени). Как только видео / аудио декодируется декодером, аудио / видео рендерер должен запланировать отображение кадра в нужное время, чтобы аудио / видео синхронизировались.

Я думаю, что вы можете обратиться к главе " Модель синхронизации " MPEG2 Tutorial для подробностей.

3 голосов
/ 23 февраля 2009

Вы можете просмотреть исходный код ffmpeg (доступный через svn) или документацию API .

1 голос
/ 23 февраля 2009

Helltone,

Временные метки для аудиоданных по-прежнему необходимы, поскольку аудио- и видеокадр не могут быть выровнены в одном и том же месте. Например:

В: 1000 1040 1080 1120 ... A: 990 1013 1036 (потеряно) 1082

Возможно, вам потребуется компенсировать смещение между первым видео / аудио кадром. Кроме того, если существует вероятность потери пакетов (во время потоковой передачи видео), вам необходимы временные метки для обоих видео / аудио для обеспечения точной синхронизации.

1 голос
/ 23 февраля 2009

@ Патрик и Нильс

Итак, вы говорите, что есть метки времени, хейн ... Это только для видео, я думаю. Для аудио, я думаю, в заголовке достаточно информации (например, «семплов в секунду»). Как часто нужны эти временные метки? Я полагаю, что чередование аудио- и видеопакетов гарантирует, что видеоданные всегда опережают аудиоданные или что-то еще?

РЕДАКТИРОВАТЬ: нашел то, что мне нужно: http://www.dranger.com/ffmpeg/tutorial01.html

1 голос
/ 23 февраля 2009

В зависимости от того, сколько вы знаете о формате MPEG-2, вы можете получить общий обзор, предварительно прочитав статью об этом. Я имею в виду что-то вроде этого:

Руководство для начинающих по стандарту MPEG-2

MPEG-2 VIDEO COMPRESSION

...