2004-02-26
修订历史 | ||
---|---|---|
修订 1.0 | 2004-02-26 | 修订者:DJ |
初始发布,由 LDP 审阅 | ||
修订 0.9 | 2004-02-07 | 修订者:DJ |
提交至 LDP | ||
修订 0.1 | 2004-01-26 | 修订者:DJ |
首次公开版本 |
在本文档中,我们描述了如何在 Linux 系统上观看 DVD 电影和视频。我们给出了实用、具体和直接的命令,以便在大多数流行的 Linux 发行版上快速启动并运行 DVD 播放。特别关注了流畅 DVD 视频播放所需的各种鲜为人知的性能优化。
本文档,DVD 播放 HOWTO,版权归 2004 年 David Jao 所有。根据自由软件基金会发布的 GNU 自由文档许可证 1.2 版或任何更高版本的条款,授予复制、分发和/或修改本文档的许可;不包含不变部分,不包含封面文本,也不包含封底文本。许可证副本可在 https://gnu.ac.cn/copyleft/fdl.html 获取。
Linux� 是 Linus Torvalds 的注册商标。
如果您还没有/dev/dvd符号链接,则运行(以 root 用户身份)命令
# ln -s /dev/hdc /dev/dvd |
如果您不知道您的 DVD-ROM 驱动器使用哪个设备名称,您通常可以在控制台或 shell 中使用命令 dmesg | grep DVD 在系统启动后立即找到它。
所有 DVD 驱动器(除了 1999 年或之前制造的 RPC Phase I 驱动器)都在驱动器固件中强制执行 区域播放限制,因此应该设置为特定区域,然后才能播放来自该区域(且仅限该区域)的光盘。实际上,大多数 Linux DVD 播放软件可以绕过 DVD 驱动器的内置区域锁定,但软件需要额外的时间来破解区域锁定,如果可以,最好避免区域锁定的复杂性。
对于少数拥有 RPC-I 驱动器的读者,您无需执行任何操作:您的驱动器已经能够处理来自所有地理区域的 DVD。这些驱动器已经足够老了,以至于拥有其中一个驱动器的每个人可能都已经知道他们拥有一个。
对于大多数拥有 RPC-II 驱动器的读者,有几个选项可用:
如果您只观看来自一个区域的光盘,最简单的选择是使用 regionset 程序将您的 DVD 驱动器设置为正确的区域。
如果您想观看来自多个区域的光盘,您可以尝试在 firmware-flash.com 集合中找到适用于您 DVD 驱动器的固件升级。请注意,这些文件中的大多数都需要您启动到 DOS 或 Windows 才能安装。
您可以为您希望使用的每个 DVD 区域购买单独的 DVD 驱动器。DVD-ROM 驱动器的价格已经降到足够低的水平,使得这种策略可行。
当然,您可以什么都不做,而依靠 Linux 软件的内置能力来绕过区域限制。请注意,即使在这种情况下,您也应该使用 regionset 程序将驱动器设置为您将最常使用的区域,因为没有区域设置的 RPC-II 驱动器的行为就像所有区域都被锁定一样。
XFree86 视频叠加扩展是 XFree86 4.x 的一个记录非常不充分的标准功能,并且对于 Linux 下的高质量视频播放绝对必不可少。它是 Linux 中唯一广泛支持的硬件播放加速类型,并且是 Linux 系统上 DVD 播放最重要的配置元素。
要检查您是否拥有此扩展,请在 X 终端中键入 xvinfo。如果该命令返回几个屏幕的重要输出,那么恭喜您,您拥有硬件视频叠加,并且无需再担心它。
另一方面,如果 xvinfo 返回否定答案,例如
# xvinfo X-Video Extension version 2.2 screen #0 no adaptors present |
DMA 驱动器访问对于 DVD 播放至关重要,因为它降低了光盘读取的 CPU 开销,并为视频播放释放了更多 CPU。在大多数系统上,为 DVD 驱动器启用 DMA 支持意味着从断断续续的播放到流畅播放的差异。
要查看是否已启用 DMA,请键入(以 root 用户身份)命令
# hdparm -d /dev/hdc |
如果 DMA 即使在您键入命令以开启它之后仍然无法开启,请参阅 DMA 故障排除 部分。
在这里,我们介绍了各种 Linux 发行版上 DVD 播放软件的安装。对于每个 Linux 发行版,我们都说明了如何将 MPlayer、Xine、Ogle 和 VideoLAN 安装到系统上。这些是 Linux 中用于 DVD 播放的四种最流行的软件包。这些程序的使用说明将在下一节中给出。
阅读与您的 Linux 发行版对应的部分。下面给出的所有安装命令都应以 root 用户身份运行。
如果您运行 Red Hat Linux 或 Fedora,您可以从 FreshRPMS 软件包存储库下载所有 DVD 播放软件。由于 DVD 播放需要很多软件包,因此安装所有软件包的最简单方法是使用 apt-get。以下是如何操作:
单击链接以找到与您的 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 |
运行命令
# apt-get update # apt-get install mplayer xine ogle_gui |
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。
这些说明仅适用于 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 |
Slackware 附加软件包的最佳站点是 http://www.linuxpackages.net/。您可以使用他们的搜索引擎来查找和下载 Ogle、Xine、MPlayer、libdvdcss、libdvdnav、libdvdread、lame 和 a52dec 软件包,并从网站下载。将软件包放入单个目录,并运行 pkgtool 以将软件包安装到您的系统上。
对于 VideoLAN,您将必须从源代码构建它,因为 LinuxPackages 网站上还没有预编译的软件包。更糟糕的是,Slackware 9.1 附带的 mpeg2dec 版本太旧,无法与 VideoLAN 一起使用,因此您还必须编译更新版本的 mpeg2dec。
也就是说,如果您仍然想安装 VideoLAN,那么请下载 mpeg2dec 和 VideoLAN 的最新源代码软件包,并运行以下命令。请注意,您必须禁用 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 |
Mandrake 用户可以从 Penguin Liberation Front 网站获取所有视频程序的软件包。最快的方法是访问 Easy Urpmi 网站,并按照说明生成您需要在 urpmi 中键入的命令列表,以进行 PLF 访问。然后,您应该键入网站返回的命令,以设置您的系统以进行 PLF 访问。
设置 PLF 访问后,键入
# urpmi.update -a # urpmi mplayer libdvdcss2 xine-ui ogle ogle_gui vlc |
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 安装 orbit、gdk-pixbuf、gnome-libs 和 libglade。
VideoLAN 用户需要从 VideoLAN 站点下载 Red Hat RPM,并使用 rpm --nodeps 强制安装它们。VideoLAN 软件包还需要来自 SuSE 8.2 的 XFree86-compat-libs 和 freetype 才能运行。
尽管我已尽力使本 HOWTO 专注于实用建议而不是抽象理论,但有必要对电视视频有一些最基本的背景知识,以便了解如何在 Linux 下获得最佳视频质量。
普通电视视频是隔行扫描的,这意味着奇数扫描线首先被记录(和显示),然后是偶数扫描线,然后再是奇数扫描线,然后再是偶数扫描线,等等。每条单独的线每秒显示 30 次(或 25 次,取决于您居住的地方),但由于隔行扫描,电视图像整体每秒刷新 60 次(或 50 次),每次只刷新总线数的一半。
通常,对于隔行扫描的运动图像,在不产生伪影的情况下,无法完美地重建任何单个视频帧。这一点非常重要,需要重复一遍:无法完美地重建任何单个帧!原因是奇数行记录到录像带上时,相对于偶数行存在半帧的时间偏移。如果视频画面是静止的,则此时间偏移没有问题,但对于运动图像,它会导致一半的线相对于另一半发生位移。在电视屏幕上,您看不到这种位移,因为电视屏幕(除了高端 HDTV 显示器)质量很差,以至于伪影不可见。但是,在计算机屏幕上,这种位移非常明显,并导致视频中出现梳状伪影。您可以在 隔行扫描部分 的 Luke's Video Guide 中看到隔行扫描伪影的屏幕截图。
消除隔行扫描伪影的过程称为反交错。不幸的是,所有反交错技术在某种程度上都是不完美的,并且没有一种方法在所有情况下都能发挥最佳效果。因此,尝试所有不同的可能反交错设置以查看哪一种最适合特定光盘非常重要。
MPlayer 用户可以通过在命令行键入 mplayer -pphelp 来获取反交错选项列表。找到您要使用的选项,然后使用 -vf pp=<option> 语法来激活该选项。例如,我通常使用lb选项,该选项使用命令:mplayer -vf pp=lb,后跟您通常用于播放 DVD 的任何其他选项。
VideoLAN 用户可以右键单击电影以获取反交错选项列表(在 或 下,具体取决于程序版本)。
Xine 在配置面板中有一个反交错选项列表;要访问它,请右键单击电影窗口,打开 -> 对话框,将 “配置经验级别” 设置为 “高级”,然后在 “视频” 选项卡下查找 “软件反交错方法”。
Ogle 没有反交错支持,因此不建议使用 Ogle 观看隔行扫描视频。
本节仅适用于 NTSC 格式的视频(在北美、东亚和拉丁美洲部分地区使用)——PAL 用户(世界其他地区)可以跳过。
关于上述所有关于隔行扫描的讨论的一个例外是电视电影视频的情况。简而言之,电视电影是一种特殊的隔行扫描,仅对戏剧(即电影)电影和某些形式的手绘动画节目进行。电视电影的特别之处在于它通常可以被完美地撤消。详细信息过于复杂,无法在此处解释,但如果您好奇,可以在 Luke's Video Guide 或 Bob Niland's FAQs 中阅读相关内容。
撤消电视电影伪影的过程称为反向电视电影。好消息是,如果正确地进行反向电视电影处理,则可以完全恢复源视频的原始视频质量,而不会产生任何伪影。坏消息是,MPlayer 是目前世界上唯一可以执行反向电视电影处理的播放器程序。
要在 MPlayer 中执行反向电视电影处理,只需添加-vf ivtc选项到 MPlayer 命令。如果您正在观看您知道源自戏剧发行的电影,或者您正在观看动画节目,则此选项是正确的选择。警告:此选项非常占用 CPU 资源。您至少需要 1 GHz 的处理器才能考虑执行此操作。
在这里,我们给出了在各种播放器程序中启动基本 DVD 播放的具体说明。这些命令仅涵盖操作每个程序的基本步骤。我们鼓励您参考每个程序的手册页以获取更多说明。
在尝试播放之前,将您要播放的 DVD 放入驱动器中。
键入 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 |
只需在命令提示符下键入 xine 即可启动程序。
首次启动程序时,它将显示一个配置屏幕,其中包含许多选项。在大多数情况下,您可以将所有选项保留为默认值。
该程序有一个图形控制台,底部有一行标记按钮。按 DVD 按钮开始播放 DVD。(但是,如果您的 Xine 版本有 D5D 按钮,请改用它。)
Xine 支持 DVD 菜单,因此您可以像通常那样通过光盘自己的菜单设置语言或字幕选项。
确保您正在运行 XFree86 4.1 或更高版本。您可以通过在命令提示符下键入 X -version 来查找您的 XFree86 版本。
为您的显卡使用合适的驱动程序。某些 Linux 发行版默认使用通用的 XFree86 VESA 驱动程序,而不是您的显卡的特定驱动程序。您需要使用特定于您显卡的硬件驱动程序才能获得硬件叠加支持。
ATI 用户应尝试从 GATOS 主页或 官方 ATI Linux 支持页面 下载改进的 ATI XFree86 驱动程序。
NVidia 用户应尝试从 官方 NVidia Linux 驱动程序 为他们的显卡下载驱动程序。
有时升级 XFree86 可以为您提供具有硬件叠加支持的改进驱动程序,但此类升级超出了本 HOWTO 的范围。
叠加输出混乱或丢失的问题通常意味着您的显卡 RAM 不足以同时容纳常规桌面显示和视频叠加显示。通常,您需要比正常情况下多两倍的显卡 RAM 才能在给定的视频分辨率下使用硬件视频叠加。在某些情况下,由于显卡中的内部缓冲,您甚至可能需要 3 到 5 倍的 RAM。
降低显卡 RAM 需求的唯一简单方法是在播放视频时切换到较低的视频分辨率。
如果对您的 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 支持特别相关的步骤如下:
下载最新的内核,以便您有最大的机会在您的芯片组上获得 DMA 支持。
解压缩您的内核,并在内核构建目录中键入 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”。
在同一页面上,有几十个特定于芯片组的 DMA 驱动程序向下延伸了几个屏幕。找到并选择一个与您的芯片组相关的驱动程序(如果有)。例如,如果您有一个基于 AMD Athlon 的 VIA 芯片组,请启用 “VIA82CXXX chipset support” 项。
有关编译内核的更多信息,请参阅 Kernel HOWTO 以及 Linux Ultra-DMA Mini-Howto。
在足够快的计算机(例如,超过 1 GHz)上,视频播放断断续续通常意味着您的叠加支持或 DMA 支持配置错误。请参阅之前的故障排除项。
在非常慢的计算机(例如,0-500 MHz)上,除了硬件升级之外,您无能为力,无法使 DVD 播放良好运行。
对于临界计算机(介于两者之间的任何计算机),您可以通过从内核 2.2 升级到内核 2.4 并使用像 MPlayer 这样的 SSE 优化播放器程序来获得适度的(约 10%)性能提升。
最后,如果所有其他方法都失败了,请使用选项 mplayer -framedrop 运行 MPlayer,以修补视频播放中的偶尔故障。
声音播放问题的最常见原因是声卡不支持 48 kHz 音频播放。对于属于此类的人,我强烈建议您购买新的声卡。即使是廉价的 PCI 声卡也可以为您提供音质的显着提升,其成本低于两张 DVD 的成本。
如果不行,您可以通过不使用声音守护程序(如 ESounD 或 aRts)并将 DVD 音频直接播放到 OSS 驱动程序来减轻声音播放系统的负载。要使用 MPlayer 执行此操作,请运行 mplayer -ao=oss 以及您通常使用的任何其他选项。