直播将我们的沟通方式从传统的二维空间直接进化到了现在的三维模式,最主要的原因就是因为直播具有很强的实时性和互动性功能。在计算机网络中,信息的交换必须按照预先共同约定好的过程进行,才能实现实体间的交互,这就是网络中的传送协议。如果没有传送协议,传信双方的信息交换就会出现问题。所以今天我们聊一下在直播系统搭建过程中,可以使用到的一些网络传输协议有哪些?

1. RTMP协议:

RTMP是Real Time Messaging Protocol英文的缩写,即实时消息传输协议。RTMP是一种设计用来进行实时数据通信的网络协议,是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。由于其一般传输的音视频格式是flvf4vweb上通过flash播放器播放,pc端大多数浏览器基本支持,但是移动端几乎都不支持,一般主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。

它具有多种变种:

1)RTMP工作在TCP之上,默认使用端口1935

2)RTMPE在RTMP的基础上增加了加密功能;

3)RTMPT封装在HTTP请求之上,可穿透防火墙;

4)RTMPS类似RTMPT,增加了TLS/SSL的安全功能;

2. RTSP协议:

RTSP(Real Time Streaming Protocol),即实时流传输协议。RTSP定义了一对多应用程序如何有效地通过IP网络传送多媒体数据,提供了一个可扩展框架,数据源可以包括实时数据与已有的存储的数据。该协议用于控制声音或影像多个数据的连接,服务器端可以自行选择使用TCPUDP来传送串流内容。由于RTSP不特别强调时间同步,所以可能会网络延迟,但是RTSP具有重新导向功能,可以根据实际负载情况来切换提供服务的服务器,因此可在一定程度上可避免服务器承载过大而造成的延迟。

3.RTP协议:

RTP(Real-time Transport Protocol),即实时传输协议。为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。RTP协议默认是基于UDP协议传输数据的, 延迟低可以做到毫秒级别。虽然RTP 协议不会防止无序传送,也不确定底层网络的可靠性,只管发送,不管传输是否丢包,也不管接收方是否有收到包,但是RTP 实行有序传送,RTP中的序列号允许接收方重组发送方的包序列,同时序列号也能用于决定适当的包位置,如在视频解码中,就不需要顺序解码。基于RTP协议的这些特性,RTP广泛应用于流媒体相关的通讯和娱乐,包括电话、视频会议、电视和基于网络的一键通业务(类似对讲机的通话)

4. RTCP协议:

RTCP 即RTP 控制协议 (RTCP:RTP Control Protocol),RTCP主要功能是为RTP所提供的服务质量提供反馈,收集相关媒体连接的统计信息。例如传输字节数,传输分组数,丢失分组数,单向和双向网络延迟等等。网络应用程序可以利用RTCP所提供的信息来提高服务质量,比如限制流量或改用压缩比小的编解码器。所以说RTCP是RTP的配套协议,是和RTP一起协作将多媒体数据包打包和发送,定期在多媒体流会话参与者之间传输控制数据。

5. HTTP-FLV协议

HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。 flv是一种音视频视频封装格式,全称是Flash Video,是一种流媒体格式,可以通过flash播放器播放。FLV协议由Adobe公司主推,格式极其简单,只是在大块的视频帧和音视频头部加入一些标记头信息,在延迟表现和大规模并发方面都很成熟。但是在手机浏览器上的支持非常有限,但是用作手机端APP直播协议却异常合适。

6.HLS协议

全称HTTP Live Streaming,HLS协议是苹果提出的流媒体播放协议。是将视频分成5-10秒的视频小分片,然后用m3u8索引表进行管理,由于客户端下载到的视频都是5-10秒的完整数据,故视频的流畅性很好,但也同样引入了很大的延迟(HLS的一般延迟在10-30s左右)。相比于FLVHLSiPhone和大部分android手机浏览器上的支持非常给力。HLS协议客户端支持简单, 只需要支持 HTTP 请求即可, HTTP 协议无状态, 只需要按顺序下载媒体片段即可,而且网络兼容性好, HTTP 数据包也可以方便地通过防火墙或者代理服务器。但是相比RTMP 这类长连接协议, 用到互动直播场景延时较高。

以上就是我们常见的网络传输协议。一般直播系统搭建中使用较多的是RTMP协议及HLS协议,基于这些协议直播系统得以流畅运行。