如何解决直播过程中直播功耗高的问题 | 直播疑难杂症排查
2017-06-22 11:29
447 查看
《直播疑难杂症排查》系列已经更新了 9 篇,我们为用户分析了视频直播过程中出现的问题,并一一作出排查。此次我们重点看看直播过程中出现的直播功耗高的问题。
继《直播技术详解》系列文章之后,我们推出了这个新的系列《直播疑难杂症排查》,把解决直播问题的经验逐步分享出来,同时也会穿插一些音视频开发的基础知识和优化经验,希望能够帮助到直播领域的开发者们。
本系列会涵盖的内容包括但不限于如下一些主题:
- 播放失败
- 直播卡顿
- 首开慢
- 延时高
- 音画不同步
- 马赛克严重
- 播放黑屏、花屏、绿屏
- 播放杂音、噪音、回声
- 点播拖动不准
- 直播发热问题
- 其他问题(待续)
问题现象
直播过程中手机发热严重,耗电快。问题排查
导致手机功耗高,发热严重的根本因素,无外乎就是一点:CPU/GPU 占用率高,所以,我们首先要分析下,哪些因素会导致 CPU/GPU 占用率高。1.数据量太大
直播主要由:视频采集 -> 视频处理(剪裁、美颜、滤镜) -> 编码 -> 推流 这些环节组成。
在这整个流程中,决定数据量大小的因素有哪些呢 ?
- 视频的尺寸(例如:1280 x 720 的图像,明显要比 320 x 240 的图像处理起来费劲)
- 视频的帧率(例如:每秒 30 帧,明显要比每秒 15 帧,处理起来费劲)
因此,在不影响业务体验的情况下,适当减少视频的尺寸和帧率,是可以明显降低后续环节 CPU/GPU 的负荷的,从而显著降低功耗。
2.大量的格式转换
不同的模块对数据格式的要求,往往有差异,比如 Android 摄像头出来的数据大多是 NV21 的,而编码器一般要求 I420 格式的数据;再比如 ffmpeg 解码的视频往往是 YUV 格式,而渲染显示往往需要 RGB 格式,等等。
我们要尽可能减少不同格式之间的数据转换,或者尽可能利用 GPU 来处理一些复杂的格式转换,比如利用 OpenGL 直接渲染 YUV 格式的数据,而不是用 CPU 做一次 YUV -> RGB 的转换,就是一个不错的选择。
3.对图像进行放大操作
《直播疑难杂症排查(6)— 马赛克严重》这篇文章有提到,非常不推荐把一个小尺寸的图片 -> 放大 -> 大尺寸图片,这样很容易出现马赛克。
其实,这样的设计,不仅仅是容易出现马赛克,而且在图像放大的过程中,由于涉及到复杂的插值运算,也会非常消耗 CPU。
同理,图像的缩小或者剪裁,同样也会消耗一定的 CPU,只不过相比于图片放大要好点。
因此,最好的办法,就是小心选择摄像头的预览分辨率以及推流的尺寸,尽可能让两者保持一致,这样,才能最大化地节省 CPU 的消耗。
4.软编/软解
这个原因或许大家都懂,软编/软解靠的是 CPU,非常耗性能,而硬编/硬解是使用专门的硬件编解码器模块,会显著降低 CPU 的负担,相对而言,会省电很多。
只不过需要小心各种 Android 机型兼容性问题,对于某些奇葩设备,还是加入硬编/硬解黑名单的好。
5.其他方面
当然,导致功耗高的因素还有很多,这里就不一一展开说明了,列举如下:
- 人脸识别/美颜/滤镜,对 CPU/GPU 消耗很大
- 代码逻辑中过多的 memory copy 操作
- 后台线程频繁唤醒手机访问网络或者读写 SDCard
- App 的一些动画特效
- 其他等等
活动推荐:
七牛开启史上最大的促销哦活动,首充送1500,最高送8000!
相关文章推荐
- 如何解决直播过程中的直播功耗高问题 | 直播疑难杂症排查
- 如何在直播中解决黑屏、花屏、闪屏问题 | 直播疑难杂症排查
- 如何在直播中解决黑屏、花屏、闪屏问题 | 直播疑难杂症排查
- 如何在直播中解决点播拖动不准问题 | 直播疑难杂症排查
- 如何在直播中解决黑屏、花屏、闪屏问题 | 直播疑难杂症排查
- 如何解决直播中的播放杂音、噪音、回声问题 | 直播疑难杂症排查
- Android 如何解决开机过程kernel logo到开机动画黑屏问题
- iOS开发工具-如何使用网络封包分析工具Charles,通过配置proxy对http、https、tcp、udp 等协议的请求响应过程交互信息进行分析、判断、解决我们移动开发中的遇到的各种实际问题。
- 如何用busybox制作Linux及解决制作过程中会出现的问题
- cocos2d-x 3.4版本游戏打包AKP (重点记录如何解决打包过程中遇到的各种问题)
- 如何排查解决修改表结构,改表名超时的问题
- spark:学习过程中遇到的一些问题及解决方法(如何将本地文件发布到HDFS)--11
- 编译工程时报java:[1,0] illegal character: \65279问题排查与解决过程
- 如何解决编译过程中遇到ASN1C相关的问题
- 抓取网页中的内容、如何解决乱码问题、如何解决登录问题以及对所采集的数据进行处理显示的过程
- OA系统使用过程中遇到安全问题如何解决
- 如何解决Remoting无法传输存储过程参数的问题
- 编译工程时报java:[1,0] illegal character: \65279问题排查与解决过程
- HBase一次慢查询请求的问题排查与解决过程
- 如何解决IOS开发过程中,服务器为windows或者不含有CA证书的推送问题"