【Android音视频】视频开发优化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Android音视频】视频开发优化相关的知识,希望对你有一定的参考价值。
参考技术A 本文主要记录一些在视频开发中会遇到的一些优化及自己的实现思路。在刷抖音等短视频的时候,会发现视频基本是秒开的,那么怎么实现呢?
我的实现思路:视频采用m3u8格式的,利用其特性,我们可以预先缓存其中的第一个ts文件和m3u8文件,然后视频播放时通过访问本地服务器读取缓存下来的m3u8和第一个ts文件,缩短了起播时网络加载这一步的时间,通过测试发现,使用android自带的播放器对视频播放的话,视频起播稳定在1s左右,视频Ijkplayer播放器的话起播时间稳定在0.2s左右,基本实现了视频秒开的功能,当然还可以通过实际项目的需要,进一步在视频生成时控制视频的分辨率、帧率、码率等,规定第一个ts的时间等。
实现Demo: Android短视频秒开实现
在列表视频的开发中,会存在滑动过程中卡顿的现象,这是由于release这个方法是阻塞的,因此我们可以将其异步处理。
本文持续更新,若你在开发中遇到优化问题,可留言讨论。
如何做好 Android 端音视频测试?
在用户眼中,优秀的音视频产品应该具有清晰、低延时、流畅、秒开、抗丢包、高音效等特征。为了满足用户以上要求,网易云信的工程师通过自建源站,在SDK端为了适应网络优化进行QoS优化,对视频编码器进行优化,同时对音频算法进行优化。
推荐阅读
《短视频技术详解:Android端的短视频开发技术》
《如何快速实现移动端短视频功能?》
弱网环境测试
网易云信直播项目上线后,出现了音视频卡顿的问题,音视频卡顿现象通常出现在网络条件不是特别理想的情况,一般直播画面频繁出现缓冲标志或者直播画面一卡一卡的现象。
造成直播视频卡顿的原因:
1、CDN 节点覆盖不全:CDN服务器覆盖不足导致区域卡顿、运营商覆盖力度不足导致区域性卡顿;
2、CDN 接流节点不佳:主播上行推流卡顿导致直播卡顿;
3、主播网络差:数据上传受阻;
4、观众网络差: 数据下行受阻;
分析解决策略:
1、CDN节点覆盖不全:接入多家CDN节点,尽可能覆盖全球网络;
2、CDN接流节点不佳:自建源站;
3、主播网络差:SDK开发对QoS上行调整;
4、观众网络差:SDK开发对QoS下行调整;
测试需求:直播端QoS测试;
测试难点:
1、如何实现低成本、高效率的弱网环境?
2、怎样的网络才是导致用户卡顿的弱网环境?
3、弱网优化参数这么多,如何高效提取分析数据?
4、测试完了,怎么可以快速提供简洁清晰的结果给开发?
弱网测试工具:
弱网损伤仪、network emulator、fiddler、tc;
弱网损伤仪成本比较高,使用复杂;network emulator是微软的开源工具,可以实现带宽、丢包、延时、抖动等弱网参数的限制,被称为简易版本的弱网损伤仪,实现成本比较低,最终搭建弱网环境选择的是networkemulator工具;
network emulator工具使用建议:
1、办公环境内使用人多时,4G信号通道出现拥塞,虽然网络上行下行带宽足够,但网络丢包严重,造成限制网络不稳定的现象;
解决方法:开通支持开启5G信道的无线热点,部分缓解网络拥塞的现象;
2、弱网限制效果验证;
弱网环境参数选择;
常见弱网限制参数;
带宽、丢包、延时、抖动、综合网络;
具体数值选择方法:
第一步:逼近法,对上述限制参数从由高到低、由低到高给出范围;
第二步:业界标准和产品需求去反向要求开发优化的力度;
第三步:通过大数据筛选用户卡顿场景数据,覆盖用户出现卡顿的场景;
弱网测试常用参数:
测试常用高清视频分辨率为640*480,一般要求码率为800kbps以上,带宽限制一般设置为三挡,800kbps、600 kbps以及400kbps;丢包会设置5%、3%、1%;延时会设置300ms、200ms、100ms等限制;综合网络情况是将带宽、丢包以及延时进行结合的参数;为了监控用户实际使用的一些情况,也会进行一些4G、3G网络的覆盖;
测试流程:
开发提交测试之后,测试会针对入网效果进行简单测试,针对网络场景发现的bug返回给开发继续优化,开发优化完成之后传给测试,测试将结果再传给开发进行详细优化,过程需要反复进行,下图为测试开始进行的环境图:
直播与播放连接在同一个Wifi下面,用network emulator进行弱网限制,直播与播放都是从CDN拉流,然后获取直播和播放端一些音视频相关的统计数据,在播放端通过观测方式主观评测优化效果。
测试效率分析:
1、Android 端数据手工收集;
2、数据导入excel分析,耗时间;
3、测试工作量比较大;
解决策略:
1、Android 端开发 MCN 性能数据收集以及日志分析工具;
2、测试工具平台接收来自Android端的数据,进行数据汇总分析;
MCN Android 端:提供设备性能数据上传,包括CPU占用率、内存占用率、电量等数据,SDK统计数据上传,辅助弱网测试、视频测试等的开展。
实现原理:利用Android的系统API获取系统性能参数getProcessMemoryInfo,读取SDK存储在本地的日志,通过HTTP接口上传到测试工具平台展示。
测试工具平台:支持解析日志文件和HTTP请求,利用highcharts作图,提供数据对比分析作图并且保存功能,大大降低了测试完成之后数据整理作图分析的工作量,给开发提供了最为直观的测试结果。
测试执行:
测试结果展示:
上图中的蓝色线是实际带宽,黑色线代表的是评估带宽,从aos-1108-1这个图可以看出评估以及实际占用的带宽是非常接近的,通过这个图开发可以了解优化的效果,测试可以了解测试的结果。
视频测试
用户在视频实际使用过程中会发现,网络以及设备一致时,有些主播视频可以更加清晰;有些主播动态的图片会模糊,出现马赛克的情况;有些主播画面看起来比较细腻,甚至主播的毛孔都可以清晰看到,而有些主播看起来画面是模糊的;这就需要开发通过替换编码器的一些算法或者做一些参数的调优对编码器进行优化;
安卓端视频测试方面会影响的因素包括:拍摄场景、编码参数、设备性能、安卓兼容性以及网络。
前期的视频测试主要依靠主观评估,通过人肉眼查看编码的不同序列,运动剧烈的画面看马赛克、复杂的画面需看细节、录屏密集文字看边缘锐度等等;客观评估需要用PSNR。
PSNR评估是对编码器性能的评估,在排除网络影响的情况下,依赖一些视频序列评估编码器的编码质量。
同时视频测试还需要看一下码率控制,看一下输出码率是否符合设置给编码器的码率;
视频测试还需要考虑移动端设备的性能,相同编码参数下的CPU、内存的占比情况;
测试执行:
测试环境会用到MCN Android端去搜集实时音A端和实时音B端的数据,需要用network emulator模拟一些网络参数的影响,然后去测试工具平台上进行评估。
音频优化测试
音频决定了70%的用户体验,虽说用户对画面的直观感受是以看为主,以听为辅。如果说一个主播在直播时只有画面没有声音,这将直接影响用户体验;如果主播直播时声音断断续续,或者主播声音质量较低,都会影响直播的质量。
在音频方面面临的挑战有:音频编码器,不同的音频编码器有Opus,AAC等,这些编码器里面的部分算法不太一样,其中包括对音频的处理,对声音峰值的处理,对网络参数的应对,它的处理方式不太一样。实时音端的编码器用的是Opus,Opus相对于AAC来说,编码码率会更低,能够提供一些更高质量的音频体验;网络对音频体验也有影响,无论音频还是视频都会受网络的影响;回声消除对音频体验也有影响,如果没有回声消除,用户的音频体验会相对较差;啸叫以及安卓设备的差异都会对音频质量产生影响。
音频质量的评估
音频从IP电话开始发展,音频的技术处理已经相对成熟,同时对音频的测试技术也相对成熟,目前有较多付费软件可以实现对音频质量的评估,包括VQT等;
VQT:语音质量客观评估工具,可以包括 POLQA(ITU-T P.863),PESQ(ITU-TP.862),PESQLQ / LQO(P.862.1),PESQ WB(P.862.2),PAMS(ITU-TP.800)和PSQM / PSQM +(ITU-TP.861)等音频质量的评估;
目前网易云信使用VQT中的POLQA来评估网络变化对音频的影响,该评估主要使用了MOS分值,这是衡量通信系统语音质量的重要指标,5分为评估的最高分;
安卓端的覆盖策略首先会提供一个线上数据收集平台,根据不同的手机型号提交测试需求,也会挑选市面上TOP20的机型去做覆盖,也会挑选一些用户反映问题最多的机型去做一些针对性测试覆盖;
VQT中POLQA的环境配置:
优化后的POLQA环境配置:
优化后的POLQA环境配置可以对网络参数进行评估,对数据进行整合,实现多组数据的对比,实现自动化结果的展示。
以上就是安卓端音视频测试全过程,想要获取更多产品干货、技术干货,记得关注网易云信博客。
以上是关于【Android音视频】视频开发优化的主要内容,如果未能解决你的问题,请参考以下文章