本文初写于 2016 年,主要记录直播推流与传输协议的基础概念。当前直播链路已经出现更多低延迟方案,RTMP 仍常用于推流接入,但播放侧和互动场景会更多结合 HLS、DASH、WebRTC、SRT 或平台私有协议。

推流是直播的第一公里,对整个直播链路影响很大。如果推流网络不稳定,无论后续如何优化,观众体验都会受到影响。因此,排查直播问题时通常要先关注推流侧。

下面介绍几类常见推流或实时传输方案,以及它们在直播领域的优缺点:

  • 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 和直播云厂商普遍支持。但在播放侧,HLS、DASH、WebRTC 等方案也非常常见,需要按延迟、兼容性和成本选择。

优点:

  • CDN 支持良好,主流 CDN 厂商通常都支持。
  • 协议和工具链成熟,在各平台上实现成本相对较低。

缺点:

  • 基于 TCP,在弱网和高丢包环境下延迟容易升高。
  • 浏览器原生支持有限。
  • Adobe 已不再持续演进 Flash 时代的 RTMP 生态。

2、WebRTC

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

WebRTC 常用于视频会议、连麦和低延迟互动直播等场景,协议分层如下:

优点:

  • W3C 标准,主流浏览器支持程度高。
  • 各平台有成熟参考实现和生态支持。
  • 底层基于 SRTP 和 UDP,弱网优化空间较大。
  • 可以实现点对点通信,通信双方延时低。

缺点:

  • ICE、STUN、TURN 相关部署和运维复杂度较高,传统 CDN 体系不能直接复用。

3、基于 UDP 的私有协议

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

优点:

  • 有更多空间进行定制化优化。

缺点:

  • 开发成本高。
  • 对 CDN 不友好,通常需要自建分发链路或与 CDN 厂商深度合作。
  • 协议私有化后生态封闭,难以复用社区能力。