1.多媒体通信协议栈理解
各种协议栈可以分为三类:
- 信令类:用于控制流媒体传输过程,如p2p连接建立、播放、暂停、快进、快退等
- 通信质量类:用于通信质量的保障,如RSVP(网络层带宽保障)、RTCP(流量控制、拥塞控制、会话管理等)
- 数据传输类:RTP 负责传输真正的数据流
这个图比较直观的描述了三类协议的功能:
2.各协议分层和用途
相关协议分层:
协议 | 全称 | 中文名 | 分层 | 用途 |
---|---|---|---|---|
SIP | Session Initiation Protocol | 会话发起协议 | 应用层 | SIP用于VoIP业务,它一般用来建立两个SIP UA(作为SIP用户终端)之间的双向的多媒体通信关系。主要用于初始、管理和终止网络中的语音和视频会话,具体地说就是用来生成、修改和终结一个或多个参与者之间的会话。其本身并不用于传输流媒体数据。 |
RTSP | Real-Time Stream Protocol | 实时流传输协议/实时串流协议 | 应用层 | RTSP用于实时流媒体业务,它一般用来建立客户端与流媒体服务器之间的单向的多媒体通信关系(原理上也支持双向)。主要用来控制具有实时特性的数据的发送,对流媒体提供播放、暂停、后退、前进等操作。其本身并不用于传输流媒体数据。 |
SDP | Session Description Protocol | 会话描述协议 | 应用层 | 一般配合SIP或者RTSP协议使用,用于描述会话信息 |
RTP | Real-time Transport Protocol | 实时传输协议 | 传输层 | 负责对流媒体数据进行封包并实现媒体流的实时传输,即它按照RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进行数据包的传输。 |
RTCP | Real-time Transport Protocol | 实时传输控制协议 | 传输层 | RTP 使用一个 偶数 UDP port ;而RTCP 则使用 RTP 的下一个 port,也就是一个奇数 port。RTP一般与传输控制协议RTCP一块工作,RTP只负责实时数据的传输,RTCP负责对RTP的通讯和会话进行带外管理(如流量控制、拥塞控制、会话源管理等)。 |
RSVP | Resource Reservation Protocol | 资源预留协议 | 网络层、传输层 | 用于网络传输过程中的质量控制,在建立媒体会话前预留出所需的带宽。 |
MRCP | Media Resource Control Protocol | 媒体资源控制协议 | 应用层 | 在SIP/RTSP、RTP等协议之上,定义一套媒体资源控制的应用层协议,客户和服务商都按标准协议实现,减少接入成本。 |
核心的几个协议 SIP、RTSP、RTP的关系:
- SIP,RTSP:都属于信令协议,它们不负责多媒体通信本身,只负责多媒体通信关系的建立。
- SIP用于VoIP业务,它建立的是两个或多个SIP UA(作为SIP用户终端)之间的双向的多媒体通信关系。
- RTSP用于实时流媒体业务,它建立的是客户端与流媒体服务器之间的单向的多媒体通信关系。
- RTP:用于多媒体内容的实时传输。无论是VoIP业务还是流媒体业务都会使用它。
3.MRCP协议
MRCP协议用于语音服务器向客户端提供各种语音服务(如:语音识别,语音合成,声纹识别,录音服务等),可以理解为基于上面提到的多媒体通信协议栈(RTSP/SIP、RTP&RTCP)实现的一个业务层协议,统一了各厂商能力输出的格式规范。
v1版本为草案版本,信令控制基于RTSP实现,未进化为标准版本;
v2版本为标准版本,信令控制基于SIP实现。
3.1 MRCPv1
3.2 MRCPv2
提供一套应用层的协议,支持语音合成、语音识别、身份认定等功能
2001年MRCPv1草案发布,实际上v1版本后来也没有发展成为一个真正的标准版本,主要存在以下几个方面的问题:
- 依赖于RTSP 协议来创建媒体流和数据传输传输。而当时,SIP协议已经是很多厂家推荐的媒体会话控制协议。
- 存在兼容性的问题,对如何定义数据表示方式支持语音识别非常困难。很多语音识别的厂家要求支持的拓展也没有实现。
- 缺乏对讲话者语音变化,识别引擎和讲话录音的支持。
2002年,SpeechSC工作组重新讨论了MRCP V1 的问题,对MRCP V1 进行了修改,发布了MRCP V2版本,MRCP V2 版本事实上在V1版本基础上实现了优化,修改和拓展,正式成为了MRCP V1的标准版本。
因为在MRCP V2版本中使用了SIP来负责创建独立的媒体和会话支持语音媒体资源,增加了对讲话者变化和讲话者的身份引擎的支持(speaker verification 和 identification),同时增加了拓展性,保证了丰富的兼容性。从此,MRCP V2 版本一直使用到现在。
3.3 unimrcp
unimrcp是一个开源的unimrcp的实现,包含了v1、v2版本,以及一些demo
- 官网:https://www.unimrcp.org/
- github:https://github.com/unispeech/unimrcp
- 架构文档:https://www.unimrcp.org/dox/html/
4.参考文档
- MRCPv1协议RFC文档 https://datatracker.ietf.org/doc/html/rfc4463
- MRCPv2协议RFC文档 https://datatracker.ietf.org/doc/html/rfc6787
- RTSP协议RFC文档 https://datatracker.ietf.org/doc/html/rfc2326
- 流媒体传输协议栈 https://www.zhihu.com/question/23391466
- RTP/RTCP/RTSP/SIP/SDP 关系 https://www.cnblogs.com/x_wukong/p/4580668.html
- freeswitch与mrcp https://cotin.top/AI/FreeswitchSetting/
本文链接:https://www.zoucz.com/blog/2022/06/14/36ce61b0-eb32-11ec-bbfb-55427a78e3a0/