推流是直播的第一公里,直播的推流对这个直播链路影响非常大,如果推流的网络不稳定,无论我们如何做优化,观众的体验都会很糟糕。所以也是我们排查问题的第一步,如何系统地解决这类问题需要我们对相关理论有基础的认识。

推送协议

下面就先介绍一下都有哪些推送协议,他们在直播领域的现状和优缺点。
RTMP
WebRTC
基于 UDP 的私有协议

1、RTMP

RTMP 是 Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于 TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。RTMP 是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括 Adobe Media Server/Ultrant Media Server/red5 等。
RTMP 是目前主流的流媒体传输协议,广泛用于直播领域,可以说市面上绝大多数的直播产品都采用了这个协议。

优点
CDN 支持良好,主流的 CDN 厂商都支持
协议简单,在各平台上实现容易

缺点
基于 TCP ,传输成本高,在弱网环境丢包率高的情况下问题显著
不支持浏览器推送
Adobe 私有协议,Adobe 已经不再更新

2、WebRTC

WebRTC,名称源自网页即时通信(英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的 API。它于 2011 年 6 月 1 日开源并在 Google、Mozilla、Opera 支持下被纳入万维网联盟的 W3C 推荐标准。

目前主要应用于视频会议和连麦中,协议分层如下:

优点
W3C 标准,主流浏览器支持程度高
Google 在背后支撑,并在各平台有参考实现
底层基于 SRTP 和 UDP,弱网情况优化空间大
可以实现点对点通信,通信双方延时低

缺点
ICE,STUN,TURN 传统 CDN 没有类似的服务提供

3、基于 UDP 的私有协议

有些直播应用会使用 UDP 做为底层协议开发自己的私有协议,因为 UDP 在弱网环境下的优势通过一些定制化的调优可以达到比较好的弱网优化效果,但同样因为是私有协议也势必有现实问题:

优点
更多空间进行定制化优化

缺点
开发成本高
CDN 不友好,需要自建 CDN 或者和 CDN 达成协议
独立作战,无法和社区一起演进