CoreAVC 1.9 for Linux 安装指南
随着高清视频的逐渐流行,对于 H264 解码器的性能要求也越来越高。 由于缺乏厂商支持,FFmpeg 中的 ffh264 解码器由于解码效率不高,使得一些 CPU 配置较低的机子无法播放高清视频。如果你为此困扰,请参看Linux 下使用 MPlayer 观看高清电影的三种解决方案 一文。本文将介绍如何将介绍其中的第三种: CoreAVC for Linux 。
如果您的显卡不支持 nVidia 显卡独有的 GPU 解码 VDPAU(或者由于各种错误无法使用,如本人),而且 FFmpeg-mt 的 git 慢如牛速(怨念……还是本人……),此时 CoreAVC for Linux 成为了唯一的选择。全文将以 CoreAVC for Linux 维基为基础, 以Fedora 10 i386 系统为例介绍如何在 Linux 下使用 CoreAVC 解码器(亦可用于 X86_64 架构)。
需求条件:
- CoreAVC 1.7 以上专业版及注册码
需要在 CoreAVC 购买,花费$15,可以拜托有 PayPal 的朋友代购……
2.Mplayer 的近期 SVN 版本,1.0rc2 不行。
推荐下载 MPlayer 每日更新的 SVN export 版本,速度比 svn 快。
3.必要的工具和开发包
su -c 'yum install subversion gcc make p7zip-plugins libXv-devel libX11-devel pulseaudio-libs-devel alsa-lib-devel ccache'
最后的 ccache 不是必须,但强烈推荐!
假设与该过程有关的 CoreAVC 安装文件和 MPlayer 源代码包都放在一个目录下,比如用户主目录下的 Build 目录下:
mkdir -pv $HOME/Build
其他目录也可以,只要自己别找不到东西了~
1.在 Build 目录下使用 svn 获得最新的 CoreAVC for Linux :
cd $HOME/Build
svn checkout http://coreavc-for-linux.googlecode.com/svn/trunk/ coreavc-for-linux
2.上一步完成后会在当前目录下生成一个名为 coreavc-for-linux 的目录,进入它:
cd coreavc-for-linux
3.安装 dshowserver。
i386 平台可以直接:
make -C dshowserver
如果没有提示错误的话就可以安装:
su -c 'cp -v dshowserver/dshowserver /usr/local/bin'
su -c 'cp -v dshowserver/registercodec /usr/local/bin'
X86_64 平台的建议从这里下载已经编译好的,解压缩后同样使用上面的命令复制到 /usr/local/bin 下。
4.安装 CoreAVCDecoder.ax 解码器。 返回 Build 目录,假设 CoreAVC 安装文件保存在此目录下:
cd $HOME/Build
使用 7z 解压 CoreAVC 安装文件
7z x coreavcprofessionaledition-setup.exe CoreAVCDecoder.ax
无错误的话可以在当前目录下找到名为 CoreAVCDecoder.ax 的文件。 现在 MPlayer 等播放器对于附件的二进制编码器的默认安装目录是 codecs,为了和官方维基尽量保持一致,在此创建由 codecs 指向 win32 的符号联结:
su -c 'ln -vs /usr/lib/codecs /usr/lib/win32'
复制 CoreAVCDecoder.ax 到此目录。
su -c 'cp -v CoreAVCDecoder.ax /usr/lib/win32/'
5.注册 CoreAVCDecoder.ax 如果之前没有使用过 MPlayer 的话,需要创建用户配置文件目录,使用过的话可以跳过:
mkdir -pv $HOME/.mplayer
将保存 MPlayer 配置信息的 $HOME/.mplayer 目录关联为注册表:
export REGISTRY=$HOME/.mplayer/registry32
输入注册码,用你获得的注册码替代下面命令中的 55555-55555-CORE-55555-55555,注意双引号需要保留:
registercodec -r $REGISTRY -k "HKLM\Software\CoreCodec\CoreAVC Pro\Serial" -v "55555-55555-CORE-55555-55555"
6.用 dshowserver 测试是否注册成功:
dshowserver -c CoreAVCDecoder.ax -s 1280x720 -g 09571a4b-f1fe-4c60-9760de6d310c7c31 -b 12 -f 0x34363248 -o 0x30323449
得到的输出结果应该是:
No id specified, assuming test mode
Opening device
len: 992
ProductVersion: 1.7.0
Decoder supports the following YUV formats: YUY2 UYVY YV12 I420
Decoder is capable of YUV output (flags 0x2b)
Setting fmt
Starting
Initialization is complete
如果使用的是 1.9.0 版本的 CoreAVC 的话,输出结果应该是:
No id specified, assuming test mode
Opening device
Called unk_IsDebuggerPresent
len: 992
ProductVersion: 1.9.0
Win32 LoadLibrary failed to load: nvcuvid.dll, /usr/lib/win32/nvcuvid.dll, /usr/local/lib/win32/nvcuvid.dll
Decoder supports the following YUV formats: YUY2 UYVY YV12 I420
Decoder is capable of YUV output (flags 0x2b)
Setting fmt
Starting
Initialization is complete
此时你可以选择在这里下载它提示缺失的 nvcuvid.dll,然后复制到 /usr/lib/win32 目录下
7z x dgmpgdecnv100b.zip nvcuvid.dll
su -c 'cp -v nvcuvid.dll /usr/lib/win32/'
不过经个人测试这个 dll 文件没什么用处:它是 CoreAVC 1.9 在 Windows 平台下利用 CUDPA GPU 计算加快解码速度的接口,在 Linux 平台下不会起什么作用的……
7.编译并安装 MPlayer 首先当然是解压缩源代码包:
tar xf mplayer-export-snapshot.tar.bz2
之后进入所在MPlayer 源代码目录:
cd mplayer-export-*
生成编译配置文件:
./configure --language=zh_CN
如果没有提示错误的话,就打上 CoreAVC for Linux 的补丁:
patch -p0 < ../coreavc-for-linux/mplayer/dshowserver.patch
如果没有提示错误的话,就可以开始编译了,首次编译大概需要15分钟左右,以后源代码包更新时有 ccache 帮助就会快很多:
make
如果没有提示错误的话,就可以安装了:
su -c 'make install'
8.配置解码器预置文件 将默认配置文件复制到MPlayer用户配置文件目录下,注意是 etc/codec.conf(也就是当前MPlayer 源代码下的 etc 目录),而不是 /etc/codec.conf (这个是系统etc目录):
cp -v etc/codecs.conf $HOME/.mplayer/
使用任意文本编辑器修改此文件,比如 gedit:
gedit $HOME/.mplayer/codecs.conf
之后将以下内容
videocodec coreserve
info "CoreAVC DShow H264 decoder 1.3 for x86 - http://corecodec.org/"
status working
format 0x10000005
fourcc H264,h264 H264
fourcc X264,x264
fourcc avc1,AVC1 AVC1
fourcc davc,DAVC
fourcc VSSH
driver dshowserver
dll "CoreAVCDecoder.ax"
guid 0x09571a4b, 0xf1fe, 0x4c60, 0x97, 0x60, 0xde, 0x6d, 0x31, 0x0c, 0x7c, 0x31
out YV12,IYUV,I420,YUY2
添加到
;=============================================================================
; VIDEO CODECS
;=============================================================================
之后,并且与下一个 videocodec 之间空一行。保存退出。
至此, CoreAVC for Linux 应用于 MPlayer 的过程结束
9.(可选)配置 SMPlayer (1)确定使用正确的 MPlayer 版本:
“选项“-”首选项“-“常规”,在“常规”选项卡的“选择 MPlayer 的可执行文件“中输入
/usr/local/bin/mplayer
(2)取消 Draw video using slices:
“选项“-”首选项“-“常规”,在“视频“选项卡中取消"Draw video using slices"。
(3)取消 CoreAVC 不支持的反拉丝,并让 CoreAVC 自己决定后期处理级别:
“选项“-”首选项“-“常规”,在“视频“选项卡中将反拉丝设为“无“,取消“为所有视频启用后期处理”。
(4)关闭会导致错误的 Correct PTS 选项:
“选项“-”首选项“-“高级”,在“高级“选项卡中取消“Correct PTS“。
点击“确定“保存退出。
当播放高清视频时点击“信息“后,若是显示在“视频“-”选择编码器“中显示”coreserve“,恭喜你,成功了!
ffh264 与 CoreAVC 解码效率对比: 根据 MPlayer man 手册的建议,对手头的 辐射3官方720P 宣传片进行测试。
使用 ffh264 时:
mplayer -benchmark -vo null -nosound -vc ffh264 fallout3HD.mp4
原始输出:
MPlayer SVN-r28764-snapshot-4.3.2 (C) 2000-2009 MPlayer Team
137 audio & 297 video codecs
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
Playing fallout3HD.mp4.
libavformat file format detected.
[lavf] Audio stream found, -aid 0
[lavf] Video stream found, -vid 1
VIDEO: [avc1] 1280x720 24bpp 29.970 fps 0.0 kbps ( 0.0 kbyte/s)
Clip info:
name: Fallout 3 Official Trailer
Forced video codec: ffh264 Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
Audio: no sound Starting playback... VDec: vo config request - 1280 x 720 (preferred colorspace: Planar YV12) VDec: using Planar YV12 as output csp (no 0) Movie-Aspect is undefined - no prescaling applied. VO: [null] 1280x720 => 1280x720 Planar YV12 V: 193.7 0/ 0 41% 0% 0.0% 0 0 BENCHMARKs: VC: 80.627s VO: 0.023s A: 0.000s Sys: 1.091s = 81.741s BENCHMARK%: VC: 98.6373% VO: 0.0278% A: 0.0000% Sys: 1.3349% = 100.0000% Exiting... (End of file)
使用 CoreAVC 时:
mplayer -benchmark -vo null -nosound -vc coreserve fallout3HD.mp4
原始输出:
MPlayer SVN-r28764-snapshot-4.3.2 (C) 2000-2009 MPlayer Team
137 audio & 297 video codecs
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.
Playing fallout3HD.mp4.
libavformat file format detected.
[lavf] Audio stream found, -aid 0
[lavf] Video stream found, -vid 1
VIDEO: [avc1] 1280x720 24bpp 29.970 fps 0.0 kbps ( 0.0 kbyte/s)
Clip info:
name: Fallout 3 Official Trailer
Forced video codec: coreserve Opening video decoder: [dshowserver] DirectShowServer video codecs Opening device Called unk_IsDebuggerPresent len: 992 ProductVersion: 1.9.0 Decoder supports the following YUV formats: YUY2 UYVY YV12 I420 Decoder is capable of YUV output (flags 0x2b) Setting fmt Starting Initialization is complete VDec: vo config request - 1280 x 720 (preferred colorspace: Packed YUY2) [PP] Using codec's postprocessing, max q = 4. VDec: using Planar YV12 as output csp (no 0) Movie-Aspect is undefined - no prescaling applied. VO: [null] 1280x720 => 1280x720 Planar YV12
Found DirectShow filterSelected video codec: [coreserve] vfm: dshowserver (CoreAVC DShow H264 decoder 1.3 for x86 - http://corecodec.org/)
Audio: no sound Starting playback... Dshowserver Connected to host pts value < previous ??% ??,?% 0 0 V: 193.6 0/ 0 22% 0% 0.0% 0 0 BENCHMARKs: VC: 43.521s VO: 0.024s A: 0.000s Sys: 1.697s = 45.241s BENCHMARK%: VC: 96.1975% VO: 0.0525% A: 0.0000% Sys: 3.7499% = 100.0000% Destroying filter Exiting... (End of file)
根据此文中对各项结果的说明,可以看出使用 CoreAVC 可以使用户空间上解码所用时间从 ffh264 的 80.627s 下降到 43.521s,也就是说速度提升了46%((80.627-43.521)/80.627)!只是在内核空间上有小幅度的提升,从ffh264 的 1.091s 升高到1.697s。据此可见 CoreAVC 的解码效率还是相当惊人的。
总结 个人使用了一些 720P 的片子测试,做为一款需要掏钱的解码器,画面效果相当出色,也没有跳帧的现象发生,但是 CPU 占有率并没有明显下降,是由于 CoreAVC 会在能保持流畅的时候使用剩余 CPU 资源去做画质后处理。在本人 Turion 64 X2 TL-58 /DDR2 800 2*2GB / GeForce 8400M G 128M 的机子上 CPU 占有率在 40% 至 90% 间浮动。没有 1080P 的资源,不知道此时的 CPU 占有率如何。
如果你的 CPU 性能不错但是显卡不被 VDPAU 支持,并且无法忍受 ffmpeg-mt git 1b/s 的下载速度,那么 CoreAVC 的确是目前在 Linux 播放高清视频的最佳选择。
附:如何在 Windows 平台上的 SMPlayer 中使用 CoreAVC
1.到这里下载带有 CoreAVC 支持的 MPlayer 可执行文件。
2.用上面下载的 mplayer.exe 覆盖掉 SMPlayer for Windows 安装时附带的 mplayer.exe。
3.将 CoreAVC 安装目录下的 CoreAVCDecoder.ax 文件复制到 SMlayer 目录下的 codec 目录中。
4.执行上文 SMPlayer 配置中(2)(3)(4)。
5.在 SMPlayer 的 “选项“-”首选项“-“高级”,在“MPlayer选项“选项卡中的“选项“处填入
-vc coreavc,
注意不要漏掉最后的逗号!
Read More:
撰写完此文后才发现原来网上有不少关于 CoreAVC for Linux 的文章。不过浏览了下几乎都是以 Ubuntu 和 CoreAVC 1.5 为例说明的。通过官方教程可以看出 CoreAVC 1.7 及以后相对于 CoreAVC 1.5 还是有一些变化的,希望此文能填补这方面的空白。
另外最近手头有个项目,会比较忙,暂别一个月。祝 Toy 和其他关注 LinuxTOY 的朋友们安好~
VDPAU 为何会说错误无法使用。。我用的挺好,要注意的是安装nvidia驱动时必须安装VDPAU的头文件以供mplayer编译。。 如果使用官方安装是自动复制过去的,部分发行版 例如archlinux的nvidia-utils 其PKGBUILD 要注意加上 mkdir -p $startdir/pkg/usr/include/{,GL,cuda,vdpau} 目前VDPAU的wmv vc1 加速并不非常如意,nvnews的消息说是 180.35 才开始全部支持。但就解x264而言已经相当完美。
小白问题,什么叫做回放?
@arli weng: 我用的 180.29 ,VDPAU 编译成功了,MPlayer -vc 报告 working 了,但是播放时总是初始化设备错误 :25。 在 Fedora 中文用户组论坛上详细讨论了此问题……无果…… 召唤 liangsuilong 兄说明,呵呵~
既然你的 VDPAU 可用,可不可以贴个与 ffh264 的解码性能对比呢?
以前说ffmpeg效率低可以理解,现在根本没必要用coreavc了,另mt版本容易cash。
需要购买的话,我还不如用M$
CoreAVC和ffmpeg-mt的解码性能对比:
mplayer -benchmark -vo null -nosound -vc coreserve Madagascar.Escape.2.Africa.2008.BluRay.720p.x264.DTS-WiK i.Sample.mkv MPlayer SVN-r28799-4.3.3 (C) 2000-2009 MPlayer Team 137 audio & 297 video codecs
Playing Madagascar.Escape.2.Africa.2008.BluRay.720p.x264.DTS-WiKi.Sample.mkv. [mkv] Track ID 1: video (VMPEG4/ISO/AVC), -vid 0 [mkv] Track ID 2: audio (ADTS), -aid 0, -alang eng [mkv] Will play video track 1. Matroska file format detected. VIDEO: [avc1] 1280x720 24bpp 23.976 fps 0.0 kbps ( 0.0 kbyte/s) [ass] auto-open [ass] Init
[ass] Updating font cache.
Forced video codec: coreserve Opening video decoder: [dshowserver] DirectShowServer video codecs Opening device Called unk_IsDebuggerPresent len: 992 ProductVersion: 1.9.0 Win32 LoadLibrary failed to load: nvcuvid.dll, /usr/lib/win32/nvcuvid.dll, /usr/local/lib/win32/nvcuvid.dll Decoder supports the following YUV formats: YUY2 UYVY YV12 I420 Decoder is capable of YUV output (flags 0x2b) Setting fmt Starting Initialization is complete Dshowserver Connected to host VDec: vo config request - 1280 x 720 (preferred colorspace: Packed YUY2) [PP] Using codec's postprocessing, max q = 4. VDec: using Planar YV12 as output csp (no 0) Movie-Aspect is 1.78:1 - prescaling to correct movie aspect. VO: [null] 1280x720 => 1280x720 Planar YV12
Found DirectShow filterSelected video codec: [coreserve] vfm: dshowserver (CoreAVC DShow H264 decoder 1.9 for x86 - http://corecodec.org/)
Audio: no sound Starting playback... V: 55.4 1329/1329 32% 0% 0.0% 0 0
BENCHMARKs: VC: 17.884s VO: 0.009s A: 0.000s Sys: 0.284s = 18.178s BENCHMARK%: VC: 98.3843% VO: 0.0511% A: 0.0000% Sys: 1.5646% = 100.0000% Destroying filter Exiting... (End of file)
mplayer -benchmark -vo null -nosound -vc ffh264 -lavdopts threads=2 Madagascar.Escape.2.Africa.2008.BluRay.720p.x264.DTS-WiKi.Sample.mkv MPlayer SVN-r28799-4.3.3 (C) 2000-2009 MPlayer Team 137 audio & 297 video codecs
Playing Madagascar.Escape.2.Africa.2008.BluRay.720p.x264.DTS-WiKi.Sample.mkv. [mkv] Track ID 1: video (VMPEG4/ISO/AVC), -vid 0 [mkv] Track ID 2: audio (ADTS), -aid 0, -alang eng [mkv] Will play video track 1. Matroska file format detected. VIDEO: [avc1] 1280x720 24bpp 23.976 fps 0.0 kbps ( 0.0 kbyte/s) [ass] auto-open [ass] Init
[ass] Updating font cache.
Forced video codec: ffh264 Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family Unsupported PixelFormat -1
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
Audio: no sound Starting playback... VDec: vo config request - 1280 x 720 (preferred colorspace: Planar YV12) VDec: using Planar YV12 as output csp (no 0) Movie-Aspect is 1.78:1 - prescaling to correct movie aspect. VO: [null] 1280x720 => 1280x720 Planar YV12 V: 55.4 1329/1329 37% 2% 0.0% 0 0
BENCHMARKs: VC: 20.908s VO: 1.627s A: 0.000s Sys: 0.254s = 22.789s BENCHMARK%: VC: 91.7470% VO: 7.1397% A: 0.0000% Sys: 1.1134% = 100.0000%
Exiting... (End of file)
看了第一条就不打算往下看了……
好文章,有米的同学可以注册一个。 虽然需要收费软件配合,但是很喜欢。
@Iven: 已经更换更易懂的词语,感谢提醒。回放和播放是一个含义。
@arch: 其实目前国内的宣称能进行高清解码的XX解码XX影音中使用的高清解码器都是盗版的……
@nacre: 感谢提供对比信息!
非常好的技术文章,感谢分享
@arch: 如果大家都像你这样想,linux下就没有任何商业软件存在了,这样的系统注定是不适合桌面应用的。windows上盗版横行,linux下就不应该用盗版了
我就懒得弄了。。。我的720p还是可以流畅播放的。。。
@黑日白月: 黑兄先赶项目要紧,不过也要劳逸结合啊,一月后再见 :)
黑白兄不是学心理学的么???
证明: http://bbs.fedora-zh.org/showthread.php?t=589
@liangsuilong: 难道大家都以为是程序的项目了? 是数据分析的项目,呵呵~
另 liangsuilong 兄可否分享下 vdpau 与 ffh264 的解码性能对比,以便大家有个参考?
@黑日白月: 不知道为什么,我的-benchmark参数似乎没有起作用,只能截CPU心电图来看了...... 具体图片在我的blog,顺便在linuxtoy做个小广告了...呵呵 http://liangsuilong.blogspot.com/2009/03/linux.html
很有用的教程! 不过,自从用了vdpau以后,就把coreavc删除了。
在我的本子上(pentium m 1.5g,geforce4 go, 1.5g内存)测试。 1080p的片子[伯恩的身份].The.Bourne.Identity.2002.BDRE.1080p.x264.DTSHDC-MySiLU-Sample.mkv 同ffdshow差不多,没有明显不同。
挺好的,能花大笔钱烧在CPU和显卡上,也可以花在CoreAVC上。
慢如牛速,我觉得牛速是很快的,呵呵,是蜗牛吧,插科打诨一下,谢谢!
1.90无法注册成功,1.85可以。
啊 要一百人民币
@黑日白月:
vdpau 在我的机器上运行的很好,解码比ffmpeg好很多,特别是大画面多像素时,cpu一般不超过20%。 至于对比,我没法贴出,因为不同的画面尺寸不同的像素点不同的CPU所产生的结果是完全不一样的。 总之,我在播放720i以下动作较柔和的片子二者的区别大约8:30,在1080i大部分的片子是15:100 也就是说size大了完全ffmpeg解非得很多个CPU才行 ^_^
@arli weng: 文中有误 nvnews的消息说是 180.35 才开始全部支持 的版本应为 180.30,即将推出
另外,要贴mplayer的效率只要关注播放时console 最下方一行的后几组数字就行了,里面第一个% 就是video decode所占的比率,具体可参考文档的faq部分(如果我没记错的话)
显卡太老了,,,不支持HD
我在老机器(754 K8 速龙 2800+)上也用过 mplayer 配合 coreavc。当时放一部 720p 的兄弟连。其速度并没有感觉比 mplayer 直接放能快。
我觉得 mplayer 调用 coreavc 只在一种情况下有意义,那就是 1.9.0 以后 所支持的 cuda。
这是有本质区别的。 CPU占用率下降明显。
如果使用最近 mplayer 的朋友会发现 coreavc 在打 patch 那步失败了,请移步至
http://code.google.com/p/coreavc-for-linux/issues/detail?id=85#c6
下载新的 dshowserver.patch 放置到 coreavc-for-linux/mplayer/ 目录下覆盖已有文件。
如果使用 gcc4.4.0 编译的话会出现编译无法播放 mkv 的情况,请在 ./configure 前添加 CFLAGS="-O2 -fomit-frame-pointer"
@latteye: Athlon 2800+ 又不是多核的~