<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<LINK REL="stylesheet" TYPE="text/css" HREF="../default.css">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=koi8-r">
</HEAD>
<BODY>
<P><B><A NAME=drives>4.1. Дисководы CD-ROM</A></B></P>
<P>Из Линуксовской документации:</P>
<P>Некоторые CD-ROMы способны регулировать скорость чтения. Несколько
аргументов в пользу использования этой возможности:</P>
<UL>
<LI>При высоких оборотах возрастает вероятность ошибки при чтении,
особенно с неправильно записаных дисков.</LI>
<LI>Уровень шума возрастающий с оборотами может оказаться весьма
существеным.</LI>
</UL>
<P>Рекомендуется использования программ 'hdparm' или 'setcd'.</P>
<P> <CODE>hdparm -E [скорость] [дисковод]</CODE></P>
<P> <CODE>setcd -x [скорость] [дисковод]</CODE></P>
<P>Альтернативный метод:</P>
<P> <CODE>echo current_speed:4 >/proc/ide/[дисковод]/settings</CODE></P>
<P>но для этого требуются администраторские привилегии. Следующая команда
тоже может быть полезна:</P>
<P> <CODE>echo file_readahead:2000000 >/proc/ide/[дисковод]/settings</CODE></P>
<P>Таким образом предварительно прочитывается 2 мегабайта (полезно при
дисках с царапинами). Если поставить слишком высокое значение, то постоянный
запуск и остановка вращения диска драматически снизят эффективность.
Предлагается также использовать программу 'hdparm':</P>
<P> <CODE>hdparm -d1 -a8 -u1 [дисковод]</CODE></P>
<P>Таким образом включается непосредственый доступ к памяти, предворительное
чтение и размаскировка IRQ (если это непонятно, <EM>прочти man-страницу
'hdparm'</EM>)</P>
<P>Можешь поэксперементировать файлом <CODE>/proc/ide/[дисковод]/settings</CODE>
для прочих настроек.</P>
<P>FreeBSD:</P>
<P> Скорость: <CODE>cdcontrol [-f дисковод] speed [скорость]</CODE></P>
<P> DMA: <CODE>sysctl hw.ata.atapi_dma=1</CODE></P>
<P><B><A NAME=dvd>4.2. Просмотр DVD</A></B></P>
<P>Полный список возможных опций можно прочитать в man.</P>
<H4>Новая поддержка DVD (mpdvdkit2)</H4>
<P><B>MPlayer</B> использует библиотеки <CODE>libdvdread</CODE> и
<CODE>libdvdcss</CODE> для расшифровки и просмотра DVD. Эти две программы
находятся в субдиректории <CODE>libmpdvdkit/</CODE>, так что отдельно
устанавливать их не нужно (и бесполезно). Мы выбрали такое решение, потому
что нам пришлось исправить ошибку в <CODE>libdvdread</CODE> и добавить патч
к <CODE>libdvdcss</CODE> для поддержки <B>сохранения взломаных ключей
CSS</B>, что в свою очередь предотвращает повторного взлома ключа при каждом
просмотре, существено увеличивая скорость.</P>
<P><B>MPlayer</B> способен использовать <CODE>libdvdread</CODE> и
<CODE>libdvdcss</CODE> установленые отдельно, но такое решение <B>не
рекомендуется</B>, так как может приводить к ошибкам, несовместимости и
потерию скорости.</P>
<H4>Навигация DVD (dvdnav)</H4>
<P>Работы по поддержке <CODE>libdvdnav</CODE> проводились, но эта часть кода
никогда небыла доведена до ума, и на данном этапе заброшена, не работает.</P>
<P><B>Старая поддержка DVD - <I>ОПЦИОНАЛЬНО</I></B></P>
<P>Это может оказаться полезным на пример при просмотре зашифрованых
VOB-файлов с <B>жесткого диска</B>. Прокомпилируй и установи <B>libcss</B>
(версию 0.0.1, не в коем случае не более познюю). Если <B>MPlayer</B> ее не
обнаружит, добавь <CODE>-csslib /path/to/libcss.so</CODE>. Для использования
необходимы привилегии администратора или suid root на выполняемом файле.</P>
<H4>Структура DVD</H4>
<P>Диски DVD используют сектора размером в 2048 байтов с ECC/CRC. На них обычно
единственая файловая система UDF на одной дорожке, которая содержит
различные файлы (коротенькие .IFO и .BUK и длинные (порядка гигабайта)
.VOB). Это настоящие файлы, которые можно просматривать/переписывать с
монтированого незашифрованого DVD.</P>
<P>Файлы .IFO содержат информацию для навигации (раздел/ролик/угол/язык и
пр.), необходимую для интерпретации содержания .VOB (кино). Файлы .BUK
— их дубли. Эти файлы содержат адреса в <B>секторах</B>, так что для
имплементации навигации и расшифровки DVD, нужен доступ к файлам на уровне
секторов.</P>
<P>Из-за этого старая поддержка DVD нуждается в монтированой файловой
системе и посекторному доступу к дивайсу. К сожалению, для этого нужны
привилегии администратора (под Linux). Проблема решается двумя способами:</P>
<UL>
<LI>Привилегированый доступ или исполняемый файл с suid root.</LI>
<LI>Имплементация файловой системы UDF в userspace. Именно это делют
libdvdread 0.9.x с libmpdvdkit (новая поддержка DVD). В таком случае
драйвер UDF в ядре не нужен, как и монтирования DVD, так как
используется исключительно посекторное чтение.</LI>
</UL>
<P>Иногда пользователям закрыт доступ к /dev/dvd, так что авторы libdvdread
имплементировали некий эмуляционный слой, который конвертирует секторные
адреса в названия файла и офсет, таким образом эмулируя непосредственый
доступ на монтированой файловой системе или на жестком диске.</P>
<P>libdvdread также принимает точку монтирования вместо дивайса, и получает
его название из <CODE>/proc/mounts</CODE>. Этот метод придуман для
Solaris-ов, где данные названия присваиваются динамически.</P>
<P>Дивайс DVD по умолчанию — <CODE>/dev/dvd</CODE>. Если у тебя это не
так, то сделай символический линк или добавь правильное название в командной
строке после ключа <CODE>-dvd-device</CODE>.</P>
<H4>DVD аутентификация</H4>
<P>Это, как и взлом ключей зашифрованых DVD происходит при помощи
отпатченого libdvdcss. Выбор метода осуществляется через переменную
окружения <CODE>DVDCSS_METHOD</CODE>. Возможние значения: <CODE>key</CODE>,
<CODE>disk</CODE>, или <CODE>title</CODE>.</P>
<P>Если ничего не предписано, делаются следующие попытки (по умолчанию: key,
title request):</P>
<OL>
<LI><B>bus key:</B> этот ключ вырабатывается в процессе аутентификации
(множество ioctl в перемешку с обменами ключами —
криптографические процедуры), и при его помощи шифруются ключи диска и
роликов передаваемые по открытой шине (во избежания подслушивания). Он
необходим для получения и предворительной расшифровки ключа диска.</LI>
<LI><B>cached key:</B> MPlayer подберает подходящий взломаный ключ из директории
<CODE>~/.mplayer/DVDKeys</CODE> (быстро ;-)</LI>
<LI><B>key:</B> При отсутствии подходящего ключа, MPlayer пытается
расшифровать диск при помощи набора ключей проигрывателя.</LI>
<LI><B>disk:</B> В случае неудачи (на пример при отсутсвии ключей
проигрывателя) ключ диска форсируется. Этот метод интенсивно использует
процессор и нуждается в 64 мегабайтах памяти (хэш-таблица из 16 миллионов 32-разрядных
записей). Работает наверняка (но медлено).</LI>
<LI><B>title request:</B> Используя ключ диска MPlayer получает
зашифрованые ключи роликов находящиеся в <I>скрытых секторах</I> при
помощи <CODE>ioctl()</CODE>. Региональная защита проигрывателей RPC-2
осуществляется именно на этом этапе; может не сработать на подобных
проигрывателях. При удачи, ключи роликов расшифровываются при помощи
ключа диска и ключа шины.</LI>
<LI><B>title:</B> Данный метод используется если title request не
срабатывает. Он не опирается на обмен ключами с дисководом. Ключи роликов
непосредствено атакуются криптографически, исходя из избыточности
расшифрованого содержания .VOB файлов. Метод также известен под названиями
"атака с известным открытым текстом" или "DeCSSPlus". В редких случаях
этот метод проваливается, по причине недостаточнсти зашифрованого
содержания для статистической атаки или изменения ключа по среди
ролика. Это единственый метод расшифровать содержания DVD на жестком
диске или на диске из неподходящего региона на проигрывателе RPC-2.
(медленый метод)</LI>
</OL>
<P>С дисководами RPC-1, региональная защита осуществляется программно.
Дисководы RPC-2 защищены аппаратными средствами, разрешающими менять регион
всего 5 раз. Рекомендуется перегрузить RPC-1 в firmware если у тебя дисковод
RPC-2 с <A HREF="http://www.firmware-flash.com/">этого</A> сайта. Если для
твоего дисковода нет апгрейда, используй для изменения региона дисковода
<A HREF="http://www.linuxtv.org/download/dvd/dvd_disc_20000215.tar.gz">regionset</A>
(под Linux). <B>Осторожно:</B> Изменить регион можно всего 5 раз.</P>
<P><B><A NAME="vcd">4.3. просмотр VCD</A></B></P>
<P>Полный список возможных опций можно прочитать в man. Синтакс для обычного
Видео-CD (VCD):</P>
<P><CODE>mplayer -vcd <дорожка> [-cdrom-device <дивайс>]</CODE></P>
<P>Пример: <CODE>mplayer -vcd 2 -cdrom-device /dev/hdc</CODE></P>
<P>Дивайс VCD по умолчанию — <CODE>/dev/dvd</CODE>. Если у тебя это не
так, то сделай символический линк или добавь правильное название в командной
строке после ключа <CODE>-cdrom-device</CODE>.</P>
<P><B>Замечание:</B> Некоторые дисководы SCSI (по крайней мере Plextor
и некоторые изделия Toshiba) работают ужасно слабо при чтении VCD. Это
обьясняется неполной имплементацией ioctl CDROMREADRAW для этих дисководах.
Если ты имеешь некоторые познания в сфере програмирования, пожалуйста
<A HREF="tech/patches.txt">помоги нам</A> в имплементации общей поддержки
SCSI для VCD.</P>
<H4>Структура VCD</H4>
<P>Диски VCD состоят из одной или нескольких дорожек:</P>
<UL>
<LI>Первая дорожка содержит несколько мегабайтов секторами по 2048 байтов,
с файловой системой iso9660, обычно содержащей проигрыватель VCD для
Windows или прочию информацию, вроде картинок или текста.</LI>
<LI>Вторая и остальные дорожки содержат MPEG-стрим секторами по 2324
байта, по одному пакету MPEG PS на сектор вместо файловой системы. Так
же как и дорожки аудио дисков, эти дорожки <B>не монтируются</B>. Так
как большинство фильмов именно на этой дорожке, попробуй сначало
<CODE>-vcd 2</CODE>.</LI>
<LI>Существуют VCD диски без первой дорожки (единственая дорожка без файловой
системы). Они просматриваются, но не монтируются.</LI>
</UL>
<P>Про файлы .DAT:</P>
<P>Файл в примерно 600 мегабайтов на первой дорожке не настоящий. Это так
называемый ISO-переход, для доступа к дугим дорожкам, не поддерживаемый
драйвером файловой системы iso9660 в оригинальном ядре Linux. Драйвер для
такого доступа входит в PowerDVD для Линукс. Альтернативами для копирования
VCD может послужить новый драйвер cdfs (не входит в официальное ядро)
который показывает дорожки на диске как имидж-файлы или
<A HREF="http://cdrao.sf.net/">cdrao</A>, приложения для побитного
чтения/копирования CD.</P>
</BODY>
</HTML>