7.4. 视频回放

Contributed by Ross Lippert.

在开始之前,您要了解显卡的类型以及它所用的芯片的类型。 尽管 Xorg 支持大量的显卡, 但能达到好的回放效果的却寥寥无几。 在X11运行时,您可以使用命令 xdpyinfo(1) 获得使用您的显卡的X服务器所支持的扩展列表。

为了评估各种播放器和设置,您需要有一小段用作测试的MPEG文件。 由于一些DVD播放器会默认地在 /dev/dvd 里去找DVD文件, 因此, 您会发现建立符号链接到恰当的设备会很有用:

# ln -sf /dev/cd0 /dev/dvd

注意:由于 devfs(5) 本身的原因, 像这样手工建立的链接在重启后将不会存在。 想要无论什么时候您启动系统都能自动建立符号链接, 那就把下边这行加到 /etc/devfs.conf 里边:

link cd0 dvd

另外,DVD解密要求调用专用的DVD-ROM函数,要求把许可定到DVD设备里。

为了改善 Xorg 界面使用共享内存的能力, 建议提高一些 sysctl(8) 变量的值:

kern.ipc.shmmax=67108864
kern.ipc.shmall=32768

7.4.1. 侦测图像处理能力

在 Xorg 下有几种可以显示图像的方式。 到底哪个能工作很大程度上依赖于硬件。 首先, 下边描述的每一种方法在不同的硬件上都会有不同的品质。 其次, 在X11里的图像显示近来引起普遍的关注, 随着 Xorg 的每一个版本, 都会有很大的突破。

常见图像接口列表:

  1. Xorg:一般性的使用共享内存的X11输出。

  2. XVideo:Xorg插件,允许通过特殊的加速在可绘制的对象中直接显示视频。即使在低端机器上,此插件也能提供高质量的回放。下一节介绍如何确定此插件是否正在运行。

  3. SDL:简单直接媒体层是许多操作系统的移植层,允许开发跨平台应用程序,从而有效地利用声音和图形。SDL 为硬件提供了一个低级抽象,有时比 Xorg 接口更高效。在 FreeBSD 上, SDL 可以使用devel/sdl20 package或port进行安装。

  4. DGA: Direct Graphics Access是Xorg的一个扩展,它允许程序绕过Xorg服务器,直接改变帧缓冲区。由于它依赖于低级别的内存映射,使用它的程序必须以root的身份运行。DGA扩展可以使用dga(1)进行测试和基准测试。当dga运行时,每当按下一个键,它就会改变显示屏的颜色。要退出,请按q

  5. 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, 等等) 并不总是随着 XVdieo的每一次执行而存在。没有它们可能会迷惑某些人。

如果结果看起来是这样:

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

那么您的显卡可以可能不支持 XVideo。这意味着,根据显卡和处理器的不同,显示器将更难满足渲染视频的计算要求。

7.4.2. 可处理图像的Port与套件

这部份主要讨论在 FreeBSD Ports 集中提供的可用于视频回放的软件。 视频回放在软件发展中是个很活跃的领域, 并且各种不同程序的功能可能与这里的描述不尽相同。

7.4.2.1. MPlayerMEncoder

MPlayer 是一个命令行视频播放器, 具有可选的图形界面, 旨在提供速度和灵活性。其他图形前端 MPlayer 可从 FreeBSD ports集合中获得。

可以使用multimedia/mplayer package或port安装MPlayer。有几个编译选项可用, 并且在生成过程中会进行各种硬件检查。由于这些原因, 一些用户更喜欢生成port, 而不是安装package。

编译port时, 应检查菜单选项, 以确定要编译到端口的支持类型。如果未选择某个选项, MPlayer 将无法显示该类型的视频格式。使用箭头键和空格键选择所需的格式。完成后, 按 Enter 继续port编译和安装。

默认情况下,包或端口将构建mplayer命令行实用程序和gmplayer图形实用程序。要对视频进行编码,请编译multimedia/mencoder端口。由于许可限制,包不可用于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, 需要把 testfile.avi 改为 dvd://N -dvd-device DEVICE。 这里 N 是要播放的节目编号, 而 DEVICE 则是 DVD-ROM 的设备节点。 例如, 要播放 /dev/dvd 的第三个节目:

# mplayer -vo xv dvd://3 -dvd-device /dev/dvd

注意:

可以在编译 MPlayer 时, 通过 WITH_DVD_DEVICE=/path/to/desired/device 来指定默认的 DVD 设备。 系统内定的默认设备是 /dev/cd0。 更多细节, 请参考 port 的 Makefile.options

要停止、暂停、前进等等,可以参考设定的按键---这些可以通过 mplayer -h 得到或查看手册。

另外,回放的重要选项是:用于全屏模式的 -fs -zoom 和起辅助完成作用的-framedrop

为了让 mplayer 的命令行不是太长,使用者可以通过建立一个文件 .mplayer/config 来设定如下默认选项:

vo=xv
fs=yes
zoom=yes

最后,mplayer 可以把DVD题目(title)抓取成为 .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 port。由于许可限制, package不可用。安装完成后, 键入:

% mencoder input.avi -oac mp3lame -lameopts br=192 \
	 -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi

这样就产生了可被 mplayerxine播放的输出。

input.avi 可以换成 dvd://1 -dvd-device /dev/dvd 并以 root 的身份来执行, 以重新对 DVD 节目进行编码。 由于您第一次做这样的工作时很可能会对结果不太满意, 建议您首先把节目复制成文件, 然后对它进行操作。

7.4.2.2. xine图像播放器

xine 视频播放器是一个关注范围很广的项目, 它不仅看准多合一的视频解决, 而且出品了一个可再用的基本库和一个可扩展插件的可执行模块。 发行有 和port版本-- multimedia/xine

xine 播放器仍然很粗糙, 但这很显然与好开头无关。实际上 xine 要求你有快速的 CPU 和快速的显卡来运行,或者需要支持 XVideo 扩展。 图形界面(GUI)可以使用,但很勉强。

默认情况下,xine启动图形用户界面。然后,可以使用这些菜单打开特定文件。

或者,可以通过指定要播放的文件的名称从命令行调用xine

% xine -g -p mymovie.avi

有关详细信息和故障排除提示, 请参阅 xine-project.org/faq

7.4.2.3. Transcode工具

Transcode提供了一套用于重新编码视频和音频文件的工具。Transcode可用于使用带有 stdin/stdout 流接口的命令行工具合并视频文件或修复损坏的文件。

在 FreeBSD 中, 可以使用multimedia/transcode package或port安装Transcode。许多用户更喜欢编译port, 因为它提供了用于指定要编译的支持和编解码器的编译选项菜单。如果未选择某个选项, Transcode 将无法对该格式进行编码。使用箭头键和空格键选择所需的格式。完成后, 按 Enter 继续端口编译和安装。

此示例演示如何将 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

生成的 MPEG 文件 output_vcd.mpg 已准备好用 MPlayer 播放。该文件可以在 CD 媒体上刻录,以使用 multimedia/vcdimagersysutils/cdrdao等实用程序创建视频 CD

除了transcode的手册页外,有关更多信息和示例,请参阅transcoding.org/cgi-bin/transcode

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.