Каждый раз, запуская медиаплеер, мы пользуемся услугами этих маленьких, но совершенно необходимых на сегодня программ, о существовании которых не вспоминаем до тех пор, пока не столкнемся с проблемами при проигрывании аудио или видео. А задумывались ли вы когда-нибудь, как "устроены" кодеки?
Кодек - это программа, используемая для сжатия и воспроизведения из сжатого состояния аудио- и видеофайлов. Также кодеки предназначены для кодирования поток/сигнала с целью его трансляции, сохранения или шифрования, а также раскодирования для просмотра (воспроизведения или расшифровки).
Разнообразие методов и видов оцифровки медиафайлов на специализированном оборудовании приводит к проблемам, связанным с их воспроизведением на стандартном ПК. В такой ситуации просто необходимо сделать процесс декодирования сигнала более доступным для пользователя. Кодеки стали прекрасным решением данной проблемы.
Задачи кодеров и декодеров
Основные задачи, которые ставят разработчики перед кодеками, заключаются в следующем:
- оптимизация скорости преобразования для правильной передачи сигнала конечным пользователям;
- сохранение качества перекодированной информации;
- восстановление утраченных сегментов при работе.
Принципы работы кодека
При воспроизведении видеофайла кодек распаковывает сжатое видео для трансляции его на экране. Информация упакована в специальный медиаконтейнер и содержит в себе звук и видео. Обычно встречаются контейнеры с расширением AVI, ASF, MOV и т.д. В процессе взаимодействия со сплиттером (о нем мы поговорим дальше) и кодеком происходит процесс распаковки контейнера с последующим преобразованием цифрового сигнала в аналоговый через устройство вывода.
Файлы-контейнеры разбиты на блоки (они именуются как chunks - ломти), каждый из которых состоит из заголовка и самих данных. Заголовок определяет, как следует толковать данные: но не заключает в себе алгоритм их обработки. Предполагается, что алгоритм содержится в самой системе, а заголовок только указывает, какой из алгоритмов надлежит в данной ситуации применять.
Возьмем для примера файл, который содержит одну видеодорожку, две или несколько аудио (дубляж английский и русский), одну или несколько дорожек с субтитрами, данные о применяемых форматах сжатия, индекс (раздел с адресами размещения определенных мест в записи) и комплект текстовых полей.
Процесс распаковки медиаконтейнеров (извлечение потоков видео, аудио и субтитров и их разделения) поддерживает и реализует специальная библиотека Windows - сплиттер. Непременными для Windows являются сплиттеры для распаковки AVI, MPEG1/2 и ASF. Для работы с другими форматами потребуется установка дополнительных сплиттеров. После того как сплиттер приступает к процессу воспроизведения аудио- или видеопотока, к работе подключаются кодеки. Являясь специальной библиотекой, кодек декодирует (разжимает) каждый из разделенных потоков.
Типы кодеков
Видеокодеки подразделяются на несколько видов - Video for Windows (VfW), DirectShow (DSH) и DirectX Media Object (DMO). В большинстве видеоплееров при воспроизведении используется DirectShow; а кодеки VfW применяются отдельными программами для сжатия видео, например, очень известной VirtualDub/VirtualDubMod. Кодеки вида DMO относятся, скорее, к подвидам DirectShow и отличаются тем, что доля их обязанностей перекладывается на приложение, воспроизводящее видео, исходя из этой причины, подобный тип не особо популярен.
Аудиокодеки также подразделяются на несколько видов - Audio Compression Manager (ACM), работающий в паре с VfW, DirectShow и DirectX Media Object.
Особые коды - Four CC (видео) и Twin CC (аудио) описывают формат сжатия изображения и звука и определяют, что требуется для их дешифрования. При этом для воспроизведения видеоряда не всегда может использоваться тот же кодек, что и для компрессии.
Основываясь на выше сказанном, данные о том, каким, собственно, кодеком упаковано видео в файле, записываются в виде FourCC-кода, включающего в себя 4 символа. Любой из кодеков содержит уникальный личный FourCC-код, при этом в целях совместимости, в редких случаях при кодировании, указывается "чужой" FourCC-код. Например, если видео смотрят на стационарном проигрывателе, то при сжатии его и использовании FFDshow требуется указать FourCC не FFDS, а DivX или XviD, или файл, скорее всего, не воспроизведется.
Кодек может применяться также для компрессии видеофайла (например, при монтаже фильма). При кодировании исходного формата файла кодек занимается поиском и сохранением кадров, на которых изменяется картинка изображения. Избавляясь от промежуточных кадров, прогнозирует и сберегает лишь данные о трансформациях в проходящем кадре по отношению к предшествующему. При сжатии информации, полученной таким способом, используются определенные алгоритмы компрессии, схожие с теми, что применяют в программах архиваторах.
Теперь вы знаете, что при просмотре фильма или прослушивании любимой композиции наравне с плеером для вас без устали трудятся невидимые маленькие помощники - кодеки, внося свой вклад в воспроизведение файлов мультимедиа.
Сергей КЛАЧЕК
Комментарии