DVD 播放 HOWTO

David Jao

2004-02-26

修订历史
修订 1.02004-02-26修订者:DJ
初始发布,由 LDP 审阅
修订 0.92004-02-07修订者:DJ
提交至 LDP
修订 0.12004-01-26修订者:DJ
首次公开版本

本文档描述了如何在装有 DVD 驱动器的 Linux 计算机上观看 DVD 电影。


目录
1. 简介
1.1. 版权和许可
1.2. 免责声明
1.3. 反馈
2. 系统准备
2.1. 硬件先决条件
2.2. 创建 /dev/dvd 符号链接
2.3. 设置 DVD 区域
2.4. X 视频叠加
2.5. 启用 DMA
3. 软件安装
3.1. Red Hat / Fedora
3.2. Debian
3.3. Slackware
3.4. Mandrake
3.5. SuSE
3.6. Gentoo
4. 软件使用
4.1. 通用原理:反交错、电视电影和帧率
4.2. 具体使用说明
5. 故障排除
6. 更多信息

1. 简介

在本文档中,我们描述了如何在 Linux 系统上观看 DVD 电影和视频。我们给出了实用、具体和直接的命令,以便在大多数流行的 Linux 发行版上快速启动并运行 DVD 播放。特别关注了流畅 DVD 视频播放所需的各种鲜为人知的性能优化。


1.1. 版权和许可

本文档,DVD 播放 HOWTO,版权归 2004 年 David Jao 所有。根据自由软件基金会发布的 GNU 自由文档许可证 1.2 版或任何更高版本的条款,授予复制、分发和/或修改本文档的许可;不包含不变部分,不包含封面文本,也不包含封底文本。许可证副本可在 https://gnu.ac.cn/copyleft/fdl.html 获取。

Linux� 是 Linus Torvalds 的注册商标。


1.2. 免责声明

对于本文档的内容不承担任何责任。使用本文档中的概念、示例和信息,风险自负。虽然这种情况不太可能发生,但本文档中可能存在错误和不准确之处,可能会对您的系统造成损害。作者对您因自身行为而造成的任何损害不承担任何责任。

仅仅是访问或观看 DVD 内容,或者处理为此目的编写的软件,在某些地区可能是非法的。作者对您的任何违反您所受司法管辖区法律的行为不承担任何责任。

所有版权均归其各自所有者所有,除非另有特别说明。在本文档中使用术语不应被视为影响任何商标或服务标志的有效性。命名特定产品或品牌不应被视为认可。


1.3. 反馈

非常欢迎问题、意见、建议和反馈,应发送至本文档的作者,地址为.


2. 系统准备

2.1. 硬件先决条件

流畅的 DVD 播放需要一定的处理能力。Linux 中的系统要求比 Windows 中略高,因为许多用于硬件加速视频播放的技术仅在 Windows 中有效。

我建议最低配置如下:

  • 700 MHz 或更高的 CPU,

  • 带有 X 视频叠加 支持的显卡

  • 启用 DMA 的 DVD 驱动器


2.2. 创建 /dev/dvd 符号链接

如果您还没有/dev/dvd符号链接,则运行(以 root 用户身份)命令
# ln -s /dev/hdc /dev/dvd
以创建从/dev/dvd到代表您的 DVD-ROM 驱动器的实际硬件设备的符号链接(在此示例中为/dev/hdc,但您应该将其替换为您的驱动器使用的实际设备文件)。/dev/dvd链接不仅仅是为了方便;本 HOWTO 中提到的大多数播放器软件都假定该链接存在。

如果您不知道您的 DVD-ROM 驱动器使用哪个设备名称,您通常可以在控制台或 shell 中使用命令 dmesg | grep DVD 在系统启动后立即找到它。


2.3. 设置 DVD 区域

所有 DVD 驱动器(除了 1999 年或之前制造的 RPC Phase I 驱动器)都在驱动器固件中强制执行 区域播放限制,因此应该设置为特定区域,然后才能播放来自该区域(且仅限该区域)的光盘。实际上,大多数 Linux DVD 播放软件可以绕过 DVD 驱动器的内置区域锁定,但软件需要额外的时间来破解区域锁定,如果可以,最好避免区域锁定的复杂性。

对于少数拥有 RPC-I 驱动器的读者,您无需执行任何操作:您的驱动器已经能够处理来自所有地理区域的 DVD。这些驱动器已经足够老了,以至于拥有其中一个驱动器的每个人可能都已经知道他们拥有一个。

对于大多数拥有 RPC-II 驱动器的读者,有几个选项可用:

  1. 如果您只观看来自一个区域的光盘,最简单的选择是使用 regionset 程序将您的 DVD 驱动器设置为正确的区域。

  2. 如果您想观看来自多个区域的光盘,您可以尝试在 firmware-flash.com 集合中找到适用于您 DVD 驱动器的固件升级。请注意,这些文件中的大多数都需要您启动到 DOS 或 Windows 才能安装。

  3. 您可以为您希望使用的每个 DVD 区域购买单独的 DVD 驱动器。DVD-ROM 驱动器的价格已经降到足够低的水平,使得这种策略可行。

  4. 当然,您可以什么都不做,而依靠 Linux 软件的内置能力来绕过区域限制。请注意,即使在这种情况下,您也应该使用 regionset 程序将驱动器设置为您将最常使用的区域,因为没有区域设置的 RPC-II 驱动器的行为就像所有区域都被锁定一样。


2.4. X 视频叠加

XFree86 视频叠加扩展是 XFree86 4.x 的一个记录非常不充分的标准功能,并且对于 Linux 下的高质量视频播放绝对必不可少。它是 Linux 中唯一广泛支持的硬件播放加速类型,并且是 Linux 系统上 DVD 播放最重要的配置元素。

要检查您是否拥有此扩展,请在 X 终端中键入 xvinfo。如果该命令返回几个屏幕的重要输出,那么恭喜您,您拥有硬件视频叠加,并且无需再担心它。

另一方面,如果 xvinfo 返回否定答案,例如
# xvinfo

X-Video Extension version 2.2
screen #0
 no adaptors present

那么这意味着您没有硬件叠加支持。请参阅 叠加故障排除 以获取有关如何使叠加支持正常工作的技巧。


2.5. 启用 DMA

DMA 驱动器访问对于 DVD 播放至关重要,因为它降低了光盘读取的 CPU 开销,并为视频播放释放了更多 CPU。在大多数系统上,为 DVD 驱动器启用 DMA 支持意味着从断断续续的播放到流畅播放的差异。

要查看是否已启用 DMA,请键入(以 root 用户身份)命令
# hdparm -d /dev/hdc
(替换/dev/hdc为您的 DVD 驱动器的实际设备名称)。如果 DMA 已经开启,那么您就完成了。否则,您应该通过键入 hdparm -d 1 /dev/hdc 来开启它。您可能希望将此命令添加到启动脚本中,例如/etc/rc.d/rc.local以确保每次计算机启动时 DMA 支持都处于活动状态。

如果 DMA 即使在您键入命令以开启它之后仍然无法开启,请参阅 DMA 故障排除 部分。


3. 软件安装

在这里,我们介绍了各种 Linux 发行版上 DVD 播放软件的安装。对于每个 Linux 发行版,我们都说明了如何将 MPlayerXineOgleVideoLAN 安装到系统上。这些是 Linux 中用于 DVD 播放的四种最流行的软件包。这些程序的使用说明将在下一节中给出。

阅读与您的 Linux 发行版对应的部分。下面给出的所有安装命令都应以 root 用户身份运行。


3.1. Red Hat / Fedora

如果您运行 Red Hat Linux 或 Fedora,您可以从 FreshRPMS 软件包存储库下载所有 DVD 播放软件。由于 DVD 播放需要很多软件包,因此安装所有软件包的最简单方法是使用 apt-get。以下是如何操作:

  1. 单击链接以找到与您的 Red Hat 版本匹配的 apt 版本

    下载适当的二进制 x86 RPM 软件包(在此示例中为apt-0.5.15cnc3-0.1.fr.i386.rpm),并使用 rpm 命令安装它,如下所示:
    # rpm -Uvh apt-0.5.15cnc3-0.1.fr.i386.rpm

  2. 运行命令
    # apt-get update
    # apt-get install mplayer xine ogle_gui
    
    以让 apt 为您安装所有内容。


3.1.1. 关于 VideoLAN 和 Red Hat 的特别说明

FreshRPMS 存储库包含videolan-client软件包,适用于 Red Hat 9 和 Red Hat 7.3,但不适用于 Red Hat 8 或 Fedora Core 1。如果您想在 Red Hat 9 或 Red Hat 7.3 上安装 VideoLAN,您只需键入 apt-get install videolan-client,然后让程序处理它。想要使用 VideoLAN 的 Fedora Core 1 用户需要访问 官方 VideoLAN Red Hat 页面,并按照那里的说明进行操作。我不建议 Fedora 用户安装 VideoLAN,因为 VideoLAN 软件包在很大程度上干扰了上一步安装的 FreshRPMS 软件包。

似乎没有简单的方法可以在 Red Hat 8 上安装 VideoLAN。


3.2. Debian

这些说明仅适用于 Debian 稳定版(截至撰写本文时为 3.0r1)——假设如果您运行测试版或不稳定版,那么您应该已经知道自己在做什么。

确保您的/etc/apt/sources.list文件中包含以下行:
deb http://hpisi.nerim.net/ stable main
deb http://www.interq.or.jp/libra/oohara/debian-unofficial/ ./
deb http://download.videolan.org/pub/videolan/debian woody main

(第一行用于 MPlayer,第二行用于 Xine CSS 插件,第三行用于 VideoLAN。)然后运行命令

# apt-get update
# apt-get install mplayer-686 mplayer-fonts mplayer-doc ogle
# /usr/share/doc/ogle/examples/install-css.sh
# apt-get install xine-ui xine-d5d-plugin xine-d4d-plugin gnome-vlc libdvdcss2

3.3. Slackware

Slackware 附加软件包的最佳站点是 http://www.linuxpackages.net/。您可以使用他们的搜索引擎来查找和下载 Ogle、Xine、MPlayer、libdvdcss、libdvdnav、libdvdread、lame 和 a52dec 软件包,并从网站下载。将软件包放入单个目录,并运行 pkgtool 以将软件包安装到您的系统上。

对于 VideoLAN,您将必须从源代码构建它,因为 LinuxPackages 网站上还没有预编译的软件包。更糟糕的是,Slackware 9.1 附带的 mpeg2dec 版本太旧,无法与 VideoLAN 一起使用,因此您还必须编译更新版本的 mpeg2dec。

也就是说,如果您仍然想安装 VideoLAN,那么请下载 mpeg2decVideoLAN 的最新源代码软件包,并运行以下命令。请注意,您必须禁用 VideoLAN 构建的 ffmpeg 支持,因为 Slackware MPlayer 软件包省略了 ffmpeg 所需的一些头文件。

# tar xzvf mpeg2dec-0.4.0.tar.gz
# cd mpeg2dec-0.4.0
# ./configure 
# make 
# make install 
# cd ..
# tar xzvf vlc-0.7.0.tar.gz
# cd vlc-0.7.0
# ./configure --disable-ffmpeg
# make 
# make install 

3.4. Mandrake

Mandrake 用户可以从 Penguin Liberation Front 网站获取所有视频程序的软件包。最快的方法是访问 Easy Urpmi 网站,并按照说明生成您需要在 urpmi 中键入的命令列表,以进行 PLF 访问。然后,您应该键入网站返回的命令,以设置您的系统以进行 PLF 访问。

设置 PLF 访问后,键入
# urpmi.update -a
# urpmi mplayer libdvdcss2 xine-ui ogle ogle_gui vlc
以安装所有视频程序。


3.5. SuSE

SuSE 附带的 YaST 软件包程序仅适用于官方软件包,并且没有官方软件包支持 DVD。因此,您将必须手动安装所有 DVD 软件的软件包。

SuSE 的 MPlayer 和 Xine 软件包可在 PackMan 站点上找到。对于 MPlayer,您需要在该页面上找到 MPlayer、lzo 和 xvid 软件包,以及每个软件包页面上列出的 “另外需要的二进制软件包”。SuSE 9.0 用户应注意,截至撰写本文时,SuSE 9.0 的 MPlayer 软件包存在损坏的libsmbclient.so.0依赖项。您可以使用以下命令解决此问题:
# rpm -Uvh --nodeps MPlayer-1.0pre3-pm.1.i686.rpm
# ln -s libsmbclient3.so.0 /usr/lib/libsmbclient.so.0

要安装 Xine,您应该从 PackMan 下载并安装 libxine1-dvd 和 xine-ui 软件包。Xine 中的加密 DVD 支持还需要从 VideoLAN 站点安装 libdvdcss

可以使用 Ogle 站点的 Red Hat RPM 安装 Ogle。想要安装 Ogle_gui 软件包的 SuSE 9.0 用户还需要从 SuSE 8.2 安装 orbitgdk-pixbufgnome-libslibglade

VideoLAN 用户需要从 VideoLAN 站点下载 Red Hat RPM,并使用 rpm --nodeps 强制安装它们。VideoLAN 软件包还需要来自 SuSE 8.2 的 XFree86-compat-libsfreetype 才能运行。


3.6. Gentoo

要使用的基本命令是
# emerge sync
# USE="dvd mmx sse" emerge mplayer xine-ui vlc ogle-gui

如果您有 AMD 处理器,您应该键入 USE="dvd mmx 3dnow" 而不是使用sse标志。Athlon XP 所有者可以使用3dnowsse标志一起使用。


4. 软件使用

尽管我已尽力使本 HOWTO 专注于实用建议而不是抽象理论,但有必要对电视视频有一些最基本的背景知识,以便了解如何在 Linux 下获得最佳视频质量。


4.1. 通用原理:反交错、电视电影和帧率

普通电视视频是隔行扫描的,这意味着奇数扫描线首先被记录(和显示),然后是偶数扫描线,然后再是奇数扫描线,然后再是偶数扫描线,等等。每条单独的线每秒显示 30 次(或 25 次,取决于您居住的地方),但由于隔行扫描,电视图像整体每秒刷新 60 次(或 50 次),每次只刷新总线数的一半。

通常,对于隔行扫描的运动图像,在不产生伪影的情况下,无法完美地重建任何单个视频帧。这一点非常重要,需要重复一遍:无法完美地重建任何单个帧!原因是奇数行记录到录像带上时,相对于偶数行存在半帧的时间偏移。如果视频画面是静止的,则此时间偏移没有问题,但对于运动图像,它会导致一半的线相对于另一半发生位移。在电视屏幕上,您看不到这种位移,因为电视屏幕(除了高端 HDTV 显示器)质量很差,以至于伪影不可见。但是,在计算机屏幕上,这种位移非常明显,并导致视频中出现梳状伪影。您可以在 隔行扫描部分Luke's Video Guide 中看到隔行扫描伪影的屏幕截图。


4.1.1. 如何修复隔行扫描伪影

消除隔行扫描伪影的过程称为反交错。不幸的是,所有反交错技术在某种程度上都是不完美的,并且没有一种方法在所有情况下都能发挥最佳效果。因此,尝试所有不同的可能反交错设置以查看哪一种最适合特定光盘非常重要。

MPlayer 用户可以通过在命令行键入 mplayer -pphelp 来获取反交错选项列表。找到您要使用的选项,然后使用 -vf pp=<option> 语法来激活该选项。例如,我通常使用lb选项,该选项使用命令:mplayer -vf pp=lb,后跟您通常用于播放 DVD 的任何其他选项。

VideoLAN 用户可以右键单击电影以获取反交错选项列表(在 视频设置反交错 下,具体取决于程序版本)。

Xine 在配置面板中有一个反交错选项列表;要访问它,请右键单击电影窗口,打开 设置->设置 对话框,将 “配置经验级别” 设置为 “高级”,然后在 “视频” 选项卡下查找 “软件反交错方法”

Ogle 没有反交错支持,因此不建议使用 Ogle 观看隔行扫描视频。


4.1.2. 电视电影视频

本节仅适用于 NTSC 格式的视频(在北美、东亚和拉丁美洲部分地区使用)——PAL 用户(世界其他地区)可以跳过。

关于上述所有关于隔行扫描的讨论的一个例外是电视电影视频的情况。简而言之,电视电影是一种特殊的隔行扫描,仅对戏剧(即电影)电影和某些形式的手绘动画节目进行。电视电影的特别之处在于它通常可以被完美地撤消。详细信息过于复杂,无法在此处解释,但如果您好奇,可以在 Luke's Video GuideBob Niland's FAQs 中阅读相关内容。

撤消电视电影伪影的过程称为反向电视电影。好消息是,如果正确地进行反向电视电影处理,则可以完全恢复源视频的原始视频质量,而不会产生任何伪影。坏消息是,MPlayer 是目前世界上唯一可以执行反向电视电影处理的播放器程序。

要在 MPlayer 中执行反向电视电影处理,只需添加-vf ivtc选项到 MPlayer 命令。如果您正在观看您知道源自戏剧发行的电影,或者您正在观看动画节目,则此选项是正确的选择。警告:此选项非常占用 CPU 资源。您至少需要 1 GHz 的处理器才能考虑执行此操作。


4.1.3. 为什么 Windows 用户不必处理所有这些?

Windows DVD 播放器隐藏了 DVD 播放的大部分复杂性,并在播放 DVD 时退回到最低共同点。结果是您获得的播放质量在各种情况下都不错,但并非总是在任何给定情况下都能达到最佳效果。例如,世界上没有一款 Windows DVD 播放器像 MPlayer 那样具有反向电视电影滤镜,因此电视电影素材在 Windows 中的外观始终比 Linux 下的 MPlayer 差得多。


4.2. 具体使用说明

在这里,我们给出了在各种播放器程序中启动基本 DVD 播放的具体说明。这些命令仅涵盖操作每个程序的基本步骤。我们鼓励您参考每个程序的手册页以获取更多说明。

在尝试播放之前,将您要播放的 DVD 放入驱动器中。


4.2.1. MPlayer

键入 mplayer dvd://1 以开始播放光盘上的标题 #1。要播放其他标题编号,请用适当的数字替换 1

旧版本的 MPlayer,例如 Debian 中使用的版本,需要命令 mplayer -dvd 1。在某些情况下,您还必须显式添加选项-vo xv才能使 MPlayer 使用硬件视频叠加端口。

MPlayer 的字幕和音频选项必须在命令行中指定。格式为-alang NN-slang NN其中NN是您想要的语言的两位字母语言代码。例如,要播放带有英文字幕的日语音频,请键入
# mplayer dvd://1 -alang ja -slang en
在命令行中。


4.2.2. Xine

只需在命令提示符下键入 xine 即可启动程序。

首次启动程序时,它将显示一个配置屏幕,其中包含许多选项。在大多数情况下,您可以将所有选项保留为默认值。

该程序有一个图形控制台,底部有一行标记按钮。按 DVD 按钮开始播放 DVD。(但是,如果您的 Xine 版本有 D5D 按钮,请改用它。)

Xine 支持 DVD 菜单,因此您可以像通常那样通过光盘自己的菜单设置语言或字幕选项。


4.2.3. Ogle

键入 ogle 以启动程序。根据您拥有的程序版本,它可能会自动开始播放 DVD。如果它没有这样做,请单击 文件 菜单,然后选择 打开光盘 以开始读取光盘。

与 Xine 一样,Ogle 支持 DVD 菜单来设置语言或字幕选项。


4.2.4. VideoLAN

使用 vlc 命令调出 VideoLAN GUI,然后单击光盘图标以打开光盘并开始播放。右键单击播放窗口以调出选项菜单,其中包括反交错、音频和字幕选项。


5. 故障排除

5.1. xvinfo 返回 “no adaptors present”
5.2. xvinfo 工作正常,但叠加输出混乱
5.3. DMA 无法工作
5.4. 视频播放断断续续
5.5. 声音播放断断续续
5.6. 区域外光盘播放混乱
5.7. 区域外光盘播放时挂起

5.1. xvinfo 返回 “no adaptors present”

确保您正在运行 XFree86 4.1 或更高版本。您可以通过在命令提示符下键入 X -version 来查找您的 XFree86 版本。

为您的显卡使用合适的驱动程序。某些 Linux 发行版默认使用通用的 XFree86 VESA 驱动程序,而不是您的显卡的特定驱动程序。您需要使用特定于您显卡的硬件驱动程序才能获得硬件叠加支持。

5.2. xvinfo 工作正常,但叠加输出混乱

叠加输出混乱或丢失的问题通常意味着您的显卡 RAM 不足以同时容纳常规桌面显示和视频叠加显示。通常,您需要比正常情况下多两倍的显卡 RAM 才能在给定的视频分辨率下使用硬件视频叠加。在某些情况下,由于显卡中的内部缓冲,您甚至可能需要 3 到 5 倍的 RAM。

降低显卡 RAM 需求的唯一简单方法是在播放视频时切换到较低的视频分辨率。

5.3. DMA 无法工作

如果对您的 DVD 驱动器使用命令 hdparm -d1 返回如下消息,您可以判断 DMA 是否已损坏:
# hdparm -d1 /dev/hda
 
/dev/hda:
 setting using_dma to 1 (on)
 HDIO_SET_DMA failed: Operation not permitted
 using_dma    =  0 (off)

解决此问题的唯一方法是编译一个内核,其中包含对您的特定芯片组的 DMA 支持。解释如何编译内核超出了本 HOWTO 的范围,但与 DMA 支持特别相关的步骤如下:

  1. 下载最新的内核,以便您有最大的机会在您的芯片组上获得 DMA 支持。

  2. 解压缩您的内核,并在内核构建目录中键入 make xconfig。在 “ATA/IDE/MFM/RLL support” 下,选择 “IDE, ATA, and ATAPI Block devices”,并启用 “Generic PCI bus-master DMA support”“Use DMA by default when available”

  3. 在同一页面上,有几十个特定于芯片组的 DMA 驱动程序向下延伸了几个屏幕。找到并选择一个与您的芯片组相关的驱动程序(如果有)。例如,如果您有一个基于 AMD Athlon 的 VIA 芯片组,请启用 “VIA82CXXX chipset support” 项。

有关编译内核的更多信息,请参阅 Kernel HOWTO 以及 Linux Ultra-DMA Mini-Howto

5.4. 视频播放断断续续

在足够快的计算机(例如,超过 1 GHz)上,视频播放断断续续通常意味着您的叠加支持或 DMA 支持配置错误。请参阅之前的故障排除项。

在非常慢的计算机(例如,0-500 MHz)上,除了硬件升级之外,您无能为力,无法使 DVD 播放良好运行。

对于临界计算机(介于两者之间的任何计算机),您可以通过从内核 2.2 升级到内核 2.4 并使用像 MPlayer 这样的 SSE 优化播放器程序来获得适度的(约 10%)性能提升。

最后,如果所有其他方法都失败了,请使用选项 mplayer -framedrop 运行 MPlayer,以修补视频播放中的偶尔故障。

5.5. 声音播放断断续续

声音播放问题的最常见原因是声卡不支持 48 kHz 音频播放。对于属于此类的人,我强烈建议您购买新的声卡。即使是廉价的 PCI 声卡也可以为您提供音质的显着提升,其成本低于两张 DVD 的成本。

如果不行,您可以通过不使用声音守护程序(如 ESounD 或 aRts)并将 DVD 音频直接播放到 OSS 驱动程序来减轻声音播放系统的负载。要使用 MPlayer 执行此操作,请运行 mplayer -ao=oss 以及您通常使用的任何其他选项。

5.6. 区域外光盘播放混乱

过去,这里讨论的大多数程序的旧版本在解密区域外光盘时都遇到问题。解密失败的结果看起来像您看到的彩色视频噪声。

升级到任何程序的最新可用版本应该可以解决此问题。

5.7. 区域外光盘播放时挂起

在程序挂起时观察 DVD 驱动器的访问指示灯。指示灯是否仍在以访问模式闪烁?如果是(通常是),则表示程序仍在解密光盘的中间。

解密 DVD 涉及进行相当大规模的计算工作,以恢复密钥。计算机花费五分钟甚至十分钟来解密单个 DVD 密钥并不罕见。

区域内光盘永远不会出现此问题,因为 DVD 驱动器固件会自动解密与驱动器自身区域匹配的光盘。


6. 更多信息