8.4.视频播放
在配置视频播放之前,要确定显卡型号及芯片组。虽然 Xorg 支持各种各样的显卡,但并非所有的显卡都能提供良好的播放性能。在运行 Xorg 时执行命令 xdpyinfo
,即可获得当前显卡的 Xorg 服务器扩展支持列表。
使用一个简短的 MPEG 测试文件来评估各种播放器和选项是个好主意。由于一些 DVD 应用程序默认在 /dev/dvd 中寻找 DVD,或者在它们对这个设备名称做了硬编码,所以做一个符号链接到正确的设备可能是有用的:
# ln -sf /dev/cd0 /dev/dvd
由于 devfs(5) 的特性,在系统重启后手动创建的符号链接不会继续存在。为了在系统启动时自动重新创建符号链接,在 /etc/devfs.conf
中添加以下一行:
link cd0 dvd
DVD
解密会调用某些功能,这些功能需要对 DVD
设备的写入权限。
为了增强共享内存 Xorg 接口,建议增加这些 sysctl(8) 变量的值:
kern.ipc.shmmax=67108864
kern.ipc.shmall=32768
8.4.1. 确定视频处理能力
在 Xorg 下有几种可行的方法来播放视频,而其中何种是有效的主要取决于硬件。下面说明的每种方法在不同的硬件上会有不同的表现。
常见的视频接口包括:
- Xorg:使用共享内存的正常输出。
- XVideo:Xorg 接口的扩展,它允许视频通过一个特殊的加速器直接显示在可绘制对象中。这种扩展即使在低端机器上也能提供良好的播放质量。下一节将介绍如何确定这个扩展是否正在运行。
SDL
:简单直接媒体层(Simple Directmedia Layer)是许多操作系统的移植层,允许开发有效利用声音和图形的跨平台应用程序。SDL 为硬件提供了一个低层次的抽象层,有时比 Xorg 接口更有效。在 FreeBSD 上,可以使用软件包或 port devel/sdl20 来安装 SDL。DGA
:直接图形访问(Direct Graphics Access)是 Xorg 的扩展,它允许程序绕过 Xorg 服务器,直接改变帧缓冲区。由于它依赖于一个低级别的内存映射,使用它的程序必须以root
身份运行。可以使用 dga(1) 对 DGA 扩展进行测试和基准测试。当运行dga
时,每当按下一个键,它就会改变显示的颜色。要退出,请按q
。- SVGAlib:一个低级别的控制台图形层。
8.4.1.1. XVideo
要检查这个扩展是否正在运行,请使用 xvinfo
:
% xvinfo
该卡支持 XVideo,如果结果类似于:
X-Video Extension version 2.2
screen #0
Adaptor #0: "Savage Streams Engine"
number of ports: 1
port base: 43
operations supported: PutImage
supported visuals:
depth 16, visualID 0x22
depth 16, visualID 0x23
number of attributes: 5
"XV_COLORKEY" (range 0 to 16777215)
client settable attribute
client gettable attribute (current value is 2110)
"XV_BRIGHTNESS" (range -128 to 127)
client settable attribute
client gettable attribute (current value is 0)
"XV_CONTRAST" (range 0 to 255)
client settable attribute
client gettable attribute (current value is 128)
"XV_SATURATION" (range 0 to 255)
client settable attribute
client gettable attribute (current value is 128)
"XV_HUE" (range -180 to 180)
client settable attribute
client gettable attribute (current value is 0)
maximum XvImage size: 1024 x 1024
Number of image formats: 7
id: 0x32595559 (YUY2)
guid: 59555932-0000-0010-8000-00aa00389b71
bits per pixel: 16
number of planes: 1
type: YUV (packed)
id: 0x32315659 (YV12)
guid: 59563132-0000-0010-8000-00aa00389b71
bits per pixel: 12
number of planes: 3
type: YUV (planar)
id: 0x30323449 (I420)
guid: 49343230-0000-0010-8000-00aa00389b71
bits per pixel: 12
number of planes: 3
type: YUV (planar)
id: 0x36315652 (RV16)
guid: 52563135-0000-0000-0000-000000000000
bits per pixel: 16
number of planes: 1
type: RGB (packed)
depth: 0
red, green, blue masks: 0x1f, 0x3e0, 0x7c00
id: 0x35315652 (RV15)
guid: 52563136-0000-0000-0000-000000000000
bits per pixel: 16
number of planes: 1
type: RGB (packed)
depth: 0
red, green, blue masks: 0x1f, 0x7e0, 0xf800
id: 0x31313259 (Y211)
guid: 59323131-0000-0010-8000-00aa00389b71
bits per pixel: 6
number of planes: 3
type: YUV (packed)
id: 0x0
guid: 00000000-0000-0000-0000-000000000000
bits per pixel: 0
number of planes: 0
type: RGB (packed)
depth: 1
red, green, blue masks: 0x0, 0x0, 0x0
所列的格式,如 YUV2 和 YUV12,并不存在于 XVideo 的实现中,它们的缺失可能会妨碍一些播放器正常运行。
如果结果是这样的:
X-Video Extension version 2.2
screen #0
no adaptors present
该显卡可能不支持 XVideo。这意味着显示器将更难满足渲染视频的计算要求,而这依赖于显卡和处理器。
8.4.2. 可处理视频的 port 和软件包
这一节介绍了一些在 FreeBSD ports 中可用于视频播放的软件。
8.4.2.1. MPlayer 和 MEncoder
MPlayer 是一个命令行的视频播放器,它有一个可选的图形界面,旨在提供速度和灵活性。可以从 FreeBSD ports 中获得其他的 MPlayer 图形化前端。
MPlayer 可以通过软件包或 port 来安装 multimedia/mplayer。有几个编译选项可用,并且在编译过程中会有各种硬件检查。由于这些原因,一些用户喜欢编译 port 而不是使用软件包。
在编译 ports 时,应查看菜单选项,以确定要编译到 port 中的支持类型。如果没有选择某个参数,MPlayer 将不能显示该类型的视频格式。使用方向键和空格键来选择所需的格式。完成后,按回车
键继续进行 port 的编译和安装。
默认情况下,该软件包或 port 将编译命令行工具 mplayer
和图形工具 gmplayer
。要对视频进行编码,请编译 multimedia/mencoder 这个 port。由于许可证限制,MEncoder 的软件包不可用。
首次运行 MPlayer 时,它将在用户的主目录下创建 ~/.mplayer。这个子目录包含了用户特定配置文件的默认版本。
本节只介绍了一些常见的用法。请参考 mplayer(1) 以了解其众多选项的完整说明。
要播放文件 testfile.avi,用 -vo
指定视频接口,如以下例子所示:
% mplayer -vo xv testfile.avi
% mplayer -vo sdl testfile.avi
% mplayer -vo x11 testfile.avi
# mplayer -vo dga testfile.avi
# mplayer -vo 'sdl:dga' testfile.avi
所有这些选项都值得尝试,因为它们的相对性能取决于许多因素,并且会因硬件不同而有很大差异。
要播放 DVD
,用 dvd://N -dvd-device DEVICE
替换 testfile.avi,其中 N 是要播放的标题编号,DEVICE 是 DVD 的设备节点。例如,要从 /dev/dvd 播放标题 3:
# mplayer -vo xv dvd://3 -dvd-device /dev/dvd
注意
可以在编译 MPlayer port 时通过加入参数
WITH_DVD_DEVICE=/path/to/desired/device
来定义默认的 DVD 设备。默认情况下,该设备是 /dev/cd0。更多细节可以在 port 的 Makefile.options 中找到。
要停止、暂停、快进,等等,请使用快捷键。要查看快捷键的列表,请运行 mplayer -h
或阅读 mplayer(1)。
额外的播放选项包括 -fs -zoom
可用于全屏模式,以及 -framedrop
可用于帮助提高性能。
每个用户都可以在他们的 ~/.mplayer/config 中添加常用的选项,比如说:
vo=xv
fs=yes
zoom=yes
可以用 mplayer
将 DVD 标题翻录成 .vob。要从 DVD 中转存第二个标题:
# mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd
输出文件 out.vob 将是 MPEG
格式。
任何希望获得 UNIX® 视频高水平专业知识的人都应该查阅 mplayerhq.hu/DOCS,因为它在技术上是很丰富的。在提交任何错误报告之前,应将该文件视为必读文件。
在使用 mencoder 之前,最好先熟悉一下 mplayerhq.hu/DOCS/HTML/en/mencoder.html 中介绍的选项。有无数种方法可以提高质量、降低比特率和改变格式,其中一些选项可能决定了性能的好坏。错误的命令行选项组合可以产生即使是 mplayer
也无法播放的输出文件。
下面是一个简单复制的例子:
% mencoder input.avi -oac copy -ovc copy -o output.avi
要翻录到一个文件,使用 mplayer
的 -dumpfile
参数。
要将 input.avi 转换为带有 MPEG3 音频编码的 MPEG4 编解码器,首先安装 port audio/lame。由于许可证的限制,无法提供软件包。安装后,键入:
% mencoder input.avi -oac mp3lame -lameopts br=192 \
-ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi
这将产生可由 mplayer
和 xine
等应用程序播放的输出。
可以用 dvd:/1 -dvd-device /dev/dvd
来代替 input.avi,并以 root
身份运行,以直接重新编码一个 DVD 标题。由于可能需要尝试多次才能得到理想的结果,因此建议将标题转存到一个文件中,然后在该文件中工作。
8.4.2.2. xine 视频播放器
xine 是一个视频播放器,它有一个可重用的基础库和一个模块化的可执行文件,可用插件扩展。它可以使用软件或 port multimedia/xine 来安装。
在实践中,xine 需要高性能的 CPU 以及显卡,或者其支持 XVideo 扩展。在 XVideo 接口上,xine 视频播放器表现最佳。
默认情况下,xine 播放器会启动一个图形化的用户界面。然后可以用菜单来打开特定的文件。
另外,可以通过指定要播放的文件的名称从命令行中调用 xine:
% xine -g -p mymovie.avi
参考 xine-project.org/faq 以了解更多信息和故障排除技巧。
8.4.2.3. 实用转码工具
Transcode 提供了一套用于视频和音频文件重新编码的工具。Transcode 可以用来合并视频文件或使用带有 stdin/stdout 流接口的命令行工具来修复破损的文件。
在 FreeBSD 中,Transcode 可以使用软件包或 port 来安装 multimedia/transcode。许多用户喜欢编译 port,因为它提供了一个编译选项菜单,用于指定要编译的支持和编解码器。如果没有选择某个选项,Transcode 将不能对该格式进行编码。使用方向键和空格键来选择所需的格式。完成后,按回车键
继续进行 port 的编译和安装。
这个例子演示了如何将 DivX 文件转换为 PAL 的 MPEG-1 文件(PAL VCD):
% transcode -i input.avi -V --export_prof vcd-pal -o output_vcd
% mplex -f 1 -o output_vcd.mpg output_vcd.m1v output_vcd.mpa
已经准备好用 MPlayer 播放得到的 MPEG 文件 output_vcd.mpg 了。可以用 multimedia/vcdimager 或 sysutils/cdrdao 等工具将该文件刻录在 CD 上以创建视频 CD。
除了 transcode
的手册页,还可参考 transcoding.org/cgi-bin/transcode 以获得更多信息和例子。