# CD/DVD用法

## CD/DVD驱动器

现代的CD-ROM驱动器能达到很高的速度，然而一些CD-ROM也可以在降低速度下运行。 有几条原因可能使你考虑改变CD-ROM的读盘速度：

- 有报告称告诉读取可产生错误，尤其是制作恶劣的CD-ROM。降低速度可以防止这些 情况下的数据丢失。

- 许多CD-ROM驱动器有很讨厌的噪音，低俗可以降低这些噪音。

### Linux

你可以使用`hdparm`，`setcd`或 `cdctl`以减慢IDE CD-ROM的驱动器。使用方法如下：

    hdparm -E [speed] [cdrom device]

    setcd -x [speed] [cdrom device]

    cdctl -bS [speed]

如果你使用SCSI模拟，你必须把设置应用到真正的IDE驱动器，不是被 模拟的SCSI设备。

如果你有root权限，下面的命令也可能有帮助：

    echo file_readahead:2000000 > /proc/ide/[cdrom device]/settings

这将预读取的文件设置为2MB，这对有划痕的CD-ROM有帮助。如果你设置 的太大，驱动器会不断来回转动，极大降低性能。 推荐你使用`hdparm`调整你的CD-ROM：

    hdparm -d1 -a8 -u1 [cdrom device]

这开启了DMA读取，预读，以及IRQ遮盖（对于详细解释阅读 `hdparm`man页）。

请阅读 "`/proc/ide/[cdrom device]/settings`" 以很好调整你的CD-ROM。

SCSI驱动器没有统一设置参数的方法（你知道？告诉我们！），有一个工具 Plextor SCSI drives可参照。

### FreeBSD

speed:

    cdcontrol [-f device] speed [speed]

DMA:

    sysctl hw.ata.atapi_dma=1

## DVD回放

对于完整的可用选项，请阅读man页。 播放标准DVD的语法如下：

    mplayer dvd://<track> [-dvd-device <device>]

例如：

    mplayer dvd://1 -dvd-device /dev/hdc

如果你使用dvdnav支持编译MPlayer，语法是一样的，但你要用 dvdnav://而不用dvd://。

默认的DVD设备是`/dev/dvd`。如果你的设置不同，创建 个连接或者在命令行中用`-dvd-device`指定正确的设备。

对于DVD回放及解密，MPlayer使用 libdvdread及libdvdcss 这两个库在 MPlayer的源码树中，你不必单独安装。你也可以使用 全系统可用的版本，但这种做法不被推荐，因为它能导致错误，库不兼容以及更慢的 速度。

对于DVD解码问题，尝试禁用supermount，或者其它相应特性。一些RPC-2驱动器 可能还需要设置区域代码。

### DVD结构

DVD磁盘的每个簇有带有ECC/CRC的2048字节。每个轨上采用UDF文件格式，包含各种文 件（小的.IFO及.BUK文件以极大的（1GB）的.VOB文件）。它们是真正的文件能从被挂 载的未加密的DVD中复制/播放。

.IFO文件包含电影的浏览信息（章/标题/视角图，语言表等），它们被用于读及解析 .VOB的内容（影片）。.BUK文件是它们的备份。他们到处使用簇， 所以你需要指定光盘上真正的簇地址以完成DVD浏览或对内容进行解密。

DVD支持通过原始的对设备基于簇的访问。不幸的是，（在Linux中）要得到一个文件 的簇地址，你必须是超级用户。那就是我们不使用内核的文件系统的原因，我们在用 户层对此进行了重新实现。libdvdread 0.9.x完成了此项 工作。我们并不需要内核中的UDF文件系统驱动因为它们已经有了自己内置的UDF文件

有时`/dev/dvd`对用户不可读，所以 libdvdread的作者实现了一个模拟层，其实现了将簇地址 提交到文件名+偏移量中，以模拟在挂载的文件系统甚至是硬盘上的直接访问。

libdvdread对于直接访问甚至支持挂载点而不是设备名并 检查`/proc/mounts`以得到设备名称。其被开发在Solaris上， 在那系统上设备名是动态分配的。

### DVD解密

DVD解密通过libdvdcss完成。这个方法可以通过 `DVDCSS_METHOD`环境变量设置，具体细节参考man页。

RPC-1 DVD驱动器只使用软件对区域设置进行保护。RPC-2驱动器有一个硬件保护，只准 许做5次更改。你可能需要或被推荐把firmware升级到RPC-1，如果你有个RPC-2 DVD驱动 器。你可以在因特网上寻找firmware的升级， 此firmware论坛 对你的搜索可能是个好起点。如果没有针对你的设备的firmware升级，使用 区域工具 来设置你DVD的区域码（在Linux下）。 警告：你只可以设置5次区域。

## VCD回放

对于可用选项的详细列表，请阅读man页。对于标准视频CD (VCD)的语法如下：

    mplayer vcd://<track> [-cdrom-device <device>]

例如：

    mplayer vcd://2 -cdrom-device /dev/hdc

默认的VCD设备是`/dev/cdrom`。如果你的设置不同，建 立个连接或者在命令行通过`-cdrom-device`选项指定正确设备。

至少Plextor及一些Toshiba SCSI CD-ROM驱动器对读取VCD有着恐怖的性能。这是因为 针对这些设备的CDROMREADRAW ioctl没有完成。如果你有 SCSI编程知识，请帮我们实现对SCSI VCD的支持。

同时，你可以通过 In the meantime you can extract data from VCDs with readvcd 从VCD提取数据并用MPlayer播放最终文件。

### VCD结构

视频CD (VCD)由CD-ROM XA簇组成，例如CD-ROM 模式 2 表格1及2轨：

- 第一个轨道处于模式2表格2格式下，这意味着他使用L2错误恢复。此轨道含有 ISO-9660文件系统，其拥有2048字节/簇。此文件系统含有VCD属性数据信息， 以及经常用于菜单上的静态桢。对菜单的MPEG块也能存于这第一个轨道上，但 MPEG不得不被分散成一系列的150个簇的块。ISO-9660文件系统可以包含其它 对于VCD操作不重要的文件或程序。

- 第二及余下的轨道通常是原始的2324字节/簇的MPEG(影片)轨道，每个簇包含 一个MPEG PS数据包。这些处于模式2表格1格式，所以他们没簇存储更多数据， 损失了一些纠错。在一个VCD的第一个轨道后也包含CD-DA轨道也是合法的。在 一些操作系统中，有些技巧是这些非ISO-9660轨道出现在文件系统中。在另外 一些操作系统中如GNU/Linux，这还（未）被实现。在此，MPEG数据 不能被挂载。因为大部分电影在这种轨道 内，你应先试`vcd://2`。

- 还存在没有第一个轨道的VCD（单一轨道根本没有文件系统）。他们仍然是可 播放的，但不能被挂载。

- 视频CD的定义被称为Philips"白皮书"，它通常并不出现在网上因为它要从 Philips购买。对于视频CD更详细的资料可从 vcdimager文档 获取。

### 关于.DAT文件

被挂载的VCD上处于第一个轨道上的~600MB的文件并不是真正的文件！它是所谓的ISO网 关，其被创建以便Windows处理这些轨道（Windows根本不允许应用程序直接访问原始设 备）。在Linux下你不能复制或播放这些文件（它们包含垃圾）。在Windows下，这是可 能的因为他的iso9660驱动模拟了在文件内直接读取轨道。要播放.DAT文件，你需要内核 驱动，岂可再PowerDVD的Linux版本中找到。其有一个更改的iso9660文件系统 (`vcdfs/isofs-2.4.X.o`)驱动，你可以通过MPlayer 复制甚至播放.DAT文件。但在Linux内核的标准的iso9660驱动上它不能工作！另外使用 使用`vcd://`。对于VCD复制另外的方法是内核新的 cdfs驱动（不是 官方内核的一部分）其将CD会话显示为镜像文件及cdrdao， 一个逐位的ＣＤ抓轨／复制程序。