2015 年 11 月 28 日,架构与运维的年度大趴——又拍云架构与运维大会·北京站圆满落幕了。近 1500 名来自全国各地的 IT 小伙伴们让现场热火朝天,而 23 位享誉互联网技术业界的大神们的登场,观止创想技术总监杨成立在会上作了题为《基于通用CDN之上的P2P视频融合分发 》,以下是分享实录:

image.png

我今天主要想跟大家分享一下流媒体相关的一些业内的情况。总体分成三个方面,一个是流媒体的发展和流媒体的 P2P 的情况,还有通用 CDN 之上 P2P 做的一些进展。

流媒体的发展

所谓流媒体,会分点播、直播。开始的时候,点播比较复杂,目前互联网上的点播主要以 CDN 为主,包括 FLV 、 HLS ,点播主要应用技术方向是 P2P ,底层的技术涉及较多是在存储。直播有很重要方案,直播低延迟和视频会议低延迟不太一样,比如有一些秀场、主播、会议的低延迟和直接视频会议企业做的缓存。还有一点非常重要, POT 可以省 80% 的带宽,节约成本。直播低延迟主要的核心在于会有 UDP 私有协议。

image.png

这是互联网点播的一些变化,以前包括很多种封装,点播封装变成 MP4 和 HLS 两种。有很多协议, HTTP 点播,还有私有协议等等。互联网目前点播基本上都是走 HTTP 协议,流和文件,点播以前分为流和文件,现在都是以文件形式。以前点播会走特殊集群,目前都是走通用 CDN 。总体来看点播的趋势是从很复杂的分发、播放到目前国内比较通用的简单内容为主。

流媒体 P2P 的现状

image.png

互联网直播的发展,目前有两种,一种是 HTTP 直播还有私有 P2P 流的直播。之中直播流有一种是直播的实时流,还有一种是通用 HTTP 流,通用 HTTP 流延时性对直播来说没有要求;私有 P2P 流也会分为两种,一种是比较通用的 HTTP 流做的 P2P ,还有私有 P2P 。 P2P 和 CDN 是不同的行业,以前做 P2P 的公司很少用 HTTP 流。做 CDN 很少用私有方案,大家各自有各自标准。

2010 年左右的时候集群分为四种,在互联网流媒体,一种是 CDN ,以文件、图片和网络为主。在 CDN 内部有单独流媒体服务器还有集群,也就是 CDN 只是侧重于文件还有网页这块。在最近三四年左右, CDN 已经大部分包含流媒体的功能,随着 IOS 和安卓最近这几年的包庇,大部分的流媒体占比重非常高, CDN 里面流媒体已经成为标配。目前 P2P 只有少数几家 CDN 提供,低延迟方案目前还是 P2P 。

image.png

我们 13 年做 P2P ,重点侧重于在通用 CDN 上, CDN 从长远来看可以和 P2P 、流媒体融合在一起,这样 CDN 就可以提供流媒体的功能,还可以提供 P2P 的功能,不会破坏 CDN 目前的性能架构。低延迟是互联网比较基础的协议,低延迟的问题无法避免。估计通过开源, 5 到 10 年之内 CDN 能流媒体屏蔽低延迟。

从协议这块来看,互联网协议 RTSP 目前没有在用,一些私有方案才会有 RTSP 。云里面都不会支持 RTSP 。 RTMP 走向 HTTP-FLV ,最近这个方案才比较成熟,会对 RTMP 有很大的替代。还有其他有 HLS 、 UDP 、 RTMFP 用低延迟的方面。

image.png

服务器开始用很多,流媒体行业比较早的服务器有 LIVE555 还有 Cumulus 方面的服务器。但这几个服务器从互联网通用的媒体方面看都会有一些问题,通用的服务器目前主要是跟 NGINX 的方向, SRS 分为 SRS1 和 2 ,还有未来的 GO-ORX 。 SRS 从 1 到 2 主要是通用流媒体的服务器, GO-ORX 未来侧重于低延迟方面。

流媒体 P2P 主要系统结构

第一是视频源,客户端需要介入伙伴发现的服务器和集群来发现彼此。左下角 NAT 穿透发现之后会做各种打洞,数据分析和数据调用。实现支持 Flash 这套协议。 Flash 9+ 可以支持。

我们在做流媒体 P2P 的时候发现动态分布是 P2P 里面比较难的事情,直播的时候用户的点都是从同一个点看的,都没有迟疑。很多都堆到一起,我们在做 P2P 的时候,会把用户按照不同的起始观看和动态进行分布,他们之间分享的概率就会大很多。分享率的两个重要因素, P2P 系统内部有的伙伴数目还有上面提到用户的动态分布, P2P 延迟是可以做到 10 到 30 秒之间的调整。

image.png

我们协议内部采用自己实现的服务器做自动均衡,客户端连上的时候如果服务器负载过高,可以放到其他服务器去,我们在 2012 年、 2013 年支持好声音的时候,一开始没有自动均衡,服务器压力很大,后来我们加上之后可以用我们的这个看好声音。

P2P 对 CDN 的结合性和友好型

CDN 还是很怕私有协议,我们在系统设计的时候,协议方面会选两种比较通用的协议, CDN 选 HLS 协议,对接我们的 P2P 进来。和 P2P 结合走的是 RTMFP + HTTP 。 CDN 会比较独立,不会因为加入 P2P 就做改动。

image.png

切片发现是 CDN 里面视频源客户端找到这些应该播放的视频源。直播省略 M3U8 ,效率可以做的更高。直播使用时间推算 M3U8 。 TS 切片要对齐。内容编码就是内容处理, CDN 请求变化之后源端请求变化策略和认证。这些传输还有切片处理,客户端会把数据汇报给 P2P 系统。其实 P2P 系统也会用到这些数据,计费数据、动态延迟、流畅度分布等。