7.18. MPEG декодеры
Пред. | Глава 7. Устройства вывода видео | След.

## 7.18. MPEG декодеры

### 7.18.1. DVB ввод и вывод

MPlayer поддерживает карты с чипсетом Siemens DVB и таких производителей, как Siemens, Technotrend, Galaxis или Hauppauge. Последние DVB драйверы доступны с сайта Linux TV. Если вы собираетесь делать программное транскодирование, у вас должен быть как минимум 1ГГц CPU.

Скрипт configure должен определить вашу DVB карту. Если нет, принудительно укажите определение с помошью

    ./configure --enable-dvb

Если заголовочные файлы ost находятся не в стандартных каталогах, укажите путь с

    ./configure --with-extraincdir=каталог исходников DVB/ost/include

Затем компилируйте и устанавливайте как обычно.

ИСПОЛЬЗОВАНИЕ. Аппаратное декодирование потоков, содержащих MPEG-1/2 видео и/или MPEG аудио, может быть выполнено следующей командой:

    mplayer -ao mpegpes -vo mpegpes file.mpg|vob

Декодирование любых других видео потоков требует транскодирования в MPEG-1, поэтому оно медленно и, возможно, не стоит неприятностей, особенно если ваш компьютер медленный. Его можно добиться, используя команду:

    mplayer -ao mpegpes -vo mpegpes yourfile.ext
    mplayer -ao mpegpes -vo mpegpes -vf expand yourfile.ext

Имейте в виду, что DVB карты поддерживают высоту изображения только 288 и 576 для PAL и 240 и 480 для NTSC. Для других значений высоты вы должны отмасштабировать изображение, добавив `scale=ширина:высота` к опции `-vf` с желаемыми значениями ширины и высоты. DVB карты допускают различные значения ширины: 720, 704, 640, 512, 480, 352 и т.д. и производят аппаратное масштабирование по горизонтали, так что в большинстве случаев масштабировать по горизонтали не нужно. Для 512x384 (пропорции 4:3) MPEG-4 (DivX) попробуйте:

Если у вас есть широкоформатный фильм и вы не хотите растягивать его на полную высоту, используйте плагин `expand=w:h` для добавления черных полос. Чтобы посмотреть 640x384 MPEG-4 (DivX), попробуйте:

    mplayer -ao mpegpes -vo mpegpes -vf expand=640:576 file.avi

Если ваш CPU слишком слаб для полноразмерного 720x576 MPEG-4 (DivX), попробуйте уменьшить размер:

    mplayer -ao mpegpes -vo mpegpes -vf scale=352:576 file.avi

Если скорость не увеличилась, попробуйте уменьшить размер по вертикали тоже:

    mplayer -ao mpegpes -vo mpegpes -vf scale=352:288 file.avi

Для OSD и субтитров используйте возможности OSD плагина expand. Так, вместо `expand=w:h` или `expand=w:h:x:y`, используйте `expand=w:h:x:y:1` (5-й параметр `:1` в конце для включения OSD рендеринга). Вы можете слегка подвинуть изображение вверх, чтобы получить большую черную область для субтитров. Вы также можете переместить субтитры вверх, если они выходят за пределы TV экрана, используйте для этого `-subpos <0-100>` (`-subpos 80` - хороший выбор).

Чтобы воспроизвести не-25fps фильмы на PAL TV или на машине со слабым CPU, добавьте опцию `-framedrop`.

Для сохранения пропорций MPEG-4 (DivX) файлов и получения оптимальных параметров масштабирования (аппаратное горизонтальное и программное вертикальное масштабирование с сохранением пропорций), используйте плагин dvbscale:

    for a  4:3 TV: -vf dvbscale,scale=-1:0,expand=-1:576:-1:-1:1
    for a 16:9 TV: -vf dvbscale=1024,scale=-1:0,expand=-1:576:-1:-1:1

Цифровое TV (DVB драйвер ввода ). Вы можете использовать DVB карту для просмотра Цифрового TV.

Вы должны иметь установленные программы scan и szap/tzap/czap/azap; все они входят в пакет драйверов.

Проверьте, что ваши драйверы правильно работают с такими программами, как dvbstream (это основа DVB драйвера ввода).

Теперь вам следует создать файл `~/.mplayer/channels.conf`, с понятным szap/tzap/czap/azap синтаксисом, или позволить scan сделать это для вас.

Если у вас несколько разнотипных карт (например, для спутникового TV, наземного , кабельного и ATSC), можете сохранить файлы как `~/.mplayer/channels.conf.sat`, `~/.mplayer/channels.conf.ter`, `~/.mplayer/channels.conf.cbl`, и `~/.mplayer/channels.conf.atsc`, соответственно, с тем, чтобы можно было явно указать MPlayer какой файл использовать вместо стандартного `~/.mplayer/channels.conf`, и какую карту с ним использовать.

Убедитесь, что в `channels.conf` находятся каналы !-- FIXME Free to Air --> только для обычного телевидения[Free to Air], иначе MPlayer будет ожидать передачи незашифрованных данных.

В полях аудио и видео вы можете использовать расширенный синтаксис: `...:pid[+pid]:...` (в каждом максимум 6 pid'ов); в этом случае MPlayer включит в поток все указанные pid плюс pid 0 (содержащий PAT). В каждую строку всегда следует включать PMT и PCR pid'ы для соответствующего канала (если вы их знаете). Также можно указать 8192, при этом будут выбраны все pid на этой частоте, и Вы сможете потом переключаться между программами при помощи TAB. Это может потребовать большей пропускной способности, однако дешевые карты всегда пересылают все каналы как минимум до ядра, так что в этом случае разница будет небольшой. Другие возможные применения: телетекст pid, второая аудио дорожка, и т.д.

Если MPlayer часто жалуется на

    Too many video/audio packets in the buffer

или если вы заметили растущую рассинхронизацию между звуком и видео проверьте наличие PCR pid'а в вашем потоке (требующегося для соблюдения модели буферизации передатчика) и/или попробуйте воспользоваться libavformat MPEG-TS декодером, добавив `-demuxer lavf -lavfdopts probesize=128` в командную строку.

Для показа первого из доступных каналов, запустите

    mplayer dvb://

Если вы хотите посмотреть определенный канал, например R1, запустите

    mplayer dvb://R1

Если у вас больше одной карты, также надо указать номер той, с которой доступен канал:

    mplayer dvb://2@R1

Для смены канала, нажимайте клавиши h (следующий) и k (предыдущий), или используйте OSD меню.

Для временного отключения аудио или видео потока скопируйте следующие строки в `~/.mplayer/input.conf`:

    % set_property  switch_video -2
    & step_property switch_video
    ? set_property  switch_audio -2
    ^ step_property switch_audio

(Заменяя горячие клавиши по своему усмотрению.) При нажатии на клавишу, соответствующую switch_x -2, поток будет закрыт; при нажатии на клавишу, соответствующую step_x, поток будет открыт снова. Имейте в виду, что этот механизм переключения не будет работать как следует, когда в мультиплексоре присутствует несколько аудио или видео потоков.

Во время воспроизведения (не во время записи) для предотвращения заикания и таких ошибок, как 'Your system is too slow', имеет смысл добавить

    -mc 10 -speed 0.97 -af scaletempo

к опциям командной строки, исправив параметры scaletempo по своему усмотрению.

Если ваш `~/.mplayer/menu.conf` содержит запись `<dvbsel>`, как в файле с примерами `etc/dvb-menu.conf` (можете использовать его чтобы перезаписать `~/.mplayer/menu.conf`), главное меню будет отображать подменю, позволяющее вам выбрать один из присутствующих в `channels.conf` каналов, возможно, с предшествующим ему подменю с DVB выбором карт, доступных MPlayer.

Если хотите записать какую-то программу на диск, используйте

    mplayer -dumpfile r1.ts -dumpstream dvb://R1

Если хотите вместо этого записать ее в другом формате (перекодировать), следует использовать такую команду:

    mencoder -o r1.avi -ovc xvid -xvidencopts bitrate=800 \
        -oac mp3lame -lameopts cbr:br=128 -pp=ci dvb://R1

Полный список опций для DVB драйвера ввода можно найти на странице руководства man.

БУДУЩЕЕ. Если у вас есть вопросы, или вы хотите получать сообщения о новых возможностях и принять участие в дискуссиях на эту тему, подпишитесь на список рассылки MPlayer-DVB. Помните, что язык рассылки - Английский.

В будущем вы можете рассчитывать на возможность отображения OSD и субтитров, используя встроенные OSD возможности DVB карт.

### 7.18.2. DXR2

MPlayer поддерживает аппаратное ускорение воспроизведения с картами Creative DXR2.

Прежде всего вам потребуется правильно установленные DXR2 драйверы. Их и руководство по установке можно найти на сайте Ресурсного Центра DXR2.

ИСПОЛЬЗОВАНИЕ

`-vo dxr2`

  Включить TV выход.

`-vo dxr2:x11` or `-vo dxr2:xv`

  Включить вывод через оверлей в X11.

`-dxr2 <option1:option2:...>`

  Эта опция используется для управления драйвером DXR2.

Чипсет оверлея, использовавшийся на DXR2 довольно плохого качества, но с настройками по-умолчанию будет работать у всех. OSD может работать с оверлеем (не на TV), отрисовывая себя в ключевом цвете[colorkey]. С настройками ключевого цвета[colorkey] по-умолчанию, вы можете получить разные результаты, скорее всего увидите ключевой цвет[colorkey] вокруг символов или другие забавные эффекты. Но при правильных настройках, можно получить вполне приемлемый результат.

Смотрите страницу man руководства для списка доступных опций.

### 7.18.3. DXR3/Hollywood+

MPlayer поддерживает аппаратно ускоренное воспроизведение картами Creative DXR3 и Sigma Designs Hollywood Plus. Обе эти карты используют MPEG декодер на чипе em8300 от Sigma Designs

Прежде всего вам потребуются правильно установленные драйвера DXR3/H+, версии 0.12.0 или выше. Драйверы и инструкции по установке могут быть найдены на сайте DXR3 & Hollywood Plus для Linux `configure` должен автоматически определить вашу карту, компиляция должна пройти без проблем.

ИСПОЛЬЗОВАНИЕ

`-vo dxr3:prebuf:sync:norm=x:`device``

  Опция `overlay` активирует оверлей вместо TV-out. Для корректной работы она требует его правильной настройки. Самый простой способ правильно его настроить - сначала запустить autocal, затем запустить mplayer с драйвером dxr3 и выключенным оверлеем, потом запустить dxr3view. В dxr3view вы можете менять настройки оверлея и видеть результат в реальном времени, может быть, в будущем эта возможность будет поддерживаться в MPlayer GUI. После того как оверлей правильно настроен, надобность в dxr3view отпадает. Опция `prebuf` включает пребуферинг. Пребуферинг - это возможность чипа em8300, позволяющая ему хранить более одного кадра видео в каждый момент времени. Это значит, что при включенном пребуферинге MPlayer будет пытаться всегда держать буфер заполненным данными. Если у вас медленная машина, то MPlayer будет забирать практически 100% CPU. Это особенно часто случается, если вы воспроизводите чистые MPEG потоки (DVD, SVCD и т.д.), т.к., поскольку MPlayer не должен перекодировать их в MPEG, то он заполняет буфер очень быстро. С пребуферингом воспроизведение видео значительно меньше зависит от остальных программ, прибирающих к рукам CPU, он не будет терять кадры, кроме случая, когда приложения захватит CPU на довольно длительное время. При запуске без пребуферинга, em8300 намного более чувствителен к загрузке CPU, так что настоятельно рекомендуется включить `-framedrop` опцию MPlayer для избежания потери синхронизации. `sync` включит алгоритм синхронизации. Пока что это еще экспериментальная возможность. С включенной sync возможностью будут постоянно проверяться встроенные часы em8300, и если начинается отклонение от часов MPlayer чип будет сброшен, что приведет к пропуску всех запаздывающих кадров.

  `norm=x` установит TV стандарт DXR3 карты без необходимости использования внешних утилит вроде em8300setup. Допустимые стандарты: 5 = NTSC, 4 = PAL-60, 3 = PAL. Специальные стандарты 2 (автонастройка, используя PAL/PAL-60) и 1 (автонастройка используя PAL/NTSC) решают какой стандарт использовать на основе частоты кадров. because they decide which norm to use by looking at the frame rate of the movie. norm = 0 (по-умолчанию) не изменяет текущий стандарт.

  ``device`` = номер устройства, если их у вас несколько em8300 карт. Любые из этих опций могут быть опущены.

  `:prebuf:sync`, похоже, отлично работает при воспроизведении фильмов MPEG-4 (DivX). Пользователи сообщали о проблемах при использования prebuf опции при воспроизведении файлов MPEG-1/2. Вы можете попробовать запустить программу сначала вообще без указания опций, если же имеете проблемы с синхронизацией или с DVD субтитрами, попытайтесь с `:sync`.

`-ao oss:/dev/em8300_ma-`X``

  Для вывода звука, где `X` - номер устройства (0, если карта одна).

`-af resample=`xxxxx``

  em8300 не может воспроизводить частоты дискретизации ниже 44100Hz. Если частота ниже 44100Hz, выберите либо 44100Hz, либо 48000Hz в зависимости от того, какая частота ближайшая. Т.е. если фильм использует 22050Hz укажите 44100Hz, т.к. 44100 / 2 = 22050, если 24000Hz, используйте 48000Hz, т.к. 48000 / 2 = 24000 и т.д. Это не работает с цифровым выводом звука (`-ac hwac3`).

`-vf lavc`

  Для просмотра не-MPEG контента на em8300 (напрмер MPEG-4 (DivX) или RealVideo) вы должны указать MPEG-1 видеоплагин, такой как `libavcodec` (lavc). Дополнительную информацию о `-vf lavc` смотрите на странице руководства man. На данный момент неизвестно способа установить значение fps для em8300, что означает фиксированную величину, равную 30000/1001 fps, поэтому крайне рекомендуется использовать `-vf lavc=`quality`:25`, особенно, если используете пребуферинг. Почему 25, а не 30000/1001? Ну, причина в том, что при использовании 30000/1001 изображение начинает слегка дрожать. Причина нам неизвестна. Если вы ставите это значение где-то между 25 и 27 картинка стабилизируется. Пока что мы можем только принять это как факт

`-vf expand=-1:-1:-1:-1:1`

  Хотя драйвер DXR3 может помещать некоторый OSD в MPEG-1/2/4 видео, он имеет намного более плохое качество, чем традиционный OSD MPlayer, и имеет несколько проблем при обновлении к тому же. Команда, указанная выше, сначала отконвертирует входное видео в MPEG-4 (это обязательно, извините), затем применит плагин expand, который не будет ничего расширять (-1: по-умоляанию), но наложит нормальное OSD на картинку (это все, что делает "1" в конце строки).

`-ac hwac3`

  em8300 поддерживает воспроизведение звука AC-3 (окружающий звук) через цифровой аудио выход карты.Смотрите опцию `-ao oss` выше, она должна использоваться для указания вывода через DXR3 вместо звуковой карты.

Пред. | Уровень выше | След.
7.17. DirectFB/Matrox (dfbmga) | Начало | 7.19. Другое оборудование вывода видео