论文部分内容阅读
在媒体播放器当中,为什么优酷、乐视、暴风影音等主流视频服务提供商鲜有直接使用安卓系统的产品问世?
这是因为,安卓系统对网络流媒体格式的解析支持问题一直没有得到有效解决。因此,视频服务提供商多是基于开源Ffmpeg开发自己的解码库,推出自己的播放器。这样做的好处是:可以方便解析M3U8和FLV等流媒体格式,支持RM和RMVB等比较流行的视频格式,还不用总跟着谷歌去更新安卓多媒体播放器。
软件解码占用CPU资源
但是,这种做法也带来了严重的问题,用开源代码开发的多媒体播放器在多数情况下,只能使用软件来解码视频文件,而无法利用GPU硬件的加速能力。这将导致过高的CPU占用率,进而使手机在播放视频时功耗过大,影响用户体验。
这个问题在x86平台上尤为明显,由于大多数多媒体应用没有针对x86平台做过优化,所以其本地代码仍然是基于ARM编译器编译的,直接运行在x86平台上还要做一次二进制转换,因软件解码而造成的过高的CPU占用率无异于雪上加霜,会导致更高的CPU占用率和更高的手机功耗。
当乐视和暴风影音的安卓客户端(ARM版本),直接运行在Intel最新的CLVT 平台的参考样机上时,CPU占用率竟然高达60%,视频播放中还出现了卡顿现象。
优化三利器
但在同样条件下,如果经过Intel Atom平台SSSE3和Yasm指令集的优化,并且用ICC(Intel C/C Compiler)工具链编译后,性能却可以得到非常显著的提升:CPU占用率可下降到13%以下,优于同级别ARM平台运行此应用时的性能。
为何在x86平台上,也可以看到性能的显著提升呢?首先,Intel的ATOM平台支持SSSE3指令集,这些指令集针对YUV转RGB数据时的性能优化,最高可实现16倍的性能提升。对于多数在线视频提供商使用的FFmpeg开源库,有大量的YUV转RGB需要处理,因此性能会有显著提升。
其次,FFmpeg项目中有大量针对x86平台进行优化的汇编代码,这些代码在基于ARM平台做交叉编译时一般会被忽略掉。使用YASM编译工具可以最大限度地复用这些汇编代码,从而获得性能提升。
再次,基于ICC对本地库进行重编译,也会获得性能的提升。ICC完全兼容GCC,并对Intel ATOM进行了寄存器编译优化,通过ICC编译后的本地代码,最高可实现30%的性能提升。
除以上各种手段之外,Intel还为合作伙伴提供了GPA(Intel Graphics Performance Analyzer)和 Intel Vtune Amplifier 两个工具用于开发过程中的调试。借助这些调试手段,就可以在短时间内大幅度提高x86平台上多媒体播放的性能。
这是因为,安卓系统对网络流媒体格式的解析支持问题一直没有得到有效解决。因此,视频服务提供商多是基于开源Ffmpeg开发自己的解码库,推出自己的播放器。这样做的好处是:可以方便解析M3U8和FLV等流媒体格式,支持RM和RMVB等比较流行的视频格式,还不用总跟着谷歌去更新安卓多媒体播放器。
软件解码占用CPU资源
但是,这种做法也带来了严重的问题,用开源代码开发的多媒体播放器在多数情况下,只能使用软件来解码视频文件,而无法利用GPU硬件的加速能力。这将导致过高的CPU占用率,进而使手机在播放视频时功耗过大,影响用户体验。
这个问题在x86平台上尤为明显,由于大多数多媒体应用没有针对x86平台做过优化,所以其本地代码仍然是基于ARM编译器编译的,直接运行在x86平台上还要做一次二进制转换,因软件解码而造成的过高的CPU占用率无异于雪上加霜,会导致更高的CPU占用率和更高的手机功耗。
当乐视和暴风影音的安卓客户端(ARM版本),直接运行在Intel最新的CLVT 平台的参考样机上时,CPU占用率竟然高达60%,视频播放中还出现了卡顿现象。
优化三利器
但在同样条件下,如果经过Intel Atom平台SSSE3和Yasm指令集的优化,并且用ICC(Intel C/C Compiler)工具链编译后,性能却可以得到非常显著的提升:CPU占用率可下降到13%以下,优于同级别ARM平台运行此应用时的性能。
为何在x86平台上,也可以看到性能的显著提升呢?首先,Intel的ATOM平台支持SSSE3指令集,这些指令集针对YUV转RGB数据时的性能优化,最高可实现16倍的性能提升。对于多数在线视频提供商使用的FFmpeg开源库,有大量的YUV转RGB需要处理,因此性能会有显著提升。
其次,FFmpeg项目中有大量针对x86平台进行优化的汇编代码,这些代码在基于ARM平台做交叉编译时一般会被忽略掉。使用YASM编译工具可以最大限度地复用这些汇编代码,从而获得性能提升。
再次,基于ICC对本地库进行重编译,也会获得性能的提升。ICC完全兼容GCC,并对Intel ATOM进行了寄存器编译优化,通过ICC编译后的本地代码,最高可实现30%的性能提升。
除以上各种手段之外,Intel还为合作伙伴提供了GPA(Intel Graphics Performance Analyzer)和 Intel Vtune Amplifier 两个工具用于开发过程中的调试。借助这些调试手段,就可以在短时间内大幅度提高x86平台上多媒体播放的性能。