2.2 支持的编解码器

2.2.1 视频编解码器

检查codec status table来获得完整的,每日更新的 列表。大部分的编解码器可以从我们的主页下载,在我们的编解码器页可以找到他们。

所有之中最重要的:

如果你有一个Win32解码器没有列出来而且目前没有被支持,请读取解码器导入HOWTO并且帮助我们添加对它的支持。

2.2.1.1 DivX4与DivX5

这部分包含关于Mayo工程的DivX4和DivX5编解码器的信息,他们的第一个可用的alpha版本是 OpenDivX 4.0 alpha 47和48。 对它们的支持以前包括在MPlayer中,并且是默认编译的。 我们也使用其后处理代码来有选择地提高MPEG1/2电影的视觉质量。 现在我们使用我们自己的,对于所有文件类型。

这个解码器的新一代产品称为DivX4,它甚至能解码以声名狼籍的DivX编解码器制作的电影! 此外,它比本地的Win32 DivX DLL快得多比但是比libavcodec慢。 因此,不鼓励把它当解码器用。 然而,它对编码有用。 这个编解码器的缺点之一是它目前不开放源代码。

DivX4Linux有两种工作方式:

-vc odivx
以OpenDivX方式使用解码器。在这种情况下,它在自己的缓冲中产生YV12图象,然后由MPlayer通过libvo做色彩空间转换。(推荐,快!)
-vc divx4
使用解码器的色彩空间转换。以这种方式你也能使用YUY2与UYVY。(很慢)

-vc odivx方式通常更快,因为它以YV12(planar YUV 4:2:0)格式传输图象数据,这样占用少的多的总线带宽。对于packed YUV方式 (YUY2,UYVY)使用-vc divx4方式。对于RGB模式两者速度是相同的,差别最多是你当前的色彩深度。

注意:如果你的-vo驱动支持直接渲染,那么-vc divx4可以是很快甚至最快的解决方案。

Divx4/5的二进制编解码器库可以从avifile或者divx.com下载,解压之后,以root权限运行./install.sh, 另外别忘了把/usr/local/lib添加到你的/etc/ld.so.conf中然后运行ldconfig

想得到老的OpenDivx的核心库的CVS版本可以这样做:

  1. cvs -d:pserver:anonymous@cvs.projectmayo.com:/cvsroot login
  2. cvs -d:pserver:anonymous@cvs.projectmayo.com:/cvsroot co divxcore
  3. 核心库分为解码库和编码库必须分别编译。对于解码库,直接输入:
        cd divxcore/decore/build/linux
        make
        cp libdivxdecore.so /usr/local/lib 
        ln -s /usr/local/lib/libdivxdecore.so /usr/local/lib/libdivxdecore.so.0 
        cp ../../src/decore.h /usr/local/include
        
  4. 唉,对于编码库没有可用的Linux的Makefile,而且MMX优化代码只能用于Windows但你仍然可以用这个Makefile来编译它
        cd ../../../encore/build
        mkdir linux
        cd linux
        cp path/Makefile .
        make
        cp libdivxencore.so /usr/local/lib
        ln -s /usr/local/lib/libdivxdecore.so /usr/local/lib/libdivxdecore.so.0
        cp ../../src/encore.h /usr/local/include
        

如果正常安装了DivX4/DivX5,MPlayer会自动检测到它,只要正常编译就可以。如果没有检测到,你肯定没有正确安装或者配置它。

2.2.1.2 FFmpeg DivX/libavcodec

FFmpeg包括一组开放源码的解码器包,能够以兼容方式解码以 H263/MJPEG/RV10/DivX3/DivX4/DivX5/MP41/MP42/WMV1/WMV2/HuffYUV编码格式编码的视频流。它不仅能对其中一些进行编码, 同时提供比Win32解码器或DivX.com的DivX4/5库更高的速度!

它包含很多不错的解码器,尤其重要的是MPEG4的几个变种:DivX 3,DivX 4,DivX 5,Windows Media Video 7(WMV1)。另外一个有趣的东西是WMA解码器。

如果你使用MPlayer发行版,在你的源码包里就有libavcodec,正常编译即可。如果你使用CVS的MPlayer 那么你必须从FFmpeg的CVS树中提取libavcodec因为FFmpeg 0.4.5不能用于MPlayer。你应该这样来完成:

  1. cvs -d:pserver:anonymous@cvs.ffmpeg.sourceforge.net:/cvsroot/ffmpeg login
  2. cvs -d:pserver:anonymous@cvs.ffmpeg.sourceforge.net:/cvsroot/ffmpeg co ffmpeg
  3. libavcodec目录从FFmpeg的源代码里移到MPlayer的CVS树的根目录下。看起来应该象这样:

        main/libavcodec

    符号链接是够的,你必须复制或移动它!
  4. 编译。Configure应该在编译之前发现可能的问题。

注意:CVS的MPlayer确实有libavcodec子目录,但是它确实没有包含libavcodec的源代码!你必须按照上述的步骤来得到这个库的源代码。

用FFmpeg和我的Matrox G400,我甚至能在我的K6/2 500上无掉帧的观看最高分辨率的DivX电影。

2.2.1.3 XAnim解码器

前言:
XAnim的二进制的解码器包里面有一份关于合法捆绑软件许可的声明,除其它限制之外,禁止用户用除XAnim外的任何程序使用其解码器。然而, XAnim的作者到目前为止没有就解码器有关的问题对着任何人采取法律行动。

MPlayer可以使用XAnim的解码器解码。按照下列指令来开启它:

  1. XAnim的站点下载你想要的解码器。3ivx的解码器不在那里,而是在3ivx的站点
  2. 使用--with-xanimlibdir选项来告诉configure在何处可以找到XAnim的解码器。缺省的话,它在 /usr/local/lib/xanim/mods, /usr/lib/xanim/mods and /usr/lib/xanim里寻找。或者你可以把XANIM_MOD_DIR环境变量 设置为XAnim解码器所在的目录。
  3. 给文件改名/做符号链接,去掉代表平台构架之类的东西,让他们看起来像这样:vid_cvid.xa, vid_h263.xa, vid_iv50.xa

XAnim属于视频编解码器族xanim,所以你可能需要使用-vfm xanim

测试过的解码器包括:Indeo 3.24.15.0CVID3ivXh263

2.2.1.4 VIVO视频

MPlayer能播放Vivo(1.0和2.0)视频。对于1.0的文件最适合的解码器是FFmpeg的H263解码器,你可以用-vc ffh263选项 (默认的)来使用它。对于2.0个文件,使用ivvideo.dll这个Win32 DLL文件,将它安装在/usr/lib/win32或者你放Win32解码器的那个什么地方。

2.2.1.5 MPEG 1/2视频

MPEG1和MPEG2用本地的多平台的libmpeg2库解码,其源代码被包括在MPlayer中。对于buggy的MPEG 1/2视频文件我们通过截获sig11 (segmentation fault),然后迅速再次初始化解码器,从失败的地方继续的方法来处理。这种恢复技术会带来无法估量的速度损失。

2.2.1.6 MS Video1

这是微软的又老又差的编码格式。过去它用msvidc32.dll的Win32解码器解码,现在我们有我们自己的开放源码的实现(由Mike Melanson提供)。

2.2.1.7 Cinepak CVID

MPlayer默认将使用自己的开源的,多平台的Cinepak解码器。它支持YUV输出,所以只要硬件驱动允许它将使用硬件缩放。

2.2.1.8 RealVideo

MPlayer支持所有版本的RealVideo的解码:

推荐下载并安装RealPlayer8或者RealONE,因为MPlayer能使用他们的库来解码RealVideo 2.0或者RealVideo 3.0的视频文件。 MPlayer的配置脚本应该会在一个完全安装的RealPlayer的标准位置找到它的库。如果它没找到,用--with-reallibdir 选项告诉configure到哪里去找。

注意:RealPlayer库目前只能用于x86平台上的Linux,FreeBSD,NetBSD和Cygwin。

2.2.1.9 XViD

XViDOpenDivX编解码器的开发分支。故事发生在Mayo工程把OpenDivX变成封闭源码的DivX4的时候,那些从事于OpenDivX的非Mayo工程 的人们感到愤怒,于是开始了XViD。所以两个项目有相同的起源。

优点:

缺点:

XViD目前只能从CVS中得到。这是下载和安装的指令:

  1. cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid login
  2. cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid co xvidcore
  3. cd xvidcore/build/generic
  4. 按照你的需要编辑Makefile.linux
  5. make -f Makefile.linux
  6. 从DivX4Linux包中找出encore2.h decore.h ,把它们复制到/usr/local/include/
  7. 加上--with-xvidcore=/path/to/libcore.a选项重新编译MPlayer。

2.2.1.10 Sorenson

Sorenson是Sorenson Media开发的一个视频编解码器族,授权给苹果公司在它们的QuickTime播放器中使用。 我们目前可以使用下列解码器解码所有的Sorenson视频文件:

编译支持QuickTime库的MPlayer

注意:目前只支持32位的Intel平台。

  1. 下载MPlayer CVS
  2. 用下面参数编译MPlayer:
    $ ./configure --enable-qtx-codecs
  3. 在这里下载QuickTime DLL包http://www.mplayerhq.hu/MPlayer/releases/codecs/
  4. 把QuickTime DLL包解压到你的Win32编解码器目录(默认:/usr/lib/win32)

2.2.2 音频编解码器

所有音频编码中最重要的是:

2.2.2.1 软件AC3解码

这是含有AC3音频的文件的默认解码器。

AC3解码器能为了2,4或者6个扬声器创建音频混合输出。当配置为6个扬声器时,这个解码器向声卡驱动提供所有AC3通道的单独的输出, 允许彻底的“环绕音效”感受而不需要使用需要hwac3解码器的外部AC3解码器。

使用-channels选项可以选择输出的通道数。使用-channels 2获得立体声的降混频。 对于4通道的降混频(左前,右前,左环绕和右环绕),使用-channels 4。在这种情况下,中心通道的任何输出将与前通道均匀混合。 -channels 6将按照编码时的形式输出所有AC3通道-- 依次为左,右,左环绕,右环绕,中间和低频效果。

默认的输出通道数是2。

为使用超过2个通道的输出,你需要使用OSS,和一块能通过SNDCTL_DSP_CHANNELS ioctl支持适当输出通道数的声卡。合适的驱动的一个例子是 2001年8月的或者更新的emu10k1(用于Soundblaster Live!卡)(ALSA的CVS应该也能工作)。

2.2.2.2 硬件AC3解码

你需要一个AC3兼容声卡,加上数字输出(SP/DIF)。声卡的驱动必须正确地支持AFMT_AC3格式(C-Media就支持)。把你的AC3解码器连接到SP/DIF输出, 然后使用-ac hwac3选项。这还在试验阶段但已经知道能用于C-Media声卡,使用ALSA驱动(但不能是OSS)的Soundblaster Live! 还有DXR3/Hollywood+ MPEG译码卡。

2.2.2.3 libmad支持

libmad是多平台的MPEG音频解码库。它不能很好的处理损坏的文件,而且有时候搜索也有问题。

为了支持它,加上--enable-mad配置选项编译。

2.2.2.4 VIVO音频

VIVO文件的使用的音频编码取决于它是VIVO/1.0还是VIVO/2.0。VIVO/1.0文件使用g.723音频,而VIVO/2.0文件使用Vivo Siren音频。 他们两个都支持。你能从MPlayer站点下载g.723/Siren的Win32 DLL, 然后把它复制到/usr/lib/win32目录下。

2.2.2.5 RealAudio

MPlayer支持解码几乎所有版本的RealAudio:

至于如何安装RealPlayer库,参见RealMedia文件格式部分。

2.2.2.6 QDesign编解码器

QDesign音频流(fourcc: QDMC, QDM2)出现在MOV/QT文件中。两个版本的编码格式都可以用QuickTime的库解码。 安装步骤参见Sorenson视频编解码器部分。

2.2.2.7 Qualcomm编解码器

Qualcomm音频流(fourcc: Qclp)出现在MOV/QT文件中。它可以用QuickTime库解码。 安装步骤参见Sorenson视频编解码器部分。

2.2.3 Win32解码器导入HOWTO

2.2.3.1 VFW编解码器

VFW(Video for Windows)是Windows的老的视频API。它的解码器以.DLL或者(很少的).DRV为扩展名。 如果MPlayer无法播放你的AVI并显示这种信息:

    UNKNOWN video codec: HFYU (0x55594648)

它意味着你的AVI在编码时使用了HFYU fourcc(HFYU = HuffYUV codec,DIV3 = DivX Low Motion,等等...) 的编码格式。现在你知道了,你必须查明Windows为了播放这个文件装载了哪一个DLL。在我们的情况下, system.ini在这样的一行上包含这个信息:

    VIDC.HFYU=huffyuv.dll

因此,你需要huffyuv.dll文件。注意,音频解码器通过MSACM前缀指定:

    msacm.l3acm=L3codeca.acm

这是MP3编码格式。现在你有了所有必要的信息(fourcc,解码器文件,AVI样本),把你的解码器支持要求通过邮件提交, 并把相关文件上载到我们的FTP站点:

    ftp://ftp.mplayerhq.hu/MPlayer/incoming/[codecname]/

2.2.3.2 DirectShow codecs

DirectShow是较新的视频API,比它的前辈更恶劣。对于DirectShow事情变的困难了,

新方法:使用微软的GraphEdit(快速)

  1. 从DirecX SDK或者Doom9中取得GraphEdit。
  2. 运行graphedit.exe
  3. 从菜单中选择Graph -> Insert Filters。
  4. 展开DirectShow Filters项目。
  5. 选择正确的解码器名称然后展开项目。/LI>
  6. DisplayName一项中看反斜杠后面花括号里面的文字并把它记下来(小短横分隔开的五块,就是GUID)。
  7. 解码器的二进制文件是Filename项里指定的文件。

注意:如果没有Filename项而DisplayName中包含类似device:dmo的东西, 那么这是一个DMO-Codec。

老方法:做个深呼吸然后开始搜索注册表...

  1. 运行regedit
  2. Ctrl-f,禁用头两个复选框,填写解码器的fourcc(例如TM20)。
  3. 你应该看见一个包含路径和文件名的域(例如C:\WINDOWS\SYSTEM\TM20DEC.AX)。
  4. 现在你找到了文件,我们需要GUID。尝试再次搜索,但现在搜索解码器的名称,fourcc。用媒体播放器播放文件时, 察看File -> Properties -> Advanced可以获得解码器名。如果没有,你真不走运。猜猜看吧(例如搜索TrueMotion)。
  5. 如果找到GUID你将看见FriendlyName和CLSID域。写出16字节CLSID,这就是我们需要的GUID。

注意:如果搜索失败,试试选上所有的复选框。你可能找到错误的内容,不过说不定你会走运...

现在你有所有必要的信息(fourcc,GUID,解码器文件,AVI样本),把你的解码器支持要求通过邮件提交,并把相关文件上载到我们的FTP站点

    ftp://ftp.mplayerhq.hu/MPlayer/incoming/[codecname]/