x86平台如何优化安卓的多媒体类应用1
众所周知,由于对络流媒体格式的解析支持的不够好,所以当前市面上的视频提供商如,乐视,暴风影音等鲜有直接使用安卓的多媒体播放器,他们多是基于开源的FFmpeg加上自己的解码库,开发自己的播放器。这样做的好处是可以方便的解析M U8和FLV等流媒体格式,又可以支持RM和RMVB等比较流行的视频格式,还不用跟着去不断的更新安卓多媒体播放器。但是也带来了一个问题,用自己开发的多媒体播放器在多数情况下就只能使用软件来解码视频文件,而无法使用GPU的硬件加速能力,这会带来过高的CPU占用率,进而使得播放视频时的功耗过大,很大的影响了用户体验。
这个问题在x86平台上尤其明显,由于这些多媒体类应用没有针对x86平台做过优化,所以其本地代码仍然是基于ARM编译器编译的,直接运行在x86平台上,还要做一次二进制转换,这对于软件解码造成的过高CPU占用率无异于雪上加霜,会致使更高的CPU占用率和更高的功耗。
我们曾经直接将乐视和暴风影音的安卓客户端(ARM版本)直接运行在Intel最新的CLVT+ 平台的参考样机上,效果很差,CPU占用率竟然高达60%,还有卡顿的现象,但是经过Intel Atom平台SSSE 和Yasm指令集的优化,并且用ICC(Intel C/C++ Compiler)工具链编译以后,性能提升非常明显,CPU占用率竟然下降到1 %以下,这已明显优于同级别ARM平台运行此应用时的性能。
以下是对比乐视安卓客户端的ARM版本和x86优化后的版本运行在Intel参考样机上的CPU占用率对比图,性能有了4.5倍的提升。
乐视客户端优化比较
暴风影音经过Atom 平台SSSE 和Yasm指令集的优化,性能提升更明显,在K900上测试,优化前的ARM版本和优化后的x86版本CPU占用率从40%下降到 %,性能有了1 倍的提升。
乐视客户端优化对比
取得这么大的性能提升,连这些ISV都惊叹不已,究竟是如何做到的呢?
首先,Intel的ATOM平台支持SSSE 指令集,这些指令集对优化YUV转RGB数据最高可能有16倍的性能提升,而对于多数视频提供商使用的FFmpeg开源库,有大量的YUV转RGB需要处理,因此性能会有提升。
其次FFmpeg项目中有大量基于x86优化过的汇编代码,而这些代码在基于ARM平台做交叉编译时一般会被疏忽掉。使用YASM编译工具可以最大限度的复用这些基于x86优化过的汇编代码,只有话费很少的精力,就可以获得很高的性能提升。
使用YASM以后,对FFmpeg和X264进行性能测试结果如下:
YASM对FFmpeg和X264优化性能比较
基于ICC对本地库进行重编译,也会使得性能提升。ICC完全兼容GCC,并对Intel ATOM进行了寄存器编译优化,通过ICC编译后的本地代码,最高可以有 0%的性能提升。
除了以上各种手段以为,Intel还给合作伙伴提供了GPA(Intel Graphics Performance Analyzer) 和 Intel Vtune Amplifier 两个工具用于开发过程中的调试。GPA可以实时跟踪应用运行时CPU和GPU的占用率,用于监测应用运行时是否有死锁点。Vtune可以搜集应用运行一段时间内的所有操作,跟踪到每一条指令的运行。正是由于有这些丰富的调试手段,我们的合作伙伴才可以在短时间内大幅度提高IA平台上多媒体播放的性能。
引用一名乐视的多媒体工程师的话:“看着自己的多媒体应用在x86平台上可以高效流畅的运行,是一件非常有成就感的事!” 我们也希望越来越多的多媒体运用通过优化以后,可以在x86平台上更高效流畅的运行。
幼儿大便干
小孩便秘怎么办吃什么
小孩突然流鼻血
绥化治疗包皮包茎方法昆明复美白癜风医院专家号多少钱
三明白癜风医院哪家好
- 上一篇:华米高通在一起eSIM也能全网通
- 下一篇:移动花卡开启申请不过要一次性冻结花呗额度