<?xml version="1.0" encoding="koi8-r"?>
<!-- synced with r20176 -->
<chapter id="cd-dvd">
<title>Использование CD/DVD</title>

<sect1 id="drives">
<title>приводы CD/DVD</title>

<para>
Современные приводы CD-ROM могут работать на очень  высоких скоростях, некоторые
из них способны регулировать скорость чтения. Несколько аргументов &quot;за&quot;
использование этой возможности:
</para>

<itemizedlist>
<listitem><para>
На высоких оборотах возрастает вероятность ошибки при чтении, особенно с
плохо штампованных дисков. Уменьшение скорости может предотвратить потерю
данных в этом случае.
</para></listitem>

<listitem><para>
Многие CD-ROM приводы ужасно шумят, а снижение скорости может привести
к уменьшению шума.
</para></listitem>
</itemizedlist>

<sect2 id="drives_linux">
<title>Linux</title>

<para>
Вы можете уменьшить скорость вращения IDE CD-ROM приводов программами
<command>hdparm</command> или <command>setcd</command>. Это работает так:
<screen>hdparm -E <replaceable>[скорость]</replaceable> <replaceable>[cdrom устройство]</replaceable></screen>
<screen>setcd -x <replaceable>[скорость]</replaceable> <replaceable>[cdrom устройство]</replaceable></screen>
<screen>cdctl -bS <replaceable>[speed]</replaceable></screen>
</para>

<para>
Если используется эмуляция SCSI, вам следует применять настройки к реальному IDE
устройству, а не сэмулированному SCSI.
</para>

<para>
Если у Вас есть привилегии администратора, следующая команда
тоже может оказаться полезной:
<screen>echo file_readahead:2000000 &gt; /proc/ide/<replaceable>[cdrom device]</replaceable>/settings</screen>
</para>

<para>
Таким образом, предварительно считывается 2 мегабайта (полезно при
дисках с царапинами). Если поставить слишком большое значение, то постоянный
запуск и остановка вращения диска ужасно снизят эффективность.
Рекомендуется также подстроить привод, используя <command>hdparm</command>:
<screen>hdparm -d1 -a8 -u1 <replaceable>cdrom устройство</replaceable></screen>
</para>

<para>
Этой командой включается прямой доступ к памяти[DMA], предварительное
чтение и размаскировка IRQ (прочтите man-страницу <command>hdparm</command>,
с более подробным описанием).
</para>

<para>
Обратитесь к &quot;<filename>/proc/ide/<replaceable>[cdrom device]</replaceable>/settings</filename>&quot;
для подстройки Вашего CD-ROM привода.
</para>

<para>
У SCSI приводов нет общего способа выставить эти параметры (Вы знаете какой-нибудь?
Расскажите нам!) Существует программа для 
<ulink url="http://das.ist.org/~georg/">Plextor SCSI приводов</ulink>.
</para>
</sect2>

<sect2 id="drives_freebsd">
<title>FreeBSD</title>
<para>Скорость: 
<screen>cdcontrol [-f <replaceable>device</replaceable>] speed <replaceable>speed</replaceable></screen></para>
<para>DMA: <screen>sysctl hw.ata.atapi_dma=1</screen></para>
</sect2>
</sect1>

<sect1 id="dvd">
<title>Воспроизведение DVD</title>
<para>
Полный список возможных опций можно прочитать в man странице.
Синтаксис для стандартных Цифровых Многоцелевых Дисков[Digital Versatile Disc]
(DVD) таков:
<screen>mplayer dvd://<replaceable>&lt;ролик&gt;</replaceable> [-dvd-device <replaceable>привод</replaceable>]</screen>
</para>

<para>
Пример:
<screen>mplayer dvd://<replaceable>1</replaceable> -dvd-device <replaceable>/dev/hdc</replaceable></screen>
</para>

<para>
Если вы собрали <application>MPlayer</application> с поддержкой dvdnav, синтаксис тот же,
просто укажите dvdnav:// вместо dvd://.
</para>

<para>
Устройство DVD по умолчанию - это <filename>/dev/dvd</filename>. Если Ваши
настройки отличаются, создайте символическую ссылку или укажите правильное
устройство в командной строке, используя опцию <option>-dvd-device</option>.
</para>

<para>
<application>MPlayer</application> использует библиотеки <systemitem>libdvdread
</systemitem> и <systemitem>libdvdcss</systemitem> для DVD расшифровки и
воспроизведения. Эти две библиотеки содержатся в подкаталоге
<filename class="directory">libmpdvdkit2</filename> дерева исходного кода
<application>MPlayer</application>'а, так что отдельно устанавливать их не нужно.
Вы также можете использовать уже установленные в системе версии библиотек, но это
<emphasis role="bold">не рекомендуется</emphasis>, так как может приводить к
ошибкам, несовместимости и потере скорости.
</para>

<note><para>
В случае проблем с декодированием DVD, попробуйте отключить supermount или
другие подобные удобства. Некоторые RPC-2 устройства могут требовать 
уcтановку кода региона.
</para></note>

<formalpara>
<title>Структура DVD</title>
<para>
Диски DVD используют сектора размером в 2048 байтов с ECC/CRC. На них обычно
единственная файловая система UDF на одной дорожке, которая содержит
различные файлы (коротенькие .IFO и .BUK и длинные (порядка гигабайта)
.VOB). Это настоящие файлы, которые можно просматривать/переписывать со
смонтированного не зашифрованного DVD.
</para>
</formalpara>

<para>
Файлы .IFO содержат информацию для навигации (раздел/ролик/угол/язык и пр.),
необходимую для интерпретации содержания .VOB (кино). Файлы .BUK &mdash; их
дубли. Эти файлы содержат адреса в <emphasis role="bold">секторах</emphasis>,
так что для исполнения навигации и расшифровки DVD, нужен доступ к файлам на
уровне секторов.
</para>

<para>
Для поддержки DVD необходим прямой посекторный доступ к устройству. К сожалению,
(под Linux) Вы должны быть root'ом, чтобы получить секторный адрес файла.
Вот почему мы вообще не используем драйвер файловой системы из ядра, а
переписали его для выполнения в пользовательсмком пространстве.
<systemitem>libdvdread</systemitem> 0.9.x и <systemitem>
libmpdvdkit</systemitem> так и делают. Драйвер UDF
файловой системы не нужен, поскольку соответствующие драйвера встроены в эти библиотеки. 
DVD также не обязан быть смонтированным, поскольку используется
только прямой посекторный доступ.
</para>

<para>
Иногда <filename>/dev/dvd</filename> не доступен на чтение рядовым пользователям,
поэтому авторы <systemitem>libdvdread</systemitem> написали
уровень эмуляции, который превращает секторные адреса в названия файла и смещение,
для эмуляции прямого доступа на замонтированной файловой системе или на жёстком
диске.
</para>

<para>
<systemitem>libdvdread</systemitem> даже позволяет указывать точку монтирования вместо
имени устройства для прямого доступа, и получает его название из <filename>
/proc/mounts</filename>. Этот метод придуман для Solaris, где данные названия
присваиваются динамически.
</para>

<!--FIXME duplicate paragraph -->
<para>
Устройство DVD по умолчанию &mdash; <filename>/dev/dvd</filename>. Если Ваши
настройки отличаются, создайте символическую ссылку или укажите правильное
название в командной строке после опции <filename>-dvd-device</filename>.
</para>

<formalpara>
<title>DVD аутентификация</title>
<para>
Аутентификация и дешифровка в новом методе поддержки DVD происходит при помощи
пропатченной <systemitem>libdvdcss</systemitem> (см. выше). Метод может быть
указан в переменной среды <envar>DVDCSS_METHOD</envar>, которая может быть
установлена в key, disk или title.
</para>
</formalpara>

<para>
Если ничего не указано, она пробует следующие методы (по умолчанию: key,
title request):
</para>

<orderedlist>
<listitem><para>
<emphasis role="bold">bus key</emphasis>: Этот ключ устанавливается во время
аутентификации (длинная смесь ioctl'ов и различных обменов ключами,
криптографические процедуры) и используется для зашифровки ключей диска и ролика
при передаче по незащищённой шине (во избежания подслушивания). Он необходим для
получения и предварительной расшифровки ключа диска.
</para></listitem>

<listitem><para>
<emphasis role="bold">cached key</emphasis>: <application>MPlayer</application>
ищет уже взломанный ключ ролика, который сохраняется в каталоге
<filename class="directory">~/.mplayer/DVDKeys</filename> (быстро ;).
</para></listitem>

<listitem><para>
<emphasis role="bold">key</emphasis>: Если кэшированного ключа нет,
<application>MPlayer</application> пытается расшифровать ключ диска с помощью
включённых ключей плееров.
</para></listitem>

<listitem><para>
<emphasis role="bold">disk</emphasis>: Если метод key проваливается
(например, при отсутствии ключей плееров) <application>MPlayer</application>
взломает ключ грубой силой. Этот метод интенсивно использует процессор и
нуждается в 64 мегабайтах памяти (хэш-таблица из 16 миллионов 32-разрядных
записей). Работает наверняка (но медленно).
</para></listitem>

<listitem><para>
<emphasis role="bold">title request</emphasis>: Используя ключ диска
<application>MPlayer</application> запрашивает зашифрованные ключи роликов,
которые находятся в <emphasis>скрытых секторах</emphasis>, используя 
<systemitem>ioctl()</systemitem>. Региональная защита RPC-2 приводов
осуществляется именно на этом этапе и может не сработать на подобных приводах.
Если это удаётся, ключи роликов будут расшифрованы, используя ключи диска и шины.
</para></listitem>

<listitem><para>
<emphasis role="bold">title</emphasis>:Данный метод используется если title
request не срабатывает. Он не опирается на обмен ключами с приводом.
Используется криптографическая атака, чтобы угадать ключ непосредственно
(находится повторяющаяся последовательность в расшифрованном содержимом VOB'а
и предполагается, что текст, соответствующий первому зашифрованному байту - это
продолжение этой последовательности). Метод также известен под названиями &quot;
атака с известным открытым текстом&quot; или &quot;DeCSSPlus&quot;. В редких
случаях этот метод проваливается, по причине недостаточности зашифрованного
содержания для статистической атаки или из-за изменения ключа в середине
ролика. Это единственный метод расшифровать содержимое DVD на жёстком диске
или на диске из неподходящего региона на проигрывателе RPC-2. (медленный метод).
</para></listitem>
</orderedlist>

<para>
С дисководами RPC-1, региональная защита осуществляется программно.
Дисководы RPC-2 защищены аппаратными средствами, разрешающими менять регион
всего 5 раз. Рекомендуется обновить прошивку[firmware] до RPC-1 если у тебя
RPC-2 привод. Обновления прошивок могут быть найдены на
<ulink url="http://www.firmware-flash.com/">странице прошивок</ulink>.  Если
для Вашего дисковода нет обновления, используйте для изменения региона привода
<ulink url="http://www.linuxtv.org/download/dvd/dvd_disc_20000215.tar.gz">
программу regionset</ulink> (для Linux). <emphasis role="bold">Внимание:
</emphasis> Изменить регион можно всего 5 раз.
</para>
</sect1>

<sect1 id="vcd">
<title>воспроизведение VCD</title>
<para>
Полный список возможных опций можно прочитать в man. Синтаксис для обычного
Видео-CD (VCD):
<screen>mplayer vcd://<replaceable>&lt;дорожка&gt;</replaceable> [-cdrom-device <replaceable>&lt;устройство&gt;</replaceable>]</screen>
Пример:
<screen>mplayer vcd://<replaceable>2</replaceable> -cdrom-device <replaceable>/dev/hdc</replaceable></screen>
Устройство VCD по умолчанию &mdash; <filename>/dev/cdrom</filename>. Если Ваши
настройки отличаются, создайте символическую ссылку добавьте правильное название
в командной строке после опции <option>-cdrom-device</option>.
</para>

<note><para>
По крайней мере Plextor'ы и некоторые Toshiba SCSI CD-ROM приводы показывают
ужасную производительность при чтении VCD'ов. Это объясняется тем, что
CDROMREADRAW <systemitem>ioctl</systemitem> на этих приводах реализован не полностью.
Если Вы имеете некоторые познания в сфере программирования SCSI, пожалуйста
<ulink url="../../tech/patches.txt">помогите нам</ulink> в написании поддержки
SCSI generic для VCD.
</para></note>

<para>
В настоящий момент Вы можете извлечь данные с VCD, используя 
<ulink url="http://ftp.ntut.edu.tw/ftp/OS/Linux/packages/X/viewers/readvcd/">
readvcd</ulink>, и воспроизвести получившийся файл <application>MPlayer
</application>'ом.
</para>

<formalpara>
<title>структура VCD</title>
<para>
VCD составлен из секторов CD-ROM XA, т.е. дорожек CD-ROM mode 2 form 1 и form 2:
</para>
</formalpara>

<itemizedlist>
<listitem><para>
Первая дорожка записана в mode 2 form 2 формате, что, в частности, означает
использование коррекции ошибок L2. Дорожка содержит файловую систему ISO-9660 с
секторами по 2048 байт. Там содержатся метаданные VCD, 
и картинки, часто использующиеся в меню. Здесь также могут храниться
фрагменты MPEG для меню, но каждый из них должен быть разбит на кусочки по 
150 секторов. Еще файловая система может хранить файлы или программы,
не имеющие отношения к работе с VCD.
</para></listitem>

<listitem><para>
Вторая и остальные дорожки содержат MPEG-поток секторами по 2324 байта, по
одному пакету MPEG PS на сектор вместо файловой системы. Это дорожки в формате 
mode 2 form 1 и хранять больше информации на один сектор за счет потери возможности
некоторой коррекции ошибок. После первой дорожки также допустимо присутствие 
дорожки CD-DA. В некоторых ОС используются различные трюки, чтобы сделать  эти
не-ISO-9660 дорожки видимыми  в файловой системе. Но Linux - это не тот случай (пока).
Здесь MPEG данные <emphasis role="bold">не могут быть смонтированы</emphasis>. 
(Вы когда-нибудь монтировали аудио диск
для того, чтобы его воспроизвести?) Так как большинство фильмов нахидотся именно на 
таких дорожках, попробуйте сначала <option>vcd://2</option>.
</para></listitem>

<listitem><para>
Существуют VCD диски без первой дорожки (единственная дорожка без файловой
системы). Они проигрываются, но не монтируются.
</para></listitem>

<listitem><para> Описание стандарта Video CD называется 
Philips "White Book" и, как правило, недоступна в онлайн, т.к. должа приобретаться
у Philips. Более подробная информация о Video CD может быть найдена в 
<ulink url="http://www.vcdimager.org/pub/vcdimager/manuals/0.7/vcdimager.html#SEC4">vcdimager documentation</ulink>.
</para></listitem>

</itemizedlist>

<formalpara>
<title>Про файлы .DAT</title>
<para>
Файл примерно в 600 мегабайт на первой дорожке не настоящий! Это так
называемый ISO-переход, созданный, чтобы позволить Windows обрабатывать эти
дорожки (Windows вообще запрещает приложениям использовать прямой доступ
к устройствам). Под Linux Вы не можете копировать эти файлы (они выглядят, как
мусор). Под Windows это возможно, поскольку там iso9660 эмулирует прямой доступ
к дорожкам через этот файл. Чтобы проигрывать .DAT файл Вам нужен драйвер,
из Linux версии PowerDVD. Это модифицированный драйвер
iso9660 файловой системы (<filename>vcdfs/isofs-2.4.X.o</filename>), который
способен эмулировать прямой доступ к дорожкам через этот файл. Если Вы
замонтируете диск, используя их драйвер, Вы можете копировать и даже проигрывать
.DAT файлы <application>MPlayer</application>'ом. Но это не будет работать со
стандартным драйвером iso9660 из ядра Linux! Используйте вместо этого
<option>vcd://</option>. Альтернативами для копирования VCD может послужить новый
драйвер <ulink url="http://www.elis.rug.ac.be/~ronsse/cdfs/">cdfs</ulink> (не
входит в официальное ядро) который показывает дорожки[сессии] на диске как файлы
образов и <ulink url="http://cdrdao.sf.net/">cdrdao</ulink>, приложение для
побитового чтения/копирования CD.
</para>
</formalpara>
</sect1>
</chapter>
