找回密码
 注册
查看: 1678|回复: 0

MPlayer - Linux下的电影播放器06

[复制链接]
发表于 2005-4-15 12:01:11 | 显示全部楼层 |阅读模式
6. 移植
6.1 Linux
主要的开发平台是x86上的Linux,尽管MPlayer可以移植到很多别的Linux上。MPlayer的二进制包在很多地方可以获得。但是我们不对任何一个负责,有问题去找这些包的制作者,别找我们。

6.1.1 Debian安装包的制作
为了制作Debian安装包,在MPlayer的代码的目录下面运行下列命令:

    fakeroot debian/rules binary

成为root后你可以像正常情况下一样安装.deb包:

    dpkg -i ../mplayer_0.90-1_i386.deb as root.

Christian Marillat一直在制作非官方的Debian MPlayer, MEncoder和字体的安装包,你可以从他的主页(apt-get)获得。

6.1.2 RPM安装包的制作
Dominik Mierzejewski制作并维护MPlayer的官方的Red Hat RPM安装包。他制作了播放器,GUI,字体,skin和一些驱动还有编解码器的安装包。所有这些都可以从他的主页获得。

Mandrake的安装包可以在P.L.F获得,SuSE在他们的发行版中包括了一个有缺陷的MPlayer版本。如果你想获得全部的功能,你必须从源代码编译。

6.1.3 ARM
MPlayer可以工作在使用ARM CPU的PDAs例如Sharp Zaurus, Compaq Ipaq上。最简单的获得MPlayer的方法从Openzaurus的安装包服务器下载。如果你像自己编译它,你应该查看OpenZaurus发行版的buildroot下的mplayer 目录和libavcodec。那里总有最新的用来编译一个代libavcodec的CVS的MPlayer的Makfile和补丁。
如果你需要一个GUI前端,你可以使用xmms-embedded。

6.2 *BSD
MPlayer可以运行在FreeBSD, OpenBSD, NetBSD, BSD/OS和Darwin上。有ports/pkgsrc/fink等版本的MPlayer可供使用,比直接使用我们的源代码要容易。

编译MPlayer你需要GNU make(gmake - 本地的BSD的make不能正常工作)和一个比较新的binutils。

如果MPlayer报告找不到/dev/cdrom或者/dev/dvd,创建一个适当的符号链接:
ln -s /dev/(your_cdrom_device) /dev/cdrom.

要在MPlayer中使用Win32 DLLs你需要使用"option USER_LDT"重新编译内核(除非你用的是FreeBSD -CURRENT,其中这一项是默认的)。

6.2.1 FreeBSD
如果你的CPU有SSE,使用"options CPU_ENABLE_SSE"选项重新编译内核来使用它(需要FreeBSD-STABLE,或者使用内核补丁)。

6.2.2 OpenBSD
因为gas的版本不同(relocation vs mmx)的限制,你需要分两步编译: 首先确保non-native的汇编程序当前在PATH中并运行gmake -k,然后在确保使用native版本情况下运行gmake。

6.3 Solaris
MPlayer在Solaris 2.6或者更新的系统上应该能够正常运行。

在UltraSPARC上,MPlayer利用他们的VIS扩展(相当于MMX)的优势,目前只应用于libmpeg2, libvo以及libavcodec ,但mp3lib没有。你能在400MHz CPU上观看VOB文件。你需要安装mLib。

为编译它你需要GNU make(gmake,/opt/sfw/gmake),native的Solaris make不能正常工作。你用Solaris的make代替GNU make时的典型的错误信息为:

   % /usr/ccs/bin/make
   make: Fatal error in reader: Makefile, line 25: Unexpected end of line seen

在Solaris SPARC上,你需要GNU C/C++编译器;GNU C/C++编译器是否设置使用GNU汇编程序没有什么关系。

在Solaris x86上,你需要GNU汇编程序和GNU C/C++编译器,设置使用GNU的汇编程序!在x86平台上的mplayer代码大量使用MMX,SSE和3DNOW!指令集,使用Sun的汇编程序/usr/ccs/bin/as不能编译通过。

configure脚本将试图查找你的"gcc"命令使用的汇编程序(如果自动检测失败,使用"--as=/wherever/you/have/installed/gnu-as" 选项告诉configure脚本你的系统中GNU的"as"在哪里)。

在Solaris x86系统上使用没有GNU汇编程序的GCC时configure的出错信息为:

   % configure
   ...
   Checking assembler (/usr/ccs/bin/as) ... , failed
   Please upgrade(downgrade) binutils to 2.10.1...

(解决方法:安装并且使用配置了"--with-as=gas"的gcc)

当不使用GNU as的GNU C编译程序时的典型出错信息是:

   % gmake
   ...
   gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math
        -fomit-frame-pointer  -I/usr/local/include   -o mplayer.o mplayer.c
   Assembler: mplayer.c
   "(stdin)", line 3567 : Illegal mnemonic
   "(stdin)", line 3567 : Syntax error
   ... more "Illegal mnemonic" and "Syntax error" errors ...

因为Solaris8 x86的两个bug,不能可靠地播放容量>4GB的DVD:

The sd(7D) driver on Solaris 8 x86 driver has bug when accessing a disk block >4GB on a device using a logical blocksize != DEV_BSIZE (i.e. CD-ROM and DVD media). Due to a 32bit int overflow, a disk address modulo 4GB is accessed. (http://groups.yahoo.com/group/solarisonintel/message/22516)
The similar bug is present in the hsfs(7FS) filesystem code (aka ISO9660), hsfs currently does not support partitions/disks >4GB, all data is accessed modulo 4GB (http://groups.yahoo.com/group/solarisonintel/message/22592)
The hsfs problem can be fixed by installing patch 109764-04 (sparc) / 109765-04 (x86).

在使用UltraSPARC CPU的Solaris上,对有些耗时的操作使用CPU的VIS指令能获得额外的速度提升。在MPlayer中通过Sun的mediaLib中的函数使用VIS加速功能。

mediaLib的VIS加速功能用于mpeg2视频解码和视频输出驱动的颜色转换。

6.4 Silicon Graphics / IRIX
你可以安装GNU的install程序,并且(如果你没有把它放在你的系统路径中)指定它的位置:

  ./configure --install-path=PATH

或者你可以使用默认的IRIX 6.5提供的install,那你就必须手动修改Makefile文件,把下面两行:

  $(INSTALL) -c -m 644 DOCS/mplayer.1 $(MANDIR)/man1/mplayer.1

  $(INSTALL) -c -m 644 etc/codecs.conf $(CONFDIR)/codecs.conf

改成:

  $(INSTALL) -m 644 mplayer.1 $(MANDIR)/man1/

  $(INSTALL) -m 644 codecs.conf $(CONFDIR)/

然后运行(在MPlayer的源代码目录中):

  cp DOCS/mplayer.1 . ; cp etc/codecs.conf .

然后继续编译和安装。

6.5 QNX
能工作。你需要下载SDL for QNX并安装它。然后使用-vo sdl:photon和-ao sdl:nto 选项运行MPlayer,速度应该很快。

-vo x11输出将比Linux更加缓慢,因为QNX只有一个十分缓慢的的X仿真。使用SDL。

6.6 Cygwin
Cygwin的移植仍然很不成熟。目前还不支持Win32 DLLs和OpenGL。SDL据说会扭曲声音和图像或者在某些系统上导致崩溃。补丁总是欢迎的。最好的效果是使用本地的DirectX视频输出驱动(-vo directx) 和本地的Windows waveout音频驱动(-ao win32)。你应该查阅mplayer-cygwin邮件列表来获得帮助和最新信息。

你必须到MPlayer的目录下,拷贝或者symlinketc/cygwin-inttypes.h到/usr/include/inttypes.h来使MPlayer顺利编译。

为了获得本地的DirectX视频,下载DirectX 7头文件,把它们解压到/usr/include/ 或者/usr/local/include/下然后重新编译。如果图像发生扭曲,用-vo directx:noaccel 把硬件加速关掉试试。

让SDL在Cygwin下工作的方法和文件可以在libsdl的站点找到。

你可以通过播放Windows显示的VCD上的.DAT或者.MPG文件来播放VCD,这样使他工作(改成你的CD-ROM驱动器的盘符):

mplayer d:/mpegav/avseq01.dat

mplayer /cygdrive/d/MPEG2/AVSEQ01.MPG

DVD同样可以,用下面的命令DVD设备设置成你的CD-ROM驱动器:

mplayer dvd://<title> -dvd-device '\\.\d:'

QuickTime DLL据说也能工作。用--enable-qtx-codecs编译并把编解码器放到默认的Windows DLL位置,C:\WINNT\system32或者C:\Windows\system取决于你的Windows的版本。

7. 用MEncoder编码
附录A -- 邮件列表
MPlayer有一些公开的邮件列表。除非特别说明否则这些列表的语言是英语。请不要用别的语言或者HTML邮件格式发送消息!一条消息的大小限制是80k。如果你有更大的东西把它放在可以下载的地方。点击链接就可以订阅。在邮件列表上使用与与usenet上相同的书写和引用规则。请遵守他们,它使阅读你的邮件的人的生活轻松的多。如果你不知道请阅读编辑消息HOWTO或者(如果你很着急)引用HOWTO。

MPlayer通告列表:http://mplayerhq.hu/mailman/listinfo/mplayer-announce
MPlayer发布通告的邮件列表。如果你想获得新特性的通告在此订阅。
MPlayer开发者列表:http://mplayerhq.hu/mailman/listinfo/mplayer-dev-eng

这个列表是关于mplayer开发的! 谈论接口与API的变化,新的库,代码优化,configure修改,另外补丁也应发送到这里。不要在这里发送bug报告,用户问题,特性要求,吵架!这张列表应该保持低流量。

MPlayer用户列表:http://mplayerhq.hu/mailman/listinfo/mplayer-users

在这里发送bug报告,(在阅读了已知Bugs一节和报告bug部分之后)
在这里发送特性要求(在阅读整个文件之后)
在这里发送用户问题(在阅读整个文件之后)
MPlayer匈牙利用户列表:http://mplayerhq.hu/mailman/listinfo/mplayer-felhasznalok

匈牙利语的列表
主题?让我们看看...迄今为止主要是吵架和RTFM问题
MPlayer & Matrox G200/G400/G450/G550用户:http://mplayerhq.hu/mailman/listinfo/mplayer-matrox
在这里发送Matrox相关的问题
关于mga_vid的事情
Matrox的官方的beta版驱动(对于X 4.x.x )
还有关于matroxfb电视输出的东东。
MPlayer & DVB卡用户:http://mplayerhq.hu/mailman/listinfo/mplayer-dvb
与被称为DVB的硬件译码器卡有关的事情。(不是DXR3!)

MPlayer CVS-log:http://mplayerhq.hu/mailman/listinfo/mplayer-cvslog

在这里只能询问CVS的变化。(如果你不理解为什么要做这样的改动或者你有更好的修正或者你注意到在已经提交的补丁中可能存在的bug或问题)确定你要找的开发者阅读这张列表!

MPlayer Cygwin移植邮件列表:http://mplayerhq.hu/mailman/listinfo/mplayer-cygwin
讨论MPlayer的Cygwin移植的邮件列表。
MPlayer OS/2移植邮件列表:http://mplayerhq.hu/mailman/listinfo/mplayer-os2
讨论MPlayer的OS/2移植的邮件列表。
MPlayer Weekly News的编辑和翻译的列表:http://mplayerhq.hu/mailman/listinfo/mplayer-mwn
讨论Weekly News发布的邮件列表。.
注意:http://www.mplayerhq.hu/cgi-bin/htsearch有可供检索的邮件列表文档。

附录B -- 如何报告bug
附录C -- 已知Bugs
特殊的系统或CPU相关的bug或问题:

P3上使用2.2.x内核出现SIGILL(signal 4):
问题:2.2.x内核没有适当的(能正常工作的)SSE支持
解决:把内核升级到2.4.x
绕过方法:./configure --disable-sse
一般的SIGILL(signal 4):
问题:你在不同的机器中编译和运行mplayer(例如在P3上编译在Celeron上跑)
解决:在你将使用的的机器上编译MPlayer!
绕过方法:./configure --disable-sse等等选项
运行MEncoder时出现"Internal buffer inconsistency":
问题:当用gcc 2.96或者3.x编译lame < 3.90时的已知问题。
解决:使用lame > =3.90。
绕过方法:以gcc 2.95.x编译lame并且卸载任何已经安装的lame包,他们可能是用gcc 2.96编译的。
在PPC上MP2/MP3的声音混乱:
问题:PPC平台上的已知的GCC误编译的bug,目前没有修正。
绕过方法:使用FFmpeg的(较慢的)MP1/MP2/MP3译码器(-ac ffmpeg)
当缩放+编码时,libmpeg2的sig11:
问题: 已知的GCC 2.95.2的MMXbug,升级到2.95.3。
各种各样A-V同步和其它音频问题:

一般的音频延迟或者急跳声音(对所有或者大部分文件存在):
最普遍的: buggy的音频驱动! -- 试试使用不同的驱动,用-ao oss试试ALSA 0.9的OSS仿真,也试试-ao sdl,有时它有帮助。如果你的文件用-nosound播放正常,你就能确定这是声卡(驱动)的问题。
音频缓冲的问题(缓冲大小检测错误)
绕过方法:mplayer -abs选项
采样率的问题-- 也许你的声卡不支持你的文件使用的采样率 -- 试试 resampling插件(- aop)
机器太慢(CPU或VGA)
用-vo null试试看,如果它播放正常,那么你的VGA显卡/驱动太慢了
绕过方法:买一块更快的显卡或阅读这篇文档关于如何加速的内容
也试试-framedrop
特定的某一个或一些文件的音频延迟/不同步:
损坏的文件
绕过方法:
-ni或-nobps选项(对于非交错的或坏的文件)
以及/或者
-mc 0(对带有糟糕的交错的VBR音频的文件是需要的)
以及/或者
-delay选项或者+/-键在播放时调整延迟时间
如果没有一个方法有效,请upload这些文件,我们将检查(和修正)。
你的声卡不支持48kHz playback
绕过方法:买个更好的声卡...或者尝试减少10%的fps(对30fps的电影使用-fps 27)或者使用resampler插件
机器太慢
(如果A-V不是在0附近,状态行的最后一个数字不断增加)
绕过方法:-framedrop
完全没有声音:
你的文件使用不支持的音频codec
绕过方法:读取文档并帮助我们添加对它的支持
完全没有图画(全灰/全绿窗口):
你的文件使用不支持的视频codec
绕过方法:读取文档并帮助我们添加对它的支持
自动选择的codec不能解码文件,试试用-vc或-vfm选项使用其他译码器
你试图用OpenDivX或XviD(-vc odivx)译码器播放DivX 3.x格式的文件 -- 安装Divx4Linux并且重新编译播放器
视频输出问题:

首先注意: -fs -vm和-zoom选项只是推荐,(目前)不是所有驱动器都支持。因此,如果它不起作用那不是bug。只有少数驱动支持缩放,对x11或dga不要指望这个。

OSD与字幕闪烁:
-- x11驱动器: 抱歉,它现在不能被修正
-- xv驱动器: 使用-double选项

使用mga_vid时的绿色图象(-vo mga/-vo xmga):
-- mga-vid没有正确检测你的显卡的显存大小,使用mga_ram_size选项重新载入

附录D -- MPlayer skin的格式
附录D - MPlayer skin的格式
本文件的目的是描述MPlayer的skin的格式。这里所包含的信息可能不对,因为

GUI不是我写的
GUI还没有完成
我可能搞错了
因此如果某个功能与它在这里被描述的工作方式不一样,不用大惊小怪。
谢谢Zolt醤 Ponekker的帮助。

Andr醩 Mohari <[email protected]>

D.1 综述
这虽然与skin的格式扯不上什么关系,但是你应该了解MPlayer有没有内建的皮肤,因此为了能够使用GUI必须安装至少一种皮肤。

D.1.1 目录
skin的搜索目录(按顺序)是:

    $(DATADIR)/Skin/
    $(PREFIX)/share/mplayer/Skin/
    ~/.mplayer/Skin/

注意,第一个路径倚赖于MPlayer的安装配置(见configure脚本的--prefix和--datadir的参数)。

所有的skin被安装到上面列出的一个目录下的自己的目录中,例如:

    $(PREFIX)/share/mplayer/Skin/default/

D.1.2 图像格式
图像必须是真彩的(24或者32bpp)PNG图片。

在主窗口(见下面)中你能使用包含“透明色”的图像:用颜色#FF00FF(深红) 填充的区域在MPlayer看来是完全透明的。这意味着你甚至能改变窗口外形如果你的X服务器有XShape扩展。

D.1.3 Skin的组成部分
Skin的格式是十分自由的(不是像Winamp/XMMS的那种固定格式的皮肤),所以能不能做出些东西取决于你。

目前有三个要被修饰的窗口:主窗口,副窗口,播放条和 Skin菜单(右键单击弹出)。

主窗口和/或者播放条是你控制MPlayer的地方。窗口的背景是图像。各种项目可以(而且必须)被放置在这里: 按钮,滑动条和标签。对于每一个项目,你都必须指定其位置和大小。

一个按钮有三种状态(按下,释放,禁止),所以按钮图像必须垂直地划分成三部分。细节参见按钮项目。

滑动条(主要用于搜寻条和音量/平衡控制)可以有任意多的状态只要你把图像分成上下排列的足够多份。细节参见hpotmeter和potmeter。

标签有一点特殊:字符需要从图像文件中绘制,而图像中的字符用字体描述文件描述。后者一个纯文本文件规定图像中每一字符的x,y坐标和大小(图像文件和他的字体描述文件共同 组成一个字体)。细节参见dlabel和slabel。

注意:所有图像都能像图像格式一节中说明的使用透明色。如果X Server不支持 XShape扩展,透明的部分将显示为黑色。如果你想使用这个特性,主窗口背景图像的宽度应该能被8整除。

subwindow是电影显示的地方。如果没有载入电影它将显示一个指定的图像(空的窗口太无聊了:-)) 注意:在这里不允许使用透明色。

skin菜单仅仅是提供一个通过菜单控制MPlayer的方法。菜单需要两个图像:一个是基础图像用来显示菜单的正常状态,另一个用来显示被选择的项目。当菜单弹出时,显示第一个图像。如果你把鼠标在菜单条目上移动,当前选择的项目从第二个图像中复制并覆盖到当前鼠标指针下面的菜单项目上。 (第二个图像从来不作为整体来显示)。

一个菜单选项用图像中的位置和大小定义(细节参见skin菜单)。

还有一件重要的事情没有提到:为了使按钮,滑动条和菜单项工作,MPlayer必须知道如果他们被点击的话应该做什么。这是利用消息(事件)机制完成的。对于这些项目,你必须定义当他们被点击时将会产生的消息。

D.1.4 文件
你需要制作下列的文件构成一个skin:

一个配置文件称为skin,告诉MPlayer如何将skin的不同部分放在一起,以及如果你在窗口中某处点击的话应该做什么。
主窗口的背景图像。
主窗口上代表物件的图像(包括一个或更多字体描述文件用来显示标签)。
在副窗口中显示的图像(可选)。
skin菜单的两个图像(仅当你想要创建菜单时才需要他们)。
除了skin的配置文件之外,你能给其它文件起随便什么名字(但字体描述文件必须以.fnt为扩展名)。

D.2 skin文件
如上所述,这是skin的配置文件。它是基于行的;注释行必须以';'开头(只有空格和tab可以放在';'之前)。

文件由section组成。每一段描述一个程序的skin,使用下列的形式:

section = section name
..
end

目前只有一个程序,所以你只需要一个section:它的名称是movieplayer。

这个段中每个窗口用下列形式的块描述:

window = window name
.
.end

其中window name可以是下面各字串中的一项:

main -- 对于主窗口
sub -- 对于副窗口
menu -- 对于skin菜单
playbar - 播放条
(副窗口和skin菜单块是可选的 -- 你不一定要创建菜单或者修饰副窗口 )。

在一个窗口的描述块内,你能用下列形式的一行定义窗口中的每一项目:

item = parameter
其中item是定义GUI项目的类型的字串,parameter是一个数字或者文字值 (或者一组用逗号分开的值的列表)。
把上述的放在一起,整个文件看起来就有点像这样:

section = movieplayer
  window = main
  ; ... items for main window ...
  end

  window = sub
  ; ... items for subwindow ...
  end

  window = menu
  ; ... items for skin menu ...
  end

  window = playbar
  ; ... items for playbar ...
  end
end

图像文件的名称必须不带目录名 -- 图像在Skin目录中被搜索。你能(但是并不需要)规定扩展名。如果文件不存在,MPlayer将试图装载<filename>.<ext>文件, <ext>可以是png或者PNG(按这个顺序尝试)。第一个匹配文件将被使用。

最后是一些用来定位的语句。主窗口和副窗口可以放置在屏幕的不同的角落,通过给定X和Y坐标。 0代表顶端或左端,-1代表中心然后-2代表右边或底部:


(0, 0)----(-1, 0)----(-2, 0)
  |          |          |
  |          |          |
(0,-1)----(-1,-1)----(-2,-1)
  |          |          |
  |          |          |
(0,-2)----(-1,-2)----(-2,-2)


这里有个例子可以把这个搞清楚。假设你有个叫main.png的图像用来做主窗口:
base = main, -1, -1
MPlayer将尝试装载main,main.png,main.PNG文件。  

D.2.1 主窗口和播放条
下面是所有能用于'window = main' . . . 'end'和'window = playbar'  . . 'end'块中的项目的列表。

base = image, X, Y
指定用于主窗口的背景图像。窗口将显示在屏幕上的X,Y位置,窗口的大小与图像相同。
注意:这些参数目前对显示窗口不起作用。
警告:图像中的透明区域(彩色的#FF00FF )在没有XShape扩展的X服务器上是黑色的。图像的宽度必须能被8整除。
button = image, X, Y, width, height, message
将一个大小为width*height的按钮放置在X,Y的位置。指定的message将在按钮被点击时产生。被image制定的图像必须有从上到下三个部分 (根据按钮的可能状态),像这样:
+------------+
|  pressed   |
+------------+
|  released  |
+------------+
|  disabled  |
+------------+

decoration = enable|disable
允许或禁止window manager修饰主窗口。缺省设定是禁止。

注意:这对显示窗口无效,它们不需要。
hpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
vpotmeter = button, bwidth, bheight, phases, numphases, default, X, Y, width, height, message
在X,Y位置放置一个大小为width*height的水平滑动条。所用的图像可以划分成不同的部分用来显示滑动条的不同状态(例如,你能做一个音量滑动条,当音量从最小变到最大时,滑动条的颜色从绿色变成红色。)。hpotmeter可以有一个能被水平拖曳的按钮。
参数是:
button -- 用于按钮的图像(必须有从上到下三部分,跟button中一样)
bwidth,bheight -- 按钮的大小
phases -- 用于hpotmeter的不同的状态的图像。如果你想不要这样的图像可以使用一个特殊的值NULL。图像必须像这样被垂直划分成numphases个部分:
+------------+
|  phase #1  |
+------------+
|  phase #2  |
+------------+
     ...
+------------+
|  phase #n  |
+------------+

numphases -- phase图像中储存的状态的数量
default -- hpotmeter的缺省值(范围0到100)
X,Y -- hpotmeter的位置
width,height -- hpotmeter的宽度和高度
message -- 当hpotmeter的值改变时产生的消息
potmeter = phases, numphases, default, X, Y, width, height, message
没有按钮的hpotmeter。(我猜它是用来旋转,但它只对水平拖拽作出反应)。描述参数参见hpotmeter。phases能设为NULL,但这实在没什么用处,因为那样你就看不到potmeter在哪里了。
font = fontfile, fontid
定义一个字体。fontfile是以.fnt为扩展名的字体描述文件的名字(不要加上扩展名)。 fontid用来代表这种字体(见dlabel和slabel)。可以定义25个字体。
slabel = X, Y, fontid, "text"
在X,Y位置放置一个静态的标签。text将用fontid代表的字体显示。 text只能是无格式文本($x之类的变量不起作用)而且必须封在一对双引号中(但是"字符不能是text的一部分)。标签使用由fontid代表的字体显示。
dlabel = X, Y, length, align, fontid, "text"
在X,Y位置放置一个动态的标签。标签被称为动态的,因为它的text周期性地刷新。标签的最大限度长度由 leghth给定(它的高度是字符的高度)。如果将要显示的text比给定的宽度宽,它将滚动显示,否则它将在指定的空间之内按 align参数的值对齐显示:0表示靠右对齐,1表示居中对齐,2表示靠左对齐。
要显示的文本由text给定:text必须封在一对双引号中(但是"字符不能是text的一部分)。标签使用由 fontid代表的字体显示。你能在文本中使用下列变量: Variable Meaning
$1 hh:mm:ss格式的播放时间
$2 mmmm:ss格式的播放时间
$3 hh(小时)格式的播放时间
$4 mm(分)格式的播放时间
$5 ss(秒)格式的播放时间
$6 hh:mm:ss格式的电影长度
$7 mmmm:ss格式的电影长度
$8 h:mm:ss格式的电影长度
$v xxx.xx%格式的音量
$V xxx.x格式的音量
$b xxx.xx%格式的声道平衡
$B xxx.x格式的声道平衡
$$ $字符
$a 一个代表音频格式的字母(none: n,mono: m,stereo: t)
$t track号(在播放列表中)
$o 文件名
$f  小写格式文件名
$F  大写格式文件名
$T 一个代表媒体流类型的字幕(文件: f,Video CD: v,DVD: d,URL: u)
$p "p"字符(如果电影正在播放并且字体中有"p"这个字符)
$s  "s"字符(如果电影停止播放并且字体中有"s"这个字符)
$e "e"字符(如果playback被暂停并且字体中有"e"这个字符)
$x 电影宽度
$y 电影高度
$C 使用的编解码器的名字
注意:$a,$T,$p,$s和$e变量都返回应该被显示作为特殊的符号 (例如,"e"通常代表像||这样的暂停符号)的字符。你应该有一个正常字符的字体以及另一个用于符号的不同的字体。更多信息参见符号部分。
D.2.2 副窗口
下列的项目能用于'window = sub' . . . 'end'块。

base = image, X, Y, width, height
在副窗口中将要显示的图像。窗口将在屏幕给定的X,Y位置出现(0,0是左上角)。你能用-1指定中心-2指定右边(X)和底部(Y)。窗口将和图像一样大。 width和height指定窗口的大小; 他们是可选的(如果没有他们,窗口是与图像同样的大小)。
background = R, G, B
让你设置背景颜色。它在图像小于窗口时有用。 R,G和B规定颜色的的红,绿和蓝色的组成部分(它们中每一个都是从0到255的十进制数字)。
D.2.3 Skin菜单
如前所述,菜单用两个图像显示。正常的菜单条目从base项指定的图像中获得,当前选择的条目则从selected项指定的图像中获得。你必须通过menu项定义每个菜单条目的位置和大小。

这些是能用于'window = menu'. . . 'end'之间的项目。

base = image
正常的菜单条目的图像。
selected = image
所有条目都被选择的菜单的图像。
menu = X, Y, width, height, essage
定义图像中一个菜单条目的X,Y位置和大小。当鼠标在该条目上被释放时产生message消息。
D.3 字体
就象在关于skin的各部分的一节中论及的,字体由一个图像和一个描述文件定义。你能将字符放置在图像中的任何地方,但是必须确保他们的位置和大小被精确的提交给描述文件。

字体描述文件随着(以.fnt为扩展名)能有以';'开始的注释行。文件必须有像这样的行

image = image
其中image是用于字体的图像文件的名字(你不必制定扩展名)。
"char" = X, Y, width, height
这里X和Y指定char字符在图像中的位置(0,0表示左上角)。width和height是字符的尺寸,以象素为单位。
这个例子中用font.png定义A,B,C三个字符。

; Can be "font" instead of "font.png".
image = font.png

; Three characters are enough for demonstration purposes :-)
"A" =  0,0, 7,13
"B" =  7,0, 7,13
"C" = 14,0, 7,13

D.3.1 符号
dlabel中使用的一些变量返回的一些字符有特殊的意义。这些字符应该被显示为符号,使得播放DVD时显示一个漂亮的DVD logo而不是字符‘d’。

下列的表格列出所有能被用来显示符号的字符(所以要求另一种字体)。

字符 符号
p 播放
s 停止
e 暂停
n 无声
m 单声道
t 立体声
f 媒体流是文件
v 媒体流是Video CD
d 媒体流是DVD
u 媒体流是URL

D.4: GUI信息
这些是能被按钮,滑动条和菜单项产生的消息。

注意:一些信息可能不像所预想的那样工作(或者根本不工作)。你也知道,GUI还在开发中。

Playback控制:
evNext
跳到播放列表中下一个track。
evPause
暂停播放。
evPauseSwitchToPlay
与evPlaySwitchToPause一起形成开关。他们能用来实现普通的播放/暂停按钮。两条信息应该被分配到窗口中同一位置的两个按钮上。这条信息暂停播放并使evPlaySwitchToPause按钮的图像显示出来(表明点击按钮能继续播放)。
evPlay
开始播放。
evPlaySwitchToPause
与evPauseSwitchToPlay对应的消息。这条信息开始播放并使evPauseSwitchToPlay 按钮的图像显示出来(表明点击按钮能暂停播放)。
evPrev
跳到播放列表中上一个track。
evStop
停止播放。
搜索:
evBackward10sec
evBackward1min
evBackward10min
向后搜索10秒/1分钟/10分钟。
evForward10sec
evForward1min
evForward10min
向前搜索10秒/1分钟/10分钟。
evSetMoviePosition
搜索到制定位置(能被滑动条使用;使用与滑动条相关的值( 0-100% ))。
视频控制:
evDoubleSize化
把电影窗口置为双倍大小。
evFullScreen
切换全屏方式。
evNormalSize化
把电影窗口置为正常大小。
音频控制:
evDecAudioBufDelay
减少音频缓冲延迟。
evDecBalance
减少声道平衡。
evDecVolume
减少音量。
evIncAudioBufDelay
增加音频缓冲延迟。
evIncBalance
增加声道平衡。
evIncVolume
增加音量。
evMute
禁音/取消禁音。
evSetBalance
设置声道平衡(能被滑动条使用;使用与滑动条相关的值( 0-100% ))。
evSetVolume
设置音量(能被滑动条使用;使用与滑动条相关的值( 0-100% ))。
其他:
evAbout
打开关于窗口。
evEqualizer
打开/关闭均衡器。
evExit
退出程序。
evIconify
窗口图标化。
evLoad
装载文件(打开一个文件浏览窗口,你能在其中选择文件)。
evLoadPlay
功能与evLoad一样,但是它在文件之后装载自动地开始播放。
evNone
空信息,它没有效果(也许CVS版本除外:-))。
evPlaylist
打开/关闭播放列表窗口。
evPlayDVD
尝试打开指定的DVD-ROM驱动器中的碟片。
evPlayVCD
尝试打开指定的CD-ROM驱动器中的碟片。
evPreferences
打开选项设置窗口。
evSetAspect
设置显示图像的屏幕高宽比。
evSetURL
显示URL对话窗口。
evSkinBrowser
打开skin浏览器窗口。
附录E -- 开发者的眼泪
附录 E -- 开发者的眼泪
总在mplayer-users邮件列表上引起巨大争吵和怒火的主题主要有两个。第一个主题是关于

E.1 GCC 2.96
背景:GCC2.95系列是GNU官方发行版而GCC的2.95.3版本是这个系列中bug最少的。我们从来没有遇到过可以归罪于GCC 2.95.3的编译问题。从RedHat Linux 7.0开始,Red Hat在他们的发行版里包括了一个打满补丁的CVS版本的GCC,命名为2.96。Red Hat在他的发行版中包括这个版本是因为当时GCC 3.0还没有完成,而他们需要一个在所有他们支持的平台上,包括IA64和s390都正常工作的编译器。Linux发行版Mandrake也照着Red Hat的例子开始在他们的Linux-Mandrake 8.0系列中搭载GCC 2.96。

声明:GCC小组否认于GCC 2.96有任何联系并对GCC 2.96发表了一份官方回应。世界各地的开发者开始遇到GCC 2.96的问题,并开始推荐其他的编译程序。Apache,MySQL,avifile和Wine。其他你会感兴趣的链接有:Real time Linux,Linux kernel news flash about kernel 2.4.17和Voy Forum。MPlayer同样经受这些时有时无的只要换个不同版本的GCC就可以全部解决的问题。有些项目开始为一些2.96的问题实现绕过的方法,但是我们拒绝修正别人的bug,尤其是其中一些绕过的方法意味着降低性能。

你能在这个站点的读到故事的另一面。GCC 2.96不允许在汇编程序中出现|(管道)字符因为它同时支持 Intel和AT&T的语法而|字符在Intel版本中是个符号。问题是它一声不吭的忽略了整个汇编程序块。这个问题现在应该被修正了,GCC会显示一个警告而不是直接跳过。

现状:Red Hat说2.96-85以上的GCC都已经修正了。情况确实好了很多,但我们在我们的邮件列表里仍然遇到一些换了编译器之后就不存在了的问题。在任何情况下它都不再重要了。希望一个成熟的GCC 3.x将很好的解决这个问题。如果你想要用2.96编译的话在configure的时候加上--disable-gcc-checking 标记。记住你要自己负责而且不要报告任何bug。如果你报告,你只会被我们的邮件列表封掉,因为对于GCC 2.96我们已经有够多的争吵了。请让它平息下来。

如果你的GCC 2.96有问题,你能从Red Hat的ftp服务器得到2.96-85的包,或者直接去找7.2或更高版本里面提供的 3.0.4的包。你也能用gcc-3.2-10的包(非官方的,但是工作地不错)和你能把他们跟你已经有的2.96 装在一起。MPlayer检测到它并用3.2-10代替2.96。如果你不想要或者无法使用二进制包,下面教你怎么从源代码编译最新的GCC:

去GCC镜像页网页并下载gcc-core-XXX.tar.gz。XXX是版本号。里面包括了完整的C编译器程序,对MPlayer是足够了。如果你也想要C++,Java或其它一些GCC的高级特性gcc-XXX.tar.gz可能更适合你。
用下列命令解开文档
tar -xvzf gcc-core-XXX.tar.gz
GCC不像大多数程序一样的在自己的源码目录内编译,而是需要一个源码目录之外的编译目录。所以你需要这样创建这个目录
mkdir gcc-build
然后,你能继续在GCC编译目录中配置GCC,但你需要源码目录中的configure:
cd gcc-build
../gcc-XXX/configure
在编译目录中运行下列命令来编译GCC:
做依靠自己力量
现在你可以运行下列命令安装GCC(以root身份)
make install
E.2 二进制发行版
MPlayer以前包含来自OpenDivX工程的源代码,那是不能以二进制形式再分发的。这个代码已经在0.90-pre1中去掉了,剩下的来自OpenDivX源码的divx_vbr.c在0.90-pre9的时候由它的作者按GPL协议发布。现在如果你觉得合适的话欢迎你制作二进制的包。

二进制分发的另一个阻碍是针对CPU结构的编译优化。 MPlayer运行时CPU检测(在编译时指定--enable-runtime-cpudetection)。它默认是禁用的因为它意味着小小的速度牺牲,现在可以创建在能在Intel CPU家族的不同的成员上运行的二进制文件了。

E.3 nVidia
我们讨厌nVidia仅仅提供二进制的驱动(用于XFree86)的作法,他们通常都很buggy。我们在mplayer-users上已有许多关于这些封闭源代码的驱动和他们的低质量,不稳定以及糟糕的用户和专家支持的报告。这里有一个来自nVidia的Linux论坛 的例子。许多这样的问题与异常持续不断重复的出现。我们最近跟nVidia接触过,而他们说这些错误不存在,不稳定是由于质量不好的AGP芯片造成的,而他们没有收到驱动bug(例如紫色条纹)的报告。因此如果你的nVidia显卡有问题,建议你升级nVidia驱动和/或者购买新的主板或者要求nVidia提供开源的驱动。在任何情况下,如果你使用nVidia的二进制的驱动并遇到驱动相关的问题,请你明白你几乎不能从我们这里得到帮助,因为我们在这个问题上无能为力。

E.4 Joe Barr
Joe Barr因为写了一篇一点都不讨人喜欢的MPlayer评论而变得声名狼籍。他发现MPlayer难以安装,但是然而他由不太喜欢阅读文档。他同样得出结论认为开发者是不友好的,文件是不完整和侮辱性的。你自己判断吧。他继续在他的2002年的Linux十大预言中否定mplayer,接下来在xine的评论中他继续扇风点火。富有讽刺意味的是在那篇文章结束时他引用的他与xine原作者的G黱ter Bartsch的争论,完美地总结整个情况:

然而,他也继续说他对我写的Mplayer的专题感到“惊讶”并觉得那是不公平的,他提醒我那是一个免费软件工程。“如果你不喜欢它,”Bartsch说,“你有不使用它的自由”。
他不答复我们的邮件。他的编辑也不答复了我们的邮件。这里引用一些不同的人关于Joe Barr的评论,方便你形成你自己的观点:

Marc Rassbach有些针对这个人的评论。

你们都记得在LinuxWorld 2000的时候他说Linus T说‘FreeBSD只是一小撮程序员’。Linus从没说过任何这类东西。当Joe因此被讯问时,他的反应是说BSD的支持者是白痴和蠢才。
一段来自mplayer-users邮件列表上的Robert Munro的引文:

他挺有意思,但不善于避免,um ...争论。 Joe Barr以前是Compuserve上的Will Zachmann上的Canopus论坛的常客。他那时是OS/2的拥护者(我也是OS/2迷)。

他常常说话过头,骂人,我怀疑他有没有经历过什么困难。以他最近的专栏看来,他软化了些。 适当的阴险的幽默不是他早年的方式,完全不是。

附录F -- 如何发送补丁
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-8-2 21:34 , Processed in 0.042851 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表