首页 > 应用开发 > IT综合 > 干货 | 视频直播中硬解码与软解码的选择

我们在计算机上播放的视频文件都是经过压缩的,因为这样有利于节约存储空间;那么在播放过程,就需要进行一个反射的解压缩过程。在以前这项工作都是由CPU来完成的,对于普通分辨率的AVI、Rmvb等文件,绝大多数的CPU都可以胜任;但是发展到高清视频(1080i/p)之后,数据解压缩的工作量比以前翻了数倍,这让很多处理器叫苦不迭。
随着技术的发展,工程师们发现显卡的GPU/VPU要比CPU更适合这类大数据量的、低难度的重复工作。视频解码工作从处理器那里分离出来,交给显卡去做,这就叫做“硬解码”,例如Nvida的PureVideo、AMD的UVD技术等等;与之对应的,以前那种纯粹依靠CPU来讲稿的方式则是“软解码”。不过受到技术条件的限制,纯粹的“硬解码”在现阶段是不存在的,CPU依然在发挥一部分作用,只不过硬解码时GPU/VPU已经成为运算的主力。
软硬编解选择
事物都有两面性,软解码和硬解码的并存,存在即合理,没有哪个最好,网上有不少关于选择软解还是硬解的分析文章,但根本问题是,没有一个通用方案能最优适配所有操作系统和机型。以后两者都会更好,而对于如何选择,根据项目需要。
这里介绍一些经验:
推流编码:推荐Andorid4.3(API18)或以上使用硬编,以下版本使用软编;iOS使用全硬编方案;
播放解码:Andorid、iOS播放器都使用软解码方案,经过我们和大量客户的测试以及总结,虽然牺牲了功耗,但是在部分细节方面表现会较优,且可控性强,兼容性也强,出错情况少,推荐使用。
附软硬编解码优缺点对比:

软解码和硬解码的作用
软编码:使用CPU进行编码
硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等
软编码和硬编码比较
软编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点。
硬编码:性能高,低码率下通常质量低于软编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。
举个例子,CPU 相当于公司的 CEO ,GPU相当于公司技术总监、产品经理之类,来了一个需求,如果采用软解码,那就是让 CEO 去画原型,去一线写代码,这期间还要忙着各种大小的事物处理,如果采用硬解码,那就是CEO 朝技术总监、产品经理发指令,让他们去完成一件事,并且定期查询完成的程度。
视频的编解码是一个很消耗性能的操作,最简单的例子就是前几年玩游戏的时候,经常手机发烫,有些配置差一点的手机,看个视频手机就发烧发热。
云端机型及网络适配
上面分析了很多针对视频编解码的参数,但实际情况最好的编解码效果是需要根据机型的适配的,由于iOS的设备类型较少,可以做到每个机型针对性的测试和调优,但是对于Android就非常难做到逐款机型针对性调优,并且每年都会出产不少的新机器,如果代码中写死了配置或判断逻辑将非常不利于维护和迭代。

所以我们就诞生了一个想法,这些判断逻辑或配置是否可以放在云上呢?
这样就产生了云端机型与网络适配的技术。
终端在推流、播放前会获取通过协议上报当前的机型配置、网络情况、IP信息。
云端会返回一个已最适合的编解码策略配置:
走软编还是硬编、各项参数的配置,就近推流服务的IP,就近播放服务的IP。终端获取一次即可,不需要每次推流、播放前都去获取一次。这样,在我们不断的迭代和完善机型编解码适配库的同时,所有使用该技术的直播APP都将收益。
总结
分析很多直播后端、终端的关于低延迟、秒开的优化技术,在苏宁视频直播云上都已有了相关的实践,都是一些较“静态”的技术。实际提供稳定、低延迟、流畅的直播服务,是日常中非常大量细致的监控、算法和动态运营的结果,并不是实现了某些的技术点,就能坐享一套稳定的直播服务,只能说是完成了万里长城的第一道砖。
原文链接:https://mp.weixin.qq.com/s/oWJgZOuA_uQ5NP1qOwowjw
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31559352/viewspace-2219925/ ,如需转载,请注明出处,否则将追究法律责任。