众所周知,由于安卓对网络流媒体格式的解析支持的不够好,所以当前市面上的在线视频提供商如优酷,乐视,暴风影音等鲜有直接使用安卓的多媒体播放器,他们多是基于开源的FFmpeg加上自己的解码库,开发自己的播放器。这样做的好处是可以方便的解析M3U8和FLV等流媒体格式,又可以支持RM和RMVB等比较流行的视频格式,还不用跟着谷歌去不断的更新安卓多媒体播放器。但是也带来了一个问题,用自己开发的多媒体播放器在多数情况下就只能使用软件来解码视频文件,而无法使用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平台运行此应用时的性能。

以下是对比乐视安卓客户端的ARM版本和x86优化后的版本运行在Intel参考样机上的CPU占用率对比图,性能有了4.5倍的提升。

乐视客户端优化对比

暴风影音经过Atom 平台SSSE3和Yasm指令集的优化,性能提升更明显,在K900上测试,优化前的ARM版本和优化后的x86版本CPU占用率从40%下降到3%,性能有了13倍的提升。

乐视客户端优化对比

取得这么大的性能提升,连这些ISV都惊叹不已,究竟是如何做到的呢?

首先,Intel的ATOM平台支持SSSE3指令集,这些指令集对于优化YUV转RGB数据最高可能有16倍的性能提升,而对于多数在线视频提供商使用的FFmpeg开源库,有大量的YUV转RGB需要处理,因此性能会有提升。

其次FFmpeg项目中有大量基于x86优化过的汇编代码,而这些代码在基于ARM平台做交叉编译时一般会被忽略掉。使用YASM编译工具可以最大限度的复用这些基于x86优化过的汇编代码,只有话费很少的精力,就可以获得很高的性能提升。

使用YASM以后,对FFmpeg和X264进行性能测试结果如下:

YASM对FFmpeg和X264优化性能对比

基于ICC对本地库进行重编译,也会使得性能提升。ICC完全兼容GCC,并对Intel ATOM进行了寄存器编译优化,通过ICC编译后的本地代码,最高可以有30%的性能提升。

除了以上各种手段以为,Intel还给合作伙伴提供了GPA(Intel Graphics Performance Analyzer) 和 Intel Vtune Amplifier 两个工具用于开发过程中的调试。GPA可以实时跟踪应用运行时CPU和GPU的占用率,用于监测应用运行时是否有死锁点。Vtune可以收集应用运行一段时间内的所有操作,跟踪到每一条指令的运行。正是由于有这些丰富的调试手段,我们的合作伙伴才可以在短时间内大幅度提高IA平台上多媒体播放的性能。

引用一位乐视的多媒体工程师的话:“看着自己的多媒体应用在x86平台上可以高效流畅的运行,是一件非常有成就感的事!” 我们也希望越来越多的多媒体应用通过优化以后,可以在x86平台上更高效流畅的运行。

android x86 优化,x86平台如何优化安卓的多媒体类应用相关推荐

  1. 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | Launcher 应用启用普通安卓应用 | 应用进程分析 )

    文章目录 一. Launcher 应用 startActivitySafely 方法分析 二. Launcher 中的 startActivity(View v, Intent intent, Obj ...

  2. Rockchip Android平台内存优化及系统裁剪

    Rockchip Android平台内存优化及系统裁剪 文章目录 Rockchip Android平台内存优化及系统裁剪 编译32bit的Android系统 启用Android GO的配置 系统裁剪 ...

  3. android 4.4 x86 iso,android x86官方版下载_android x86 4.4 iso 官方最新版[网盘资源]_零度软件园...

    Android-X86是由Beyounn和Cwhuang主持设计的.提供了一套完整的可行源代码树,配套文档以及Live CD与Live USB.Android系统主要应用在智能手机以及平板电脑设备上. ...

  4. android开发笔记之APK大小优化

    蛋痛引发的争论 晚上,实在是无聊的蛋痛,就用自己的APK查看了一下手机中所有应用软件的信息,忽然看到一个APK, /system/priv-app/ApeTaleEditor/ApeTaleEdito ...

  5. 【android学习】记录应用内存优化

    图片优化(效果最明显) 过度图片的回收  原因分析: 在做冷启动时候,很多人写一个如下 <style name="MainTheme" parent="@andro ...

  6. 【Android 性能优化】布局渲染优化 ( GPU 过度绘制优化总结 | CPU 渲染过程 | Layout Inspector 工具 | View Tree 分析 | 布局组件层级分析 )

    文章目录 一. GPU 过度绘制优化总结 二. CPU 渲染过程 三. CPU 渲染性能调试工具 Layout Inspector 四. Layout Inspector 组件树 DecorView ...

  7. 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 背景设置产生的过度绘制 | Android 系统的渲染优化 | 自定义布局渲染优化 )

    文章目录 一. 背景设置产生的过度绘制 二. Android 系统的渲染优化 1. 透明组件数据传递 2. GPU 存储机制 3. Android 7.0 之后的优化机制 三. 自定义布局渲染优化 一 ...

  8. 【Android 性能优化】应用启动优化 ( 阶段总结 | Trace 文件分析及解决方案 | 源码分析梳理 | 设置主题的方案总结 ) ★

    文章目录 一. 常用的耗时方法优化方案 ( 重要 ) 二. 源码分析梳理 1. 应用启动时间计算相关源码分析 2. Launcher 应用中启动 Android 应用流程 三. 启动白屏解决方案 An ...

  9. Nicholas谈UE4对手游平台的优化和支持

    GameLook报道/6月5日,2015年第三期GameLook开放日‧虚幻引擎专场活动在上海正式举行,此次活动由Epic Games与GameLook联合主办. 虚幻引擎对于手机平台究竟提供了哪些支 ...

最新文章

  1. 猫哥教你写爬虫 046--协程-实践-吃什么不会胖
  2. cloning java_深入浅出Java中的clone克隆方法,写得太棒了!
  3. python数据趋势算法_Python数据拟合与广义线性回归算法学习
  4. 用贪心算法解决马踏棋盘问题
  5. Unity 3D:在现有的Android游戏场景中显示AdMob的横幅
  6. android 获得应版本号,Android获得本应用版本号和版本名称
  7. 企业微信oauth认证_OAuth2身份认证
  8. nginx系列之二:配置文件解读
  9. 简单工程验收单表格_中铁超大型工程项目-123个精细化管理手册配套表格附件,超全...
  10. 关于c#静态构造函数
  11. Android开发在路上:少去踩坑,多走捷径
  12. arcgis合并tif影像_ARCGIS多种影像裁剪
  13. 【语音去噪】基于matlab GUI傅立叶变换语音降噪混频【含Matlab源码 297期】
  14. 各版本opencv官网下载路径
  15. 打印网页中的指定内容
  16. flash模拟器调全屏_模拟全屏或调暗背景
  17. 鸿鹄功能架构图:实现一站式异构数据分析
  18. 汇编语言程序设计51单片机
  19. Python tkinter改变光标样式
  20. questasim中点击 add wave 后,显示 no data 解决方法

热门文章

  1. 十六进制颜色和RGB互转
  2. 冒泡与捕获,target与currenTarget的区别
  3. 可以双人玩的三子棋!
  4. IIS误删了默认网站,恢复方法
  5. 案例:红酒数据集分析
  6. X$BH及V$BH中各字段意义
  7. ubuntu10.04安装有线网卡驱动
  8. A矩阵与B矩阵相似充要条件?
  9. 年终小结:什么是智能?
  10. 何以解忧,唯有暴富,2019再见