昨天参加了infoq组织的百度技术沙龙,感受很深,在此分享一下自己的所感所悟。
之前,我很少关注这些技术分享的沙龙,自己平时工作学习中遇到问题基本是与同事间或百度直接解决,但这种问题基本上是技术细节的问题,对整个项目系统级别的问题很少考虑,昨天的沙龙让我开拓了眼界。一个合格的工程师不仅需要技术过硬,还要对整个系统,架构有一个清晰的把握。
昨天沙龙的主题分为两部分:移动直播,移动游戏
下面就昨天袁老师分享的百度云移动直播平台技术,梳理一下自己的想法
移动直播的4个痛点
1. 如何在多样的网路及设备下保持直播的流畅性
2.如何降低延迟,提供客户更舒适的体验
3.如何在有限的网络带宽下保持直播视频的清晰度
4.如何在有限的计算资源中处理音视频数据,如美颜、磨皮等
除了这四个问题,我认为如何在码率转换时实现音轨与视频同步,视频内容是否涉黄等也是其中的痛点。
针对以上痛点,看看百度云是如何解决的,这其中有哪些是我们需要深入了解并借鉴的经验。
先谈一下百度云移动直播的架构体系:
直播这个架构简单的说就是三部分:直播端,服务器端,客户播放端。首先直播端通过摄像头、麦克采集视频音频数据通过最近的cdn节点推送到接流服务器;在服务器端进行相应的管理,如鉴黄、转码、码率转换等操作后将这些数据推到播放源服务器进行统一的合并处理;这些都处理完了就直接退到cdn节点下,播放端使用就近cdn节点资源进行播放。
以上就是简单的描述了一下它的架构体系,具体有张架构图手机拍的不是很清楚,等袁老师ppt下来后在上传吧。
ok,下面该上点干货了,让我们来看看百度云平台是如何解决上面的一些问题的。
1.首屏秒开
百度云使用GOP Cache 与追赶播放技术实现首屏秒开。(具体技术细节自行Google吧,感觉这个技术完全可以借鉴)
2.上传下载加速,实现最低延迟1-3秒
硬件方面:百度自建全国CDN节点并且融合了一些第三方国外节点
技术方面:百度摒弃了tcp的三步握手协议,自定义了一套私有协议加速cnd节点与源之间的链路,提升数据的传输速率
3.多码率满足复杂环境需求
直播源数据到达服务端时会进行相应的转码及码率的转换后提供多条线路来满足强网、弱网、特殊清晰度需求的观众。
4.分场景实时转码
不同的场景录制的视频品质是不同的,如户外视频基本是摄像头录制的画面品质比较圆润,游戏视频则是电脑合成的锐化程度比较高。针对这些不同的情况,百度云采用不同GOP length,Deblocking filter 等相应的处理,保证多场景下的视频质量。
5.全流程监控
对上传下载流程度、帧率、码率、首帧时间、建联时间、错误次数等进行全方位的监控。
6.智能多媒体处理
这一块主要是接入百度另一块业务部门对视频进行数据分析,智能识别出人脸,对亮肤、磨皮等美颜功能提供技术支持。
上面的一些做法我们可以看出,百度云的移动直播体系在很大程度上依赖于百度后台资源的,对于刚刚做直播领域的公司很难有这么雄厚的靠山,所以有一些难点必须自己想办法克服!
总体来说这次技术分享给我带来的不少新知识,开拓了视野。由于自己对移动直播领域是首次接触,其中很多技术性名称理解不够透彻,一些想法也比较浅显,如有错误之处还望多多指出,多多交流。