7.4.视频回放
在配置视频播放之前,要确定视频卡的型号和芯片组。虽然 Xorg 支持各种各样的显卡,但并非所有的显卡都能提供良好的播放性能。要获得使用该卡的 Xorg 服务器支持的扩展列表,在 Xorg 运行时运行 xdpyinfo
。
有一个简短的 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
7.4.1. 确定视频能力
在 Xorg 下有几种可能的方法来显示视频,而什么是有效的,主要取决于硬件。下面描述的每种方法在不同的硬件上会有不同的质量。
常见的视频接口包括:
- Xorg:使用共享内存的正常输出。
- XVideo:Xorg 接口的一个扩展,它允许视频通过一个特殊的加速器直接显示在可绘制对象中。这种扩展即使在低端机器上也能提供良好的播放质量。下一节将介绍如何确定这个扩展是否正在运行。
- SDL:简单直接媒体层(Simple Directmedia Layer)是许多操作系统的移植层,允许开发有效利用声音和图形的跨平台应用程序。
SDL
为硬件提供了一个低层次的抽象,有时比 Xorg 接口更有效。在 FreeBSD 上,SDL
可以使用 devel/sdl20 软件包或 ports 来安装。 - DGA:直接图形访问是一个 Xorg 扩展,它允许程序绕过 Xorg 服务器,直接改变帧缓冲区。由于它依赖于一个低级别的内存映射,使用它的程序必须以 root 身份运行。DGA 扩展可以使用 dga(1) 进行测试和基准测试。当 dga 运行时,每当按下一个键,它就会改变显示的颜色。要退出,请按
q
。 - SVGAlib:一个低级别的控制台图形层。
7.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 。这意味着显示器将更难满足渲染视频的计算要求,这取决于显卡和处理器。
7.4.2. 处理视频的 ports 和包
这一节介绍了一些可用于视频播放的 FreeBSD Ports Collection 中的软件。
7.4.2.1. MPlayer 和 MEncoder
MPlayer 是一个命令行的视频播放器,它有一个可选的图形界面,旨在提供速度和灵活性。其他 MPlayer 的图形化前端可以从 FreeBSD Ports Collection 中获得。
MPlayer 可以通过 multimedia/mplayer 包或 ports 来安装。有几个编译选项可用,并且在编译过程中会有各种硬件检查。由于这些原因,一些用户喜欢编译 ports 而不是安装软件包。
在编译 ports 时,应查看菜单选项,以确定要编译到 ports 中的支持类型。如果没有选择某个选项,MPlayer 将不能显示该类型的视频格式。使用方向键和空格键来选择所需的格式。完成后,按 Enter
键继续进行 ports 的编译和安装。
默认情况下,该软件包或 ports 将构建 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
注意:默认的 DVD 设备可以在构建 MPlayer ports 时通过加入
WITH_DVD_DEVICE=/path/to/desired/device
选项来定义。默认情况下,该设备是 /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 编解码器,首先安装 audio/lame ports 。由于许可证的限制,无法提供一个软件包。安装后,键入:
% mencoder input.avi -oac mp3lame -lameopts br=192 \
-ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi
这将产生可由 mplayer
和 xine
等应用程序播放的输出。
input.avi 可以用 dvd:/1 -dvd-device /dev/dvd
代替,并以 root
身份运行,以直接重新编码一个 DVD 标题。由于可能需要尝试几次才能得到理想的结果,因此建议将标题转储到一个文件中,然后在该文件中工作。
7.4.2.2. xine 视频播放器
xine 是一个视频播放器,它有一个可重用的基础库和一个模块化的可执行文件,可以用插件来扩展。它可以使用 multimedia/xine 包或 ports 来安装。
在实践中,xine 需要一个快速的 CPU 和一个快速的显卡,或者支持 XVideo 扩展。xine 视频播放器在 XVideo 接口上表现最好。
默认情况下,xine 播放器会启动一个图形化的用户接口。然后可以用菜单来打开一个特定的文件。
另外,xine 可以通过指定要播放的文件的名称从命令行中调用:
% xine -g -p mymovie.avi
参考 xine-project.org/faq 了解更多信息和故障排除技巧。
7.4.2.3. 实用转码工具
Transcode 提供了一套用于视频和音频文件重新编码的工具。Transcode 可以用来合并视频文件或使用带有 stdin/stdout 流接口的命令行工具来修复破碎的文件。
在 FreeBSD 中,Transcode 可以使用 multimedia/transcode 软件包或 ports 来安装。许多用户喜欢编译 ports ,因为它提供了一个编译选项菜单,用于指定要编译的支持和编解码器。如果没有选择某个选项,Transcode 将不能对该格式进行编码。使用方向键和空格键来选择所需的格式。完成后,按 enter
,继续进行 ports 编译和安装。
这个例子演示了如何将 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 以获得更多信息和例子。