一文看懂音视频流媒体协议及信令技术

简介: 音视频通信完整流程有如下几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等。 每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除、噪声抑制等,采集有麦克风阵列等,编解码有H.263,H.264、H.265等,传输就涉及到了本文重点介绍的RTSP/RTMP/RTP/RTCP等流媒体协议以及相关的信令技术。
来源 | HaaS技术社区

1、音视频通信

音视频通信完整流程有如下几个环节:采集、编码、前后处理、传输、解码、缓冲、渲染等。

每一个细分环节,还有更细分的技术模块。比如,前后处理环节有美颜、滤镜、回声消除、噪声抑制等,采集有麦克风阵列等,编解码有H.263,H.264、H.265等,传输就涉及到了本文重点介绍的RTSP/RTMP/RTP/RTCP等流媒体协议以及相关的信令技术。

2、流媒体协议

流媒体协议一般分成传输控制报文的协议和传输媒体数据的协议。传输控制报文的协议一般用于协商流媒体通信建立的参数等,如SIP,RTSP等协议。传输媒体数据报文一般用于传输音视频媒体数据,如RTP/RTCP/SRTP/SRTCP等协议。此外,也有部分协议将控制信令和媒体信令放在一个连接里传输的,如RTMP等协议。下面会详细介绍这些具体的协议。

2.1、SIP协议

SIP(Session Initiation Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。它是一个基于文本的应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。SIP 是一种源于互联网的IP 语音会话控制协议,具有灵活、易于实现、便于扩展等特点。

image.png

SIP作为控制信令一般要和RTP/RTCP媒体信令配合起来用在音视频通话上,整个音视频交互如上图所示。交互细节如下:

  1. Alice发起Invite请求(携带SDP,媒体初始化描述信息),邀请Bob进行音视频通话。
  2. 如果Bob在线,服务器将Alice的请求转发给Bob。
  1. Bob收到Alice的请求之后,回180 Ringing振铃以及200 ok的确认接入音视频通话。
  2. Alice收到确认后,使用RTP/RTCP进行音视频通话。
  1. Alice发Bye请求,挂断电话。
  2. Bob回200 ok,确认挂断电话。

SIP协议原来比较多的用于视频会议,现在基本上被RTMP协议取代了。

2.2、RTMP

RTMP(Real Time Messaging Protocol, 实时消息传输协议)Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输 开发的开放协议。RTMP是基于TCP协议的一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。

image.png

如上图所示,RTMP的交互流程中,需要经过握手,建立连接,建立流,播放,停止等阶段。在播放流媒体之前,需要先创建网络连接(NetConnection)和网络流(NetStream)。网络连接表示客户端和服务器之间的连通关系,而网络流代表了发送多媒体的通道。所以,客户端和服务器之间只能建立一个网络连接,而基于这个网络连接可以创建很多网络流。
RTMP 是目前主流的流媒体传输协议,广泛用于直播领域,目前市面上绝大多数的直播产品都采用了这个协议。

2.3、RTSP

RTSP(Real Time Streaming Protocol, 实时流传输协议),RFC2326,,是基于TCP或UDP的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。SIP作为控制信令一般要和RTP/RTCP媒体信令配合起来用在音视频媒体传输上。

image.png

RTSP的交互流程如上图所示。其交互细节如下:

  1. 客户端询问(OPTIONS)服务器目前有哪些方法。
  2. 服务器提供所有可用的方法。
  1. 客户端请求(DESCRIBE)服务器提供SDP(媒体初始化描述信息)。
  2. 服务器提供SDP(媒体初始化描述信息)
  1. 设置(SETUP)音视频的会话属性,以及传输模式,提醒服务器建立会话。
  2. 服务器建立会话,返回会话描述标识符以及会话的相关信息。
  1. 客户端请求播放(PLAY)。
  2. 服务器响应请求。
  1. 服务求发送(RTP/RTCP)流媒体数据。
  2. 客户端请求关闭(TEARDOWN)会话。
  1. 服务器响应关闭请求。

和RTMP协议一样,RTSP也经常用于直播。但RTSP协议一般传输的是ts,mp4格式的流,而RTMP协议一般传输的是flv,f4v格式流。 RTSP传输一般需要2-3个通道,命令和数据通道分离,RTMP一般在TCP一个通道上传输命令和数据。目前使用比较多的浏览器和Flash都不支持rtsp支持。所以,RTSP在直播领域,没有RTMP使用广泛。

2.4、RTP/RTCP

RTP(real-time transport protocol, 实时传输协议),在多点传送(多播)或单点传送(单播)的网络服务上,提供端对端的网络传输功能,适合应用程序传输实时数据,如:音频,视频或者仿真数据。RTP没有为实时服务提供资源预留的功能,也不能保证QoS(服务质量)。数据传输功能由一个控制协议(RTCP)来扩展,通过扩展,可以用一种方式对数据传输进行监测控制,该协议(RTCP)可以升级到大型的多点传送(多播)网络,并提供最小限度的控制和鉴别功能。RTP和RTCP被设计成和下面的传输层和网络层无关。协议支持RTP标准的转换器和混合器的使用。

RTP由IETF的多媒体传输工作小组1996年在RFC 1889中公布,现行版本为RFC3550,详见:https://tools.ietf.org/html/rfc3550。

RTCP(Real-time Transport Control Protocol或RTP Control Protocol,实时传输控制协议)是实时传输协议(RTP)的一个姐妹协议,由RFC 3550定义(取代作废的RFC 1889)。RTP 使用一个 偶数 UDP port ;而RTCP 则使用 RTP 的下一个 port,也就是一个奇数 port。RTCP与RTP联合工作,RTP实施实际数据的传输,RTCP则负责将控制包送至电话中的每个人。其主要功能是就RTP正在提供的服务质量做出反馈。

RTCP协议处理机根据定义了五种类型的报文:

SR: sender report

RR: receiver report

SDES: source description items.

BYE: indicates end of participation.

APP: application specific functions

SR报文用于发送端报告本端的数据发送统计信息和数据接收统计信息,RR报文用于报告本端的数据接收统计信息,SDES报文用于报告本端的描述性信息,BYE在本端离开会话时发送,而APP则是特定于应用的数据。

2.5、SRTP/SRTCP

SRTP(Secure Real-time Transport Protocol,安全实时传输协议)是在实时传输协议RTP基础上所定义的一个协议,旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护。它是由David Oran(思科)和Rolf Blom(爱立信)开发的,并最早由IETF于2004年3月作为RFC3711发布。
由于RTP协议和RTCP协议有着紧密的联系,SRTP同样也有一个伴生协议RTCP(Secure RTCP或SRTCP, 安全实时传输控制协议)。SRTCP为RTCP提供类似的与安全有关的特性,就像SRTP为RTP提供的那些一样。
在使用RTP或RTCP时,使不使用SRTP或SRTCP协议是可选的;但即使使用了SRTP或SRTCP,所有它们提供的特性(如加密和认证)也都是可选的,这些特性可以被独立地使用或禁用。唯一的例外是在使用SRTCP时,必须要用到其消息认证特性。

3、流媒体信令技术

目前主流的音视频方案商都会提供包括流媒体信令协议在内的音视频方案SDK,不需要开发者重新移植开发流媒体协议。一般厂商会同步提供端侧和云侧的SDK,SDK使用的流媒体协议可能是SIP/RTMP/RTSP/RTCP/SRTP/SRTCP等协议, 也可能是厂商私有自定义的协议,但基本流媒体协议的原理几乎都是类似的。大多数时候,只需要在厂商SDK的流媒体协议的基础上做信令的开发,就可以完成一个完整的流媒体通信。

image.png

如上图所示,设计了一套基于MQTT的SIP协议的信令,目的是为了用这套信令去协商获取厂商SDK流媒体通信的参数。具体流程如下:

  1. Alice向服务器发SIP Invite消息邀请Bob通话。
  2. 服务器收到SIP Invite消息请求后,通过厂商SDK,确认Bob是否处于在线状态。
  3. 如果Bob不在线,直接返回异常给Alice,如果Bob在线,将Invite请求转发给Bob。
  4. Bob无论同意还是拒绝都发出回复给服务器,由服务器转发给Alice。
  5. 如果Bob同意接收Alice的视频通话,服务器同时向Alice和Bob发送厂商流媒体通信的参数,如聊天房间号等信息。
  6. Alice和Bob使用服务器发送的流媒体通信的参数,配置到集成流媒体通信端侧SDK的应用上。Alice和Bob就可以正常进行通信。
  7. Alice发起SIP bye请求断开整个通话,服务器和Bob收到请求后,同步断开连接,并回收对应的资源。

音视频通信涉及的协议技术,远远不止以上这些,包括NAT,TURN,STUN和ICE等很多技术本文并未涉及,未来会进一步深入研究这些技术细节。

开发者支持

如需更多技术支持,可加入钉钉开发者群,或者关注微信公众号。

image.png

更多技术与解决方案介绍,请访问HaaS官方网站https://haas.iot.aliyun.com

相关文章
|
6月前
|
编解码 移动开发 流计算
【开源视频联动物联网平台】流媒体传输协议HLS,FLV的功能和特点
【开源视频联动物联网平台】流媒体传输协议HLS,FLV的功能和特点
105 2
|
6月前
|
Web App开发 流计算 内存技术
安防领域常用的视频流协议介绍
安防领域常用的视频流协议介绍
342 0
|
6月前
|
网络协议 Linux
音视频学习之rtsp推拉流学习2(流媒体服务器ZLMediaKit)
音视频学习之rtsp推拉流学习2(流媒体服务器ZLMediaKit)
584 0
|
Web App开发 数据采集 物联网
Android平台基于RTMP或RTSP的一对一音视频互动技术方案探讨
随着智能门禁等物联网产品的普及,越来越多的开发者对音视频互动体验提出了更高的要求。目前市面上大多一对一互动都是基于WebRTC,优点不再赘述,我们这里先说说可能需要面临的问题:WebRTC的服务器部署非常复杂,可以私有部署,但是非常复杂。传输基于UDP,很难保证传输质量,由于UDP是不可靠的传输协议,在复杂的公网网络环境下,各种突发流量、偶尔的传输错误、网络抖动、超时等等都会引起丢包异常,都会在一定程度上影响音视频通信的质量,难以应对复杂的互联网环境,如跨区跨运营商、低带宽、高丢包等场景,行话说的好:从demo到实用,中间还差1万个WebRTC。
150 0
|
Web App开发 编解码 算法
发现一个非常好用的RTC(实时音视频通信)方案,做直播和视频通话都很牛
HaaS RTC是阿里云IoT联合视频云开发的IoT设备端上的实时通讯服务,主要面向直播,音视频通话等各种场景。
2218 0
发现一个非常好用的RTC(实时音视频通信)方案,做直播和视频通话都很牛
|
15天前
|
Web App开发 XML 网络协议
|
6月前
|
存储 缓存 编解码
C++ 音视频流媒体浅谈
C++ 音视频流媒体浅谈
213 0
C++ 音视频流媒体浅谈
|
数据格式
直播APP开发,协议盘点(五):实时传输协议RTP
简单搭建实时传输协议RTP的部分参考代码: import socket rtp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) rtp_port = 1234 rtp_socket.bind(('localhost', rtp_port)) packet_size = 1024 while True:
直播APP开发,协议盘点(五):实时传输协议RTP
|
存储 编解码 监控
如何实现多路海康大华等RTSP数据转RTMP推送
一个好的转发模块,首先要低延迟!其次足够稳定、灵活、有状态反馈机制、资源占用低,跨平台,最好以接口形式提供,便于第三方系统集成。
545 0
|
Web App开发 编解码 网络协议
Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP
Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP
362 0