Skip to content

Latest commit

 

History

History
93 lines (52 loc) · 5.93 KB

音视频传输协议基础知识.md

File metadata and controls

93 lines (52 loc) · 5.93 KB

音视频传输协议基础知识

1 RTP协议

RTP是实时传输协议,是用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端对端的实时传输服务。RTP提供了时间信息和流同步,但不保证服务质量,服务质量由RTCP来提供。

RTP协议是建立在UDP上的,基于传输层,是传输层的一个子层。从开发者的角度来说RTP的实现还是需要靠开发者自己,所以也可以把RTP看成应用层。

RTP定义了两个报文:RTP报文和RTCP报文,RTP报文用于传送媒体数据(如音频和视频),它由RTP报头和数据两部分组成,RTP数据部分称为有效载荷(payload);RTCP报文用于传送控制信息,以实现协议控制功能。

RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单薄应用中。RTP协议常用于流媒体系统(配合RTSP协议),视频会议和一键通(Push To Talk)系统(配合H.323或SIP),试它成为IP电话产业的技术基础。

2 RTSP协议

RTSP是实时传输流协议,是一个应用层协议,该协议定义了一对多应用程序如何有效地通过IP网络发送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP请求由客户端发出,服务端作出响应;使用RTSP时,客户端和服务器都可以发出请求,双向。RTSP允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服务端可以选择使用TCP或UDP来传送串流内容,它的语法和运作跟HTTP1.1类似,但并不特别强调时间同步,所以比较能容忍网络延迟。而前面所提到的允许同时多个串流,除了可以降低服务器的网络用量,更进而支持多方视频会议。因为和HTTP1.1的运作方式相似,所以代理服务器的Cache功能也同样适用于RTSP,并且因为具有重新导向功能,可视实际负载情况来转换提供服务的服务器,以避免过大的负载集中于同一服务器而造成延迟。

RTSP协议一般传输的是ts、mp4格式的流,传输一般需要2-3个通道,命令和数据通道分离。RTSP一般用来做视频点播、视频监控等(单向)。当然,从原理上讲,RTSP也可以做双向的视频通话。

RTSP协议优势在于可以控制到视频帧,因此可以承载实时性很高的应用。

3 RTMP协议

RTMP是实时消息传输协议。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5等。RTMP与HTTP一样,都属于应用层。

RTMP一般传输的是flv、f4v格式流,一般在TCP 1个通道上传输命令和数据。

RTMP建立链接,首先要“握手”:客户端要向服务器发送C0,C1,C2三个chunk,服务器向客户端发送S0,S1,S2三个chunk,然后才能进行有效的信息传输。

一般用来做直播、视频会议或监控等。但是因为是基于Flash,iOS浏览器并不支持直接播放。基于TCP有一定的延迟(1-3秒),但稳定性高,可以长时间不断流。

4 HLS协议

HLS是苹果公司的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u8的索引文件,TS媒体分片文件和key加密串文件。

HLS实现是通过HTTP渐进下载,所以HLS并不是流媒体协议,应该是HTTP协议。HLS协议的会生产大量的ts文件。因为是基于HTTP,所以可以穿过任何允许HTTP数据通过的防火墙或代理服务器,很容易使用内容分发网络来传输媒体流。解决了RTMP协议上的一些问题,因为RTMP的端口并不走HTTP的端口。

视频的编码格式为H264,音频格式为MP3、AAC或者AC-3。

HLS因为是切片的HTTP渐进下载,所以直播延迟会比较高,一般在10秒以上。

HLS可以直播,也可以点播,从m3u8的文本文件中可以看出直播和点播的区别

#EXTM3U
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-TARGETDURATION:10
#EXTINF:10,
2000kbps-00001.ts

... ...

#EXTINF:10,
2000kbps-00100.ts
#ZEN-TOTAL-DURATION:999.66667
#ZEN-AVERAGE-BANDWIDTH:2190954
#ZEN-MAXIMUM-BANDWIDTH:3536205
#EXT-X-ENDLIST

如果存在#EXT-X-ENDLIST,说明该地址是一个点播流,如果不存在则是一个直播流。

5 WebRTC

WebRTC是一个支持网页浏览器进行实时语音对话或视频对话的API。目前由Google维护并开源。WebRTC使用SRTP对RTP数据进行加密,消息认证和完整性以及重播攻击保护。它是一个安全框架,通过加密RTP负载和支持原始认证来提供机密性。WebRTC的安全特性是其可靠性的重要组成部分,其基础全部围绕RTP进行。

目前WebRTC已经支持很多平台window、linux、mac、iOS、android。

WebRTC内部实现了很多功能组件:

传输部分可基于TCP/UDP进行。

音频引擎包含了一系列音频多媒体处理的框架,包括从音频采集到网络传输的整套解决方案。

视频引擎包含了一些列视频的整体框架,从摄像头采集到网络传输再到视频渲染整个完整过程的解决方案。

WebRTC的优点:

方便继承,且内置于浏览器中,不需要任何插件即可进行实时通信。

免费开源,继承了最佳的音视频引擎,十分先进的codec。

强大的打洞能力,包含了STUN、ICE、TURN、RTP-over-TCP的关键NAT和防火墙穿透技术,并支持代理。

WebRTC的缺点:

缺乏服务器方案的设计和部署。

传输质量难以保证。

比较适合P2P一对一单聊,可以实现群聊,单并没有专门针对群聊进行优化。

设备端的适配问题。