类JsSIP.RTCSession表示WebRTC媒体(音频/视频)会话。它可以由本地用户发起,也可以由远程对等方发起。
在内部,它持有一个RTCPeerConnection实例,可通过connection属性进行访问。
实例属性
connection
与此会话关联的基础RTCPeerConnection实例。使用它可以设置与WebRTC相关的事件(如onaddstream、onaddtrack等)。
请注意,对于传出调用,RTCPeerConnection是在调用ua.call()之后设置的。但是,对于传入呼叫,RTCPeerConnection是在调用session.answer()之后设置的。
direction
指示会话启动者的字符串。当会话由远程对等方启动时,可能的值为“incoming”,当会话由本地用户启动时,值为“outgoing”。
local_identity
JsSIP.NameAddrHeader实例,指示本地标识。当方向为“传出”时,它与INVITE 的From标头值相对应,当方向为为“传入”时,与To标头值对应
remote_identity
JsSIP.NameAddrHeader实例,指示远程标识。当方向为“传出”时,它与INVITE的To标头值相对应,当方向为为“传入”时,与From标头值相对应
start_time
Date对象,指示会话开始的时间。在已接受的事件被激发时获取其值。
end_time
Date对象,指示会话结束的时间。在激发结束事件时获取其值。
data
应用程序的一个对象,用于存储与此会话相关联的自定义信息。用于应用程序使用的自定义会话空对象。开发人员可以在此处添加自定义的属性/值对。
实例方法
isInProgress()
如果会话处于进行中状态(未建立且未结束),则返回true。
isEstablished()
如果会话已建立,则返回true。
isEnded()
如果会话结束,则返回true。
isReadyToReOffer()
如果会话已准备好进行SDP重新协商(hold()、unhold()或regregate()方法),则返回true。
answer(options)
回答传入会话。此方法仅适用于传入会话。
options:具有额外参数的可选对象(extraHeaders =>用于200 OK响应的具有额外SIP头的字符串数组。mediaConstraints =>具有两个有效字段(audio和video)的对象,指示会话是否打算使用音频和/或视频以及要使用的约束。默认值是根据接收到的SDP offer设置的。mediaStream =>要传输到另一端的MediaStream。pcConfig =>表示RTCPeerConnection RTCConfiguration的对象。rtcConstraints =>表示RTCPeerConnection约束的对象。rtcAnswerConstraints =>对象,表示RTCPeerConnection createAnswer()的约束。rtcOfferConstraints =>对象,表示RTCPeerConnection createOffer()的约束(用于未来传入的reINVITE而不提供SDP)。sessionTimersExpires =>默认会话计时器间隔的数字(以秒为单位)(默认值为90,不要设置较低的值)。
INVALID_STATE_ERROR (抛出异常)
JsSIP中的某些函数在某些情况下可能引发异常(请参阅W3C定义的DOMException)。以下是JsSIP中的DOMException列表:
code | 常数 | 描述 |
1 | CONFIGURATION_ERROR | UA配置对象加载过程中出错。 |
2 | INVALID_TARGET_ERROR | 目标不是有效的SIP URI,或者无法转换为有效的SIP URI。 |
3 | INVALID_STATE_ERROR | 对象处于不适合执行给定操作的状态。 |
terminate(options)
终止当前会话,无论其方向或状态如何。
根据会话的状态,此功能可能会发送CANCEL请求、非2xx最终响应、BYE请求,甚至不发送请求。
对于传入会话,如果用户没有回答传入的INVITE,此函数将发送非2xx最终响应,其中包含可选指定的状态代码和原因短语。480默认情况下会响应Unavailable。
或传出会话,如果原始INVITE尚未发送,则永远不会发送。如果原始INVITE没有得到最终响应的应答,则行为取决于是否已经接收到临时响应。如果收到临时响应,将发送CANCEL请求。如果没有接收到临时响应,则该功能将不会根据RFC 3261发送CANCEL。如果收到临时响应,CANCEL请求将自动发送。
对于传入和传出会话,如果INVITE会话已得到最终响应,则将发送BYE请求。
options:具有额外参数的可选对象(extraHeaders =>具有用于MESSAGE请求的额外SIP标头的字符串数组。status_code =>300到699之间的数字,表示SIP响应代码。)
sendDTMF(tone, options=null)
使用SIP INFO方法发送一个或多个DTMF音调。
tone:由一个或多个有效DTMF符号组成的字符串或数字。
options:具有额外参数的可选对象(duration =>正十进制数字,表示音调的持续时间,以毫秒为单位。默认值为100。interToneGap =>十进制正数,表示两个音调之间的间隔(以毫秒为单位)。默认值为500。extraHeaders =>可选字符串数组,每个INFO请求都有额外的SIP头。)
例子:
call.sendDTMF(1);
call.sendDTMF(4);
var tones = '1234#';
var extraHeaders = [ 'X-Foo: foo', 'X-Bar: bar' ];
var options = {
'duration': 160,
'interToneGap': 1200,
'extraHeaders': extraHeaders
};
call.sendDTMF(tones, options);
sendInfo(contentType, body=null, options=null)
发送SIP INFO消息。
contentType:表示SIP INFO消息内容类型标头字段值的字符串
body:可选字符串,表示SIP INFO消息正文
options:具有额外参数的可选对象(extraHeaders =>可选字符串数组,每个INFO请求都有额外的SIP头。)
hold(options=null, done=null)
通过发送Re-INVITE或UPDATE SIP请求将呼叫挂起。
如果此时无法重新协商,则返回false。
done:重新协商成功后调用的可选函数。
options:具有额外参数的可选对象(useUpdate =>布尔型发送UPDATE而不是重新INVITE。extraHeaders =>具有请求的额外SIP标头的字符串数组。)
unhold(options=null, done=null)
通过发送Re-INVITE或UPDATE SIP请求,从挂起状态恢复呼叫。
如果此时无法重新协商,则返回false。
done:重新协商成功后调用的可选函数。
options:具有额外参数的可选对象(useUpdate =>布尔型发送UPDATE而不是重新INVITE。extraHeaders =>具有请求的额外SIP标头的字符串数组。)
renegotiate(options=null, done=null)
强制重新协商SDP。在修改附加到底层RTCPeerConnection的本地流(通过connection属性)后很有用。如果此时无法重新协商,则返回false。
done:重新协商成功后调用的可选函数。
options:具有额外参数的可选对象(useUpdate =>布尔型发送UPDATE而不是重新INVITE。extraHeaders =>具有请求的额外SIP标头的字符串数组。rtcOfferConstraints =>表示RTCPeerConnection createOffer()约束的对象)
isOnHold()
返回一个属性为“local”和“remote”的对象,以及与每一个属性相关联的布尔值。它表示“本地”和/或“远程”对等端是否处于挂起状态。
rtcsession.isOnHold();
{
'local': true, // User has put the other peer on hold
'remote': false // Peer hasn't put user on hold
}
mute(options=null)
静音本地音频和/或视频。{audio:true,video:false}
unmute(options=null)
取消对本地音频和/或视频的静音。{audio:true,video:false}
isMuted()
返回一个属性为“audio”和“video”的对象,以及与它们相关联的布尔值。它表示本地“音频”和/或“视频”是否处于静音状态。
rtcsession.isMuted();
{
'audio': true, // Local audio is muted
'video': false // Local audio is not muted
}
refer(target, options=null)
发送一个对话框中的REFER方法,将给定的目标作为REFER To资源。
REFER方法隐式生成对引用状态的订阅。JsSIP对从对等端接收到的NOTIFY请求进行处理并以事件的形式呈现通过RTCSession.ReferSubscriber。
target:请参阅参考资料。表示目标用户名或完整SIP URI或JsSIP的字符串。URI实例。
options:具有额外参数的可选对象(extraHeaders =>REFER请求的具有额外SIP头的可选字符串数组。eventHandlers =>要为JsSIP注册的事件处理程序的可选对象RTCSession.ReferSubscriber。replaces =>可选JsSIP。要在引用目标处替换的对话框的RTCSession实例。这是此用户代理与Refer To资源所指向的用户代理之间的实时会话。)
resetLocalMedia()
通过启用本地媒体流的音频和视频轨道来重置本地媒体流(除非远程对等方处于挂起状态)。