4.1. Дисководы CD-ROM

Из Linux'овской документации:

Некоторые CD-ROM'ы способны регулировать скорость чтения. Несколько аргументов в пользу использования этой возможности:

Рекомендуется использования программ 'hdparm' или 'setcd'.

    hdparm -E [скорость] [дисковод]

    setcd -x [скорость] [дисковод]

Альтернативный метод:

    echo current_speed:4 >/proc/ide/[дисковод]/settings

но для этого требуются привилегии администратора. Следующая команда тоже может быть полезна:

    echo file_readahead:2000000 >/proc/ide/[дисковод]/settings

Таким образом предварительно cчитывается 2 мегабайта (полезно при дисках с царапинами). Если поставить слишком высокое значение, то постоянный запуск и остановка вращения диска драматически снизят эффективность. Предлагается также использовать программу 'hdparm':

    hdparm -d1 -a8 -u1 [дисковод]

Таким образом включается непосредственный доступ к памяти[DMA], предварительное чтение и размаскировка IRQ (если это непонятно, прочти man-страницу 'hdparm')

Можешь поэкспериментировать файлом /proc/ide/[дисковод]/settings для прочих настроек.

FreeBSD:

    Скорость: cdcontrol [-f дисковод] speed [скорость]

    DMA: sysctl hw.ata.atapi_dma=1

4.2. Просмотр DVD

Полный список возможных опций можно прочитать в man.

Новая поддержка DVD (mpdvdkit2)

MPlayer использует библиотеки libdvdread и libdvdcss для расшифровки и просмотра DVD. Эти две программы находятся в субдиректории libmpdvdkit/, так что отдельно устанавливать их не нужно (и бесполезно). Мы выбрали такое решение потому, что нам пришлось исправить ошибку в libdvdread и добавить патч к libdvdcss для поддержки сохранения взломанных ключей CSS, что в свою очередь предотвращает повторного взлома ключа при каждом просмотре, существенно увеличивая скорость.

MPlayer способен использовать libdvdread и libdvdcss установленные отдельно, но такое решение не рекомендуется, так как может приводить к ошибкам, несовместимости и потере скорости.

Навигация DVD (dvdnav)

Работы по поддержке libdvdnav проводились, но эта часть кода никогда не была доведена до ума, и на данном этапе заброшена, не работает.

Старая поддержка DVD - ОПЦИОНАЛЬНО

Это может оказаться полезным, например, при просмотре зашифрованных VOB-файлов с жесткого диска. Cкомпилируй и установи libcss (версию 0.0.1, не в коем случае не более позднюю). Если MPlayer ее не обнаружит, добавь -csslib /path/to/libcss.so. Для использования необходимы привилегии администратора или suid root на выполняемом файле.

Структура DVD

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

Файлы .IFO содержат информацию для навигации (раздел/ролик/угол/язык и пр.), необходимую для интерпретации содержания .VOB (кино). Файлы .BUK — их дубли. Эти файлы содержат адреса в секторах, так что для исполнения навигации и расшифровки DVD, нужен доступ к файлам на уровне секторов.

Из-за этого старая поддержка DVD нуждается в cмонтированной файловой системе и посекторному доступу к устройству. К сожалению, для этого нужны привилегии администратора (под Linux). Проблема решается двумя способами:

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

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

Устройство DVD по умолчанию — /dev/dvd. Если у тебя это не так, то сделай символический линк или добавь правильное название в командной строке после ключа -dvd-device.

DVD аутентификация

Это, как и взлом ключей зашифрованных DVD происходит при помощи отпатченого libdvdcss. Выбор метода осуществляется через переменную окружения DVDCSS_METHOD. Возможные значения: key, disk, или title.

Если ничего не предписано, делаются следующие попытки (по умолчанию: key, title request):

  1. bus key: этот ключ вырабатывается в процессе аутентификации (множество ioctl вперемешку с обменами ключами — криптографические процедуры), и при его помощи шифруются ключи диска и роликов передаваемые по открытой шине (во избежания подслушивания). Он необходим для получения и предварительной расшифровки ключа диска.
  2. cached key: MPlayer подбирает подходящий взломанный ключ из директории ~/.mplayer/DVDKeys (быстро ;-)
  3. key: При отсутствии подходящего ключа, MPlayer пытается расшифровать диск при помощи набора ключей проигрывателя.
  4. disk: В случае неудачи (на пример при отсутствии ключей проигрывателя) ключ диска форсируется. Этот метод интенсивно использует процессор и нуждается в 64 мегабайтах памяти (хэш-таблица из 16 миллионов 32-разрядных записей). Работает наверняка (но медленно).
  5. title request: Используя ключ диска MPlayer получает зашифрованные ключи роликов находящиеся в скрытых секторах при помощи ioctl(). Региональная защита проигрывателей RPC-2 осуществляется именно на этом этапе; может не сработать на подобных проигрывателях. При удачи, ключи роликов расшифровываются при помощи ключа диска и ключа шины.
  6. title: Данный метод используется если title request не срабатывает. Он не опирается на обмен ключами с дисководом. Ключи роликов непосредственно атакуются криптографически, исходя из избыточности расшифрованного содержания .VOB файлов. Метод также известен под названиями "атака с известным открытым текстом" или "DeCSSPlus". В редких случаях этот метод проваливается, по причине недостаточности зашифрованного содержания для статистической атаки или изменения ключа в середине ролика. Это единственный метод расшифровать содержания DVD на жестком диске или на диске из неподходящего региона на проигрывателе RPC-2. (медленный метод)

С дисководами RPC-1, региональная защита осуществляется программно. Дисководы RPC-2 защищены аппаратными средствами, разрешающими менять регион всего 5 раз. Рекомендуется перегрузить RPC-1 в firmware если у тебя дисковод RPC-2 с этого сайта. Если для твоего дисковода нет апгрейда, используй для изменения региона дисковода regionset (под Linux). Осторожно: Изменить регион можно всего 5 раз.

4.3. просмотр VCD

Полный список возможных опций можно прочитать в man. Синтаксис для обычного Видео-CD (VCD):

mplayer -vcd <дорожка> [-cdrom-device <устройство>]

Пример: mplayer -vcd 2 -cdrom-device /dev/hdc

Устройство VCD по умолчанию — /dev/cdrom. Если у тебя это не так, то сделай символический линк или добавь правильное название в командной строке после ключа -cdrom-device.

Замечание: Некоторые дисководы SCSI (по крайней мере Plextor и некоторые изделия Toshiba) работают ужасно плохо при чтении VCD. Это объясняется неполным исполнением ioctl CDROMREADRAW для этих дисководах. Если ты имеешь некоторые познания в сфере программирования SCSI, пожалуйста помоги нам в исполнении общей поддержки SCSI для VCD.

Структура VCD

Диски VCD состоят из одной или нескольких дорожек:

Про файлы .DAT:

Файл в примерно 600 мегабайтов на первой дорожке не настоящий. Это так называемый ISO-переход, для доступа к другим дорожкам, не поддерживаемый драйвером файловой системы iso9660 в оригинальном ядре Linux. Драйвер для такого доступа входит в PowerDVD для Linux. Альтернативами для копирования VCD может послужить новый драйвер cdfs (не входит в официальное ядро) который показывает дорожки на диске как файлы образов или cdrao, приложения для побитного чтения/копирования CD.