早期媒体
早期媒体的概念比较泛,只要处于早期对话内的媒体交互都属于早期媒体。
根据方向性,早期媒体可以分为前向早期媒体、后向早期媒体,当然也可能出现双向早期媒体。当前我们主要关注后向早期媒体。
根据目前
RFC
标准规范定义,早期媒体有
Gateway
模式、
App
模式,目前《中国电信
IMS
网络
SIP
协议总体技术要求》必须支持
Gateway
模式,对于
App
模式没有做特别说明。当前我们主要关注
Gateway
模式。
前向早期媒体
前向早期媒体是指由主叫定制向被叫方播放的媒体,比如在早期对话阶段,根据一些特殊业务需求,需要主叫向被叫发送按键音。或者一种新业务,多媒体彩像功能(多媒体彩像是由主叫定制,被叫享用的业务,在主叫呼叫被叫时,多媒体彩像平台向被叫用户播放主叫用户定制的多媒体信息)等都属于前向早期媒体。
后向早期媒体
后向早期媒体是指由被叫定制向主叫方播放的媒体,这个我们最熟悉的就是是彩铃业务,当主叫呼叫被叫时,会听到被叫设置的不同彩铃音乐。
Gateway
模式
网关模式主要为了兼容现网中大部分不支持
APP
模式的传统设备,整个早期媒体的控制全部集中在网络中做为网关的网元设备,使得终端不会感知到远端到底有多少个媒体源。
在上图中
Server
充当网关的角色,在对话初期,被叫侧
UE_B
提供了媒体源,同时
Server
为了完成特定业务,也提供了媒体源。
1)
、
UE_A
与
Server
建立好媒体协商
UE_A
在初期发送
Invite
请求后,虽然被叫
UE_B
提供了自己的媒体信息,但此时
Server
正好也需要在早期对话完成特定媒体发送业务,所有
Server
将
UE_B
的媒体信息屏蔽了,
使用自己的媒体信息与
UE_A
完成初期交互。
2)
、
UE_B
摘机后,
Sever
辅助完成
UE_A
与
UE_B
的媒体协商。
UE_B
摘机后,在
200OK
中将不会再带媒体信息,因为之前已经完成了一对交互处理。这时候
Server
为了挽回之前丢失的
UE_B
信息,只能通过
Reinvite
不带
SDP
,再重新向
UE_B
索取一次媒体信息,得到
UE_B
的信息后,
Server
通过
Update
与
UE_A
完成协商,之后将协商的结果通过
Reinvite
流程中的
ACK
告知
UE_B
,完成最终的双方媒体协商。
在《
RFC5009
》中,针对
Gateway
模式早期媒体,定义了
P-Early-Media
头域,《中国电信
IMS
网络
SIP
协议总体技术要求》标准仅以
“
sendonly”
值为通用场景,其它
“
inactive”
、
“
gated”
值不做考虑。这里大家一下要理解一下,早期媒体里面的
sendonly
等头域值和
SDP
中
sendonly
不同,不代表收发模式的意思,它们表示的是传输方向,
sendonly
表示从被叫侧到主叫侧方向的媒体,即后向早期媒体,同时,早期媒体头域与
SDP
同时出现时,也不会有冲突,早期媒体协带
sendonly
,仅仅告诉终端请把你的
RTP
接收线程准备好,我要向你发送,而
SDP
中的
sendonly
是告诉终端的
Dsp
,当你什么时候准备发送数据时,记得按我告诉你的收发模式来处理。
这个流程和上一个流程在
Server
与
UE_B
之间的处理有些不同,目前标准仅定义早期媒体的概念,在具体实施上并没有刻意描述如保处理,这里因为中国电信目前仅关心后向早期媒体,所以实例中我们仅描述
UE_A
与
Server
的信令交互体现。
1
)
UE_A
发起初始
Invite
请求
INVITEsip:ue_b@ ims.com SIP/2.0
P-Early-Media
:
supported
信令中协带
P-Early-Media
:
supported
头域,指明
UE_A
支持网关模型的早期媒体
2
)
Server
完成与
UE_A
的早期媒体处理
Server
在收到
Invite
请求后,知道
UE_A
支持此功能,转发不含
SDP
的
Invite
请求(此处实现可以简化与
UE_B
的交互流程),之后给
UE_A
回应
183SDP
,在
183
信令中添加
P-Early-Media
:
sendonly
,来告诉
UE_A
现在
Server
想在早期对话中给其发送媒体信息。
SIP/2.0183 Session Progress
P-Early-Media
:
sendonly
3
)
UE_A
处理早期媒体(当前我们仅考虑无资源预留的情况下)
-
如果收到的第一个
180
响应无
SDP
,则本端自己提供回铃音,直到以下场景出现后将停止本地回铃音:
-
收到最终应答
-
收到带有
P-Early-Media+ SDP
的
18X
消息,或者带有
P-Early-Media+ SDP
的
UPDATE
消息,或者失败的消息
-
收到的第一个
18X
消息带有
P-Early-Media+ SDP
,是由网络侧提供回铃音
4
)被叫
UE_B
摘机后,
Server
处理
当被叫
UE_B
摘机后,在
200OK
里协带自己的
SDP
信息,
Server
通过使用
Update
与
UE_A
进行信令交互,来完成
UE_A
与
UE_B
的媒体协商。
UPDATEsip:ue_a@ ims.com SIP/2.0
P-Early-Media
:
sendonly
5
)收到
UPDATE
后,
UE_A
处理
UE_A
在收到含有
P-Early-Media+ SDP
的
UPDATE
后,了解到早期媒体已经完成,网络侧更新了媒体源,则对新的媒体源进行重新协商。
App
模式
在网关模式小节,我们看到第一个流程图中,如果
UE_B
和
Server
都提供早期媒体源,则会导致
UE_B
的媒体信息被丢弃,因为传统
SIP
的媒体交互是成对出现的,并且在同一时间仅能处理一对媒体协商,同时信令交互上比较繁琐。
App
模式为了解决这种问题,提出在终端与服务器侧,可以同时在一个信令消息中处理多个媒体协商的机制,这种实现很大程度上减少了信令交互,也完成了完美的无缝媒体切换。但该机制需要终端与服务端都必须支持才可以,中国电信考虑到目前现网中传统
SIP
终端还占据很大的使用比例,所以目前对该模式并没有强制要求终端需要实现。
1
)
UE_A
发送
Invite
请求,告知
Server
他支持
APP
模式早期媒体
INVITEsip:ue_b@ ims.com SIP/2.0
Supported:
early-session
,100rel
Content-Type:application/sdp
Content-Disposition:session
v=0
o=UE_A2890844730 2890844731 IN IP4 ims.com
s=
c=INIP4 192.0.2.1
t=00
m=audio20000 RTP/AVP 0
-
Supported
头域值含有
early-session
,表明终端支持
APP
模式早期媒体 -
Content-Disposition:session
指明当前的
BODY
是一个普通会话媒体
2
)
Server
收到被叫媒体信息后,自身也需要提供媒体,则在
183
响应中协带多个媒体信息,其中第一个
Content-Disposition:session
是
UE_B
协商后的媒体信息,指明是普通会话媒体,第二个
Content-Disposition:early-session
是
Server
向
UE_A
发出的会话媒体请求,同时指明是早期会话媒体。
Content-Type:multipart/mixed; boundary=”boundary1″
Content-Length:401
–boundary1
Content-Type:application/sdp
Content-Disposition:session
v=0
o=Bob2890844725 2890844725 IN IP4 host.example.org
s=
c=INIP4 192.0.2.2
t=00
m=audio30000 RTP/AVP 0
–boundary1
Content-Type:application/sdp
Content-Disposition:early-session
v=0
o=Bob2890844714 2890844714 IN IP4 host.example.org
s=
c=INIP4 192.0.2.2
t=00
m=audio30002 RTP/AVP 0
–boundary1–
3
)
UE_A
收到含有两个媒体信息的
183
响应后,已经得到
UE_B
的媒体协商应答,同时也了解到
Server
发来一个早期媒体请求。此时,
UE_A
将与
UE_B
的普通媒体信息先存储到本地,并对
Server
发来的早期媒体请求进行协商处理,之后在
PRACK
信令中仅将与
Server
协商后的媒体信息发送给
Server
端。
Content-Type:application/sdp
Content-Disposition:early-session
v=0
o=alice2890844717 2890844717 IN IP4 host.example.com
s=
c=INIP4 192.0.2.1
t=00
m=audio20002 RTP/AVP 0
4
)
Server
收到
UE_A
早期媒体会话响应后,完成早期媒体的处理,之后给
UE_A
提供早期媒体源。
5
)
UE_B
摘机应答后给
UE_A
发送
200
响应,
UE_A
收到
200
响应后,了解到当前对话已经变为正式对话,此时
UE_A
自动将媒体处理切换为之前保存的普通媒体会话。
参考资料
《中国电信
IMS
网络
SIP
协议总体技术要求》
《基于
IMS
的早期媒体类业务》
《
VoipIMS
早期媒体建立中多实体媒体协商解决方案》
《
SIP
中的早期媒体
earlymedia
与回铃音》
《
RFC5009
》
《
RFC3959
》
《
RFC3960
》