Konstantin Lepikhov, ссылка на оригинал
Введение
------------
Одна из замечательных особенностей MPlayer'а - очень гибкая
архитектура кодеков, которая позволяет ему использовать при
проигрывании собственные кодеки, так же, как и открытые библиотеки, DLL
от Win32 и бинарные модули от XAnim (а еще Real Multimedia и много еще
чего
Блоки кодеков могут располагаться а произвольном порядке, т.к это
не важно для MPlayer'а. Но все таки, лучше располагать их так, чтобы
потом самому было понятно
(Вообще-то любые изменения, вносимые в кодеки *требуют* обновления
codecs.conf и после этого MPlayer перестает воспринимать старую версию
codecs.conf. Не рекомендуется изменять эту строку, до тех пор пока вы
точно не знаете, что делаете.)
Видео кодеки
------------------
А теперь давайте пробежимся по примерам. Вот простой пример блока видео кодека:
Код: |
; this is a comment
format 0x34616d69 ; "ima4" (MOV files) |
Код: | release 20020520 |
Это полностью поддерживаемый и работающий видео кодек. Ключевое
слово "videocodeс", говорит от том, что это начало описания нового
видео кодека. "indeo5ds" - это уникальное имя кодека, который
использует MPlayer.
Следующая строка начинается с ключего слова "info", которое определяет обычный текстовый комментарий для этого кодека.
Ключевое слово "status" определяет функциональный статус этого
кодека. Сейчас MPlayer понимает 4 статус-уровня: working, buggy,
crashing, untested.
Следущая строка - это список 4х буквенных кодов (FOURCCs), которые
связаны с этим кодеком. Может быть больше одного FOURCC в строке
fourcc, если они разделены запятыми. Также может быть несколько строк
fourcc в блоке, определящем кодек.
Ключевое слово "driver" связывает этот кодек с внутренним модулем
декодера MPlayer'а. Например, у MPlayer есть модуль "dshow", который
обрабатывает данные, закодированные этим кодеком.
Ключевое слово "dll" указывает, какой Win32 или XAnim модуль должен
быть загружен, чтобы оперировать этим media типом данных. Это ключевое
слово обычно используется в сочетании с dshow, vfm, acm и xanim
драйверами, т.к они используют закрытые бинарные модули.
Ключевое слово "guid" определяет 16-битный Microsoft GUID, который используют некоторые media файлы, чтобы обозначить кодек.
Ключевое слово "out" определяет, в какой формат выходных данных
можно декодировать этот кодек. Как и с "fourcc", может быть несколько
out строк и несколько форматов, разделеных запятыми на одной строке.
Выходные форматы должны быть расположены по приоритетности.
Аудио Кодеки
------------------
Простой пример сравнительно полнофункционального работающего кодека:
Код: |
videocodec
indeo5ds info "Intel Indeo 5" status working fourcc IV50,iv50 driver dshow dll "ir50_32.dll" guid 0x30355649, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x7 out YV12 out YUY2 out BGR32,BGR24,BGR16,BGR15 |
Многие ключевые слова - из videocodec-секции, так что мы не будем
их снова описывать. Но есть и такие, которые мы еще не видели. Это
ключевое слово "comment", по смыслу похожее на "info".
Ключевое слово "format" выполняет такую же функцию, как и строка
fourcc. Но некоторые типы файлов (в основном AVI) определяют аудио
форматы 16-битным номером, в отличие от 32-битных FOURCC's, поэтому
необходимо использовать такое разделение. Но, как показано в этом
примере, FOURCCs могут быть использованы в строке format, т.к они могут
быть переведены в hex представление. Это важное замечание, т.к подобное
может пригодится, если FOURCC содержит пробелы (например кодек "rle "
от Apple).
Ключевое слово "flags" определяет дополнительные возможности этого
кодека. На сегодняшний день, это только флаг seekable (т.е с
возможностью поиска).
О теории к практике
--------------------------
А теперь попробуем самостоятельно добавить новый кодек в MPlayer.
Для примера, возмем Cool codec, которым сейчас сжимают некоторые
фильмы.
Исходные данные:
- под win32 этот кодек работает через закрытый драйвер, который понимает mplayer от windows.
- параметры он хранит в реестре, видимо у него есть GUID. Т.е
внешне все очень похоже на directshow codecs. Также алгоритм сжатия -
mpeg4, только несколько видоизменнный.
Что это нам дало? Перед нами кодек, похожий на dshow, работающий
так же, как и он, но только MPlayer его не понимает. Почему? Т.к он
ничего не знает про fourcc. Если посмотреть файл, пожатый этим кодеком,
то можно увидеть, что внутри вместо привычных DIV3 fourcc'ов там
какой-то странный COL1. Ну что ж, это тоже подходит
теперь можем спокойно смотреть такие фильмы, и никакие закидоны программеров не страшны.
P.S К сожалению не со всеми кодеками проходит такой номер. Если у
него изменился бы еще и GUID, то пришлось бы попотеть, ища его в
бескрайних просторах реестра
Код: |
audiocodec mp3 info "MPEG layer-2, layer-3" status working comment "Optimized to MMX/SSE/3Dnow!" format 0x50 format 0x55 format 0x33706d2e ; ".mp3" CBR/VBR MP3 (MOV files) format 0x5500736d ; "ms0x55" older mp3 fcc (MOV files) driver mp3lib dll "mp3lib (mpglib)" flags seekable |
Код: |
videocodec ffdivx info "FFmpeg DivX ;-) (MS MPEG-4 v3)" status working fourcc MPG3,mpg3 div3 fourcc MP43,mp43 div3 ; M$ MPEG4 v3 (fourcc mapping to div3) fourcc DIV5,div5 div3 ; DivX 3.20 fourcc DIV6,div6 div4 ; -||- fourcc DIV3,div3,DIV4,div4 fourcc AP41 div3 ; AngelPotion stuff fourcc COL1,col1,COL0,col0 ; Cool codec (based on mpg4ds32.ax) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - это то, что добавили. driver ffmpeg dll msmpeg4 out YV12,I420,IYUV |