jsSip开发文档
概观:
1.JsSIP是一个简单易用的JavaScript库,它利用SIP和WebRTC的最新发展,在任何网站上提供全功能的SIP端点。
2.通过JsSIP ,只要几行代码,任何网站都可以通过音频,视频等获得实时通信功能。
特征:
1.通过WebSocket传输的 SIP。
2.音频/视频通话,即时消息和状态。
3.轻巧!
4.100%纯JavaScript从头开始构建。
5.易于使用和功能强大的用户API。
6.适用于OverSIP,Kamailio和Asterisk服务器。
入门:
一:1.JsSIP用户代理是JsSIP的核心元素。它表示与SIP帐户关联的SIP客户端。JsSIP用户代理是在类中定义的。JsSIP.UA
2.可以创建多个JsSIP用户代理(这对于在同一个Web应用程序中运行不同的SIP帐户很有用)。
二:创建一个jsSIP用户代理
JsSIP用户代理需要一个配置对象来进行初始化。
/**
* 创建websocket连接,连接地址最好是wss,本地测试可以使用ws,
* 如果信令服务使用FreeSWITCH,那么websocket连接地址如下:
* ws://FreeSWITCH所在服务器IP:5066 或
* wss://FreeSWITCH所在服务器IP:7443
*/
var socket = new JsSIP.WebSocketInterface('wss://sip.myhost.com');(详见三API)
/**
* User Agent配置参数,sockets表示信令服务器的连接集合,即可以
* 注册多个信令服务器;uri即注册用户的SIP地址,password为连接密
* 码;常用的参数还有register(true/false)表示是否直接注册;
* no_answer_timeout无应答超时时间等。
*/
var configuration = {
// freeswitch服务器地址
'outbound_proxy_set': 'ws://sip-ws.example.com',
'uri': 'sip:alice@example.com',
'password': 'superpassword'
};
// 使用上述配置创建User Agent
var coolPhone = new JsSIP.UA(configuration);
API说明
类 JsSIP
JsSIP主模块。
类 JsSIP.debug
默认情况下,JsSIP不向浏览器控制台记录任何内容。为了启用调试,请在浏览器控制台中运行以下命令并重新加载页面:
> JsSIP.debug.enable('JsSIP:*');
请注意,日志记录设置将存储在浏览器LocalStorage中。要禁用它,请在浏览器控制台中运行以下命令并重新加载页面:
> JsSIP.debug.disable('JsSIP:*');
JsSIP源代码树中的每个文件都提供了一个不同的调试标识符(全部以“JsSIP:”开头),它与文件名及其相对路径相匹配。
类 JsSIP.UA
JsSIP SIP用户代理类。
首先实例化:
用户代理关联到SIP用户帐户。这个类需要一些通过配置对象提供的初始化配置参数。检查完整的UA配置参数列表。
如果没有定义任何强制性参数或由于格式错误的参数值,此类的实例化将引发异常。
例
var socket = new JsSIP.WebSocketInterface('wss://sip.example.com');
var configuration = {
sockets : [ socket ],
uri : 'sip:alice@example.com',
ha1 : '350fe29ce3890bd85d105998b0a95cf7',
realm : 'sip.example.com'
};
var ua = new JsSIP.UA(configuration);
实例方法
start()
连接到信令服务器,并恢复以前的状态,如果以前停止。重新开始时,如果UA配置中的参数设置为,则向SIP域注册。registertrue
stop()
保存当前注册状态,正常注销并终止活动会话(如果有的话)后断开与信令服务器的连接。
register()
注册UA。
注意:如果register参数设置为true在UA配置参数,则UA将自动注册。
unregister(options=null)
取消注册UA。
参数为options
options对象中的字段all,可选,Boolean用于注销同一SIP用户的所有绑定。默认值是false。
例
var options = {
all: true
};
call(target, options=null)
拨打多媒体电话。
参数
Target 通话的目的地。String表示目标用户名或完整的SIP URI或JsSIP.URI实例。
Options 可选Object附加参数(见下文)。
options对象中的字段;
mediaConstraints Object有两个有效的字段(audio和video)指示会话是否打算使用音频和/或视频以及要使用的约束。默认值是audio并且video设置为true。
mediaStream MediaStream 传送到另一端。
pcConfig Object代表RTCPeerConnection RTCConfiguration。
rtcConstraints Object 表示RTCPeerconnection约束。
rtcOfferConstraints Object代表RTCPeerconnection的限制createOffer()。
rtcAnswerConstraints Object表示用于RTCPeerconnection约束createAnswer()(将被用于将来的输入REINVITE或UPDATE与SDP提供)。
eventHandlers Object事件处理程序的可选项将被注册到每个呼叫事件。为每个要通知的事件定义事件处理程序。
extraHeaders Array的Strings额外SIP头的INVITE请求。
Anonymous Boolean指示是否应该匿名完成呼叫。默认值是false。
sessionTimersExpires Number (以秒为单位)默认的会话定时器间隔(默认值是90,不要设置一个较低的值)。
例
// HTML5的元素,其中将显示本地和远程视频
var views = {
'selfView': document.getElementById('my-video'),
'remoteView': document.getElementById('peer-video')
};
//对所需的调用事件进行回调
var eventHandlers = {
'progress': function(data){ /* Your code here */ },
'failed': function(data){ /* Your code here */ },
'confirmed': function(data){ /* Your code here */ },
'ended': function(data){ /* Your code here */ }
};
var options = {
'eventHandlers': eventHandlers,
'extraHeaders': [ 'X-Foo: foo', 'X-Bar: bar' ],
'mediaConstraints': {'audio': true, 'video': true},
'pcConfig': {
'iceServers': [
{ 'urls': ['stun:a.example.com', 'stun:b.example.com'] },
{ 'urls': 'turn:example.com', 'username': 'foo', 'credential': ' 1234' }
]
}
};
ua.call('sip:bob@example.com', options);
sendMessage(target, body, options=null)
使用SIP MESSAGE方法发送即时消息。
参数
Target 消息的目的地。String表示目标用户名或完整的SIP URI或JsSIP.URI实例。
Body 消息内容。String代表消息的主体。
Options 可选Object附加参数(见下文)。
options对象中的字段:
contentType 可选String代表正文的内容类型。默认text/plain。
eventHandlers Object事件处理程序的可选项将被注册到每个JsSIP.Message事件。为每个要通知的事件定义事件处理程序。
extraHeaders 可选Array的Strings额外SIP头为每个MESSAGE请求。
例
var text = 'Hello Bob!';
var eventHandlers = {
'succeeded': function(data){ /* Your code here */ },
'failed': function(data){ /* Your code here */ };
};
var options = {
'eventHandlers': eventHandlers
};
ua.sendMessage('sip:bob@example.com', text, options);
terminateSessions(options=null)
终止正在进行的呼叫。
参数:
options 可选Object带有在JsSIP.RTCSession呼叫终止中定义的额外参数。
isRegistered()
true如果UA被注册,false则返回; 否则。
isConnected()
返回true运输是否连接,false否则。
Events(data事件)
JsSIP.UA类定义了一系列事件。他们每个人都允许回调函数注册,以便让用户执行每个给定的刺激处理程序。
Connecting:
为每个传输连接尝试而开火。
事件data字段
Socket JsSIP.Socket 实例正在连接。
Attempts Number 指示传输连接尝试。
Connected:
运输连接建立后触发。
事件data字段
Socket JsSIP.Socket 已连接的实例。
Disconnected:
传输连接尝试(或自动重新尝试)失败时触发。
事件data字段
Socket JsSIP.Socket 实例。
Error Boolean 指示套接字是否由于错误而断开连接
Code 可选Number指示套接字断开代码。
Reason 可选String指示插座断开原因。
Registered:
成功注册成功
事件data字段
Response JsSIP.IncomingResponse收到的SIP 2XX响应的实例。
unregistered
被解雇注册。在以下情况下会触发此事件:
1.作为未注册请求的结果。UA.unregister()。
2.如果被注册,则定期重新注册失败。
事件data字段
Response JsSIP.IncomingResponse接收到的(未)注册SIP请求的SIP响应实例。
Cause null以便对非注册 SIP请求作出正确的响应。在其他情况下,失败和最终原因的一个值。
registrationFailed:
由于注册失败而被解雇。
事件data字段
Response JsSIP.IncomingResponse接收到的SIP否定响应的实例,如果失败是由这样的响应的接收产生的,否则为空。
Cause 失败和最终原因的一个价值。
registrationExpiring:
1.在注册到期之前发射几秒钟。如果应用程序没有为这个事件设置任何监听器,JsSIP将像往常一样重新注册。
2.如果应用程序订阅了这个事件,它负责ua.register()在registrationExpiring事件中调用(否则注册将过期)。
3.此事件使应用程序有机会在重新注册之前执行异步操作。对于那些在REGISTER请求中的自定义SIP头中使用外部获得的“令牌”的环境很有用。
newRTCSession:
为传入或传出的会话/呼叫而开火。
data传入会话的事件字段
originator '遥远' String。新会话由远程对等生成。
Session JsSIP.RTCSession 会议的实例。
Request JsSIP.IncomingRequest收到的INVITE请求的实例。
data传出会话的事件字段
originator '本地' String。新会话由本地用户生成。
Session JsSIP.RTCSession 会议的实例。
Request JsSIP.OutgoingRequest传出INVITE请求的实例。
newMessage(新消息):
为传入或传出的MESSAGE请求而开火。
data传入消息的事件字段
originator '遥远' String。新消息由远程对等体生成。
Message JsSIP.Message 实例。
Request JsSIP.IncomingRequest收到的MESSAGE请求的实例。
data传出消息的事件字段
originator '本地' String。新消息由本地用户生成。
Message JsSIP.Message 实例。
Request JsSIP.OutgoingRequest传出MESSAGE请求的实例。
类 JsSIP.Registrator
类JsSIP.Registrator管理UA reigstration程序。
实例方法:
setExtraHeaders(extraHeaders)
将自定义标题追加到每个注册 /取消注册请求。他们可以在任何时候被覆盖。
参数:
extraHeaders Array的Strings额外SIP头被包含在每一个注册请求。将其设置null为删除它们。
例
ua.registrator.setExtraHeaders([
'X-Foo: bar'
]);
setExtraContactParams(extraContactParams)
将自定义标题参数附加到每个注册 /取消注册请求的联系人标题中。他们可以在任何时候被覆盖。
参数:
extraContactParams Object用表示头部参数名称和值的键表示它们的参数值。将其设置null为删除它们。
例:
ua.registrator.setExtraContactParams([
x-vendor: 'FooBar',
verified: true
]);
// => ;x-vendor=FooBar;x-verified
类 JsSIP.RTCSession
该类JsSIP.RTCSession表示WebRTC媒体(音频/视频)会话。它可以由本地用户或远程对等方发起。
它在内部拥有一个RTCPeerConnection实例,可以通过connection属性访问。
实例属性:
Connection 连接;
RTCPeerConnection与此会话关联的基础实例。用它来建立与WebRTC相关的事件(如onaddstream,onaddtrack等)。
请注意,对于拨出电话,拨打电话RTCPeerConnection后设置ua.call()。但是,对于来电呼叫RTCPeerConnection后设置session.answer()。
Direction 方向,指导;
String指示谁开始了会话。当会话由远程对等体启动时,可能的值是“传入”,或者当会话由本地用户启动时,可能的值是“传出”。
local_identity
JsSIP.NameAddrHeader指示本地身份的实例。它对应于方向为“外向”时的INVITE From报头值,当方向为“进入”时与To头部值对应,
remote_identity
JsSIP.NameAddrHeader指示远程身份的实例。它对应于方向为“外向”时的INVITE To标头值,以及方向为“外向”时的From标头值,
start_time 开始时间;
Date对象指示会话开始的时间。在accepted事件被解雇的那一刻,它的价值就在于此。
end_time 结束时间;
Date对象指示会话结束的时间。在ended事件被解雇的那一刻,它的价值就在于此。
data 数据;
应用程序存储与此会话关联的自定义信息的对象。
实例方法:
isInProgress()
返回true如果会话过程中的状态(未建立,而不是结束)。
isEstablished()
true会话建立后返回。
isEnded()
true会话结束时返回。
isReadyToReOffer()
返回true会话是否准备好了SDP重新协商(hold(),unhold()或renegotiate()方法)。
answer(options)
应答传入的会话。此方法仅适用于传入会话。
参数:options
options对象中的字段
extraHeaders Array的Strings额外SIP头为200 OK响应。
mediaConstraints Object有两个有效的字段(audio和video)指示会话是否打算使用音频和/或视频以及要使用的约束。默认值根据收到的SDP报价设置。
mediaStream MediaStream 传送到另一端。
pcConfig Object代表RTCPeerConnection RTCConfiguration。
rtcConstraints Object 表示RTCPeerConnection约束。
rtcAnswerConstraints Object代表RTCPeerConnection的约束createAnswer()。
rtcOfferConstraints Object代表RTCPeerConnection的约束createOffer()(用于将来的传入的无需SDP提供的reINVITE )。
sessionTimersExpires Number (以秒为单位)默认的会话定时器间隔(默认值是90,不要设置一个较低的值)。
terminate()
1.终止当前会话,无论其方向或状态。
2.根据会话的状态,这个函数可能会发送一个CANCEL请求,一个非2xx的最终响应,一个BYE请求,甚至没有请求。
3.对于传入的会话,如果用户没有应答传入的INVITE,则该函数发送非2xx最终响应,并带有可选的指定状态码和原因短语。480 Unavailvable是默认回应。
4.对于传出会话,如果原始INVITE尚未发送,则永远不会发送。如果最初的INVITE没有得到最终答复,则行为取决于是否收到临时答复。如果收到临时响应,则会发送CANCEL请求。如果没有收到临时响应,则按照RFC 3261,该功能不会发送CANCEL。如果接收到临时响应,则取消请求将自动发送。
5.对于传入和传出,如果INVITE会话已经被最终响应回答,则会发送BYE请求。
参数:Options
options对象中的字段
extraHeaders Array的Strings额外SIP头的MESSAGE请求。
status_code Number介于300和699之间,代表SIP响应码。
reason_phrase String代表SIP原因词组。
Body 表示SIP消息体的字符串(如果设置了此参数,则必须在extraHeader字段中设置相应的Content-Type标题字段)。
注意:当生成 CANCEL时,status_code可以取值从200到699.status_codeandreason_phrase将按照 RFC3326中的规定形成一个Reason头域。一个取消不会采取extraHeaders参数也没有body放慢参数。
sendDTMF(tone, options=null)
使用SIP INFO方法发送一个或多个DTMF音。
Tone String或Number由一个或多个有效的DTMF符号组成。
Options 可选Object附加参数。见下文。
options对象中的字段;
duration 正数十进制Number表示以毫秒表示的音调持续时间。默认值是100。
interToneGap 正数小数Number表示以毫秒表示的两个音调之间的间隔。默认值是500。
extraHeaders 可选Array的Strings额外SIP头为每个INFO请求。
例:
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 String表示SIP INFO消息的Content-Type头域值。
Body 可选String代表SIP INFO消息体。
options对象中的字段
extraHeaders 可选Array的Strings额外SIP头为每个INFO请求。
hold(options=null, done=null)
1.通过发送Re- INVITE或UPDATE SIP请求使呼叫保持。
2.false如果此时重新协商不可能,则返回。
Options 可选Object附加参数。见下文。
Done Function重新谈判成功后可选择调用。
options对象中的字段
useUpdate Boolean发送更新而不是重新邀请
extraHeaders Array的Strings额外SIP头的请求。
unhold(options=null, done=null)
1.通过发送Re- INVITE或UPDATE SIP请求来恢复保持的呼叫。
2.false如果此时重新协商不可能,则返回。
Options 可选Object附加参数。见下文。
Done Function重新谈判成功后可选择调用。
options对象中的字段
useUpdate Boolean发送更新而不是重新邀请
extraHeaders Array的Strings额外SIP头的请求。
renegotiate()
1.强制进行SDP重新协商。修改附加到底层的本地流RTCPeerConnection(通过connection属性)后很有用。
2.false如果此时重新协商不可能,则返回。
Options 可选Object附加参数。见下文。
Done Function重新谈判成功后可选择调用。
options对象中的字段
useUpdate Boolean发送更新而不是重新邀请
extraHeaders Array的Strings额外SIP头的请求。
rtcOfferConstraints Object代表RTCPeerConnection的约束createOffer()。
isOnHold()
返回一个Object属性为“local”和“remote”的Boolean值以及与每个属性关联的值。它表示“本地”和/或“远程”对等体是否处于保持状态。
例:
rtcsession.isOnHold();
{
'local': true, // User has put the other peer on hold
'remote': false // Peer hasn't put user on hold
}
mute(options=null)
1.静音本地音频和/或视频。
Audio Boolean 确定是否必须静音本地音频
Video Boolean 确定本地视频是否必须静音
unmute(options=null)
1.取消静音本地音频和/或视频。
Audio Boolean 确定本地音频是否必须取消静音
Video Boolean 确定本地视频是否必须取消静音
isMuted()
- 返回一个Object属性“音频”和“视频”,并Boolean与每个值关联的值。它代表本地“音频”和/或“视频”是否静音。
例:
rtcsession.isMuted();
{
'audio': true, // Local audio is muted
'video': false // Local audio is not muted
}
refer(target, options=null)
1.将引用对象的REFER方法作为引用资源发送给给定的目标。
2.甲REFER方法隐含地生成订阅的参考状态。从对端接收到的NOTIFY请求将以事件形式进行处理和呈现JsSIP.RTCSession.ReferSubscriber。
参数:
Target 参考资源。String表示目标用户名或完整的SIP URI或JsSIP.URI实例。
Options 可选Object附加参数(见下文)。
options对象中的字段
extraHeaders 可选Array的Strings额外SIP头的REFER请求。
eventHandlers 可选Object的事件处理程序将被注册为JsSIP.RTCSession.ReferSubscriber。
replaces 可选JsSIP.RTCSession实例该对话框意味着在参照目标处被替换。这是此用户代理与Refer-To资源指向的实时会话。
resetLocalMedia()
通过启用音频和视频轨道来重置本地MediaStream(除非远程对等体处于保留状态)。
事件:
JsSIP.RTCSession类定义了一系列事件。他们每个人都允许回调函数注册,以便让用户执行每个给定的刺激函数。
Peerconnection
1.一旦底层RTCPeerConnection被创建,就会被触发。应用程序有机会通过例如添加一个RTCDataChannel或者设置相应的事件监听器来改变对等连接。
data传出会话中的事件字段
peerconnection 该RTCPeerConnection实例。
例:
var datachannel;
session.on('peerconnection', function(data) {
datachannel = data.peerconnection.createDataChannel('chat');
});
Connecting
1.在本地媒体流加入RTCSession之后,在ICE采集开始之前触发初始INVITE请求或“200 OK”响应传输。
data传入会话中的事件字段
request JsSIP.IncomingRequest表示传入的INVITE SIP消息的实例。
data传出会话中的事件字段
request JsSIP.OutgoingRequest表示传出INVITE SIP消息的实例。
Sending
1.在发送初始INVITE之前触发(仅用于拨出电话)。它为应用程序提供了一个调用SIP INVITE或其SDP的机会。
data传出会话中的事件字段
request JsSIP.OutgoingRequest表示传出INVITE SIP消息的实例。
Progress
1.在接收或生成对INVITE请求的1XX SIP类别响应(> 100)时触发。
2.事件在SDP处理之前被触发,如果存在的话,可以根据需要调整它,甚至删除对象中响应参数的主体data。
data传入会话中的事件字段
originator '本地' String。
data传出会话中的事件字段
originator '遥远' String。
Response JsSIP.IncomingResponse接收到的SIP 1XX响应的实例。
Accepted
1.通话被接受时(2XX收/发)触发。
data传入会话中的事件字段
originator '本地' String。
data传出会话中的事件字段
originator '遥远' String。
Response JsSIP.IncomingResponse收到的SIP 2XX响应的实例。
Confirmed
1.通话确认(ACK收到/发送)时触发。
data传入会话中的事件字段
originator '本地' String。
data传出会话中的事件字段
originator '遥远' String。
Response JsSIP.IncomingResponse收到的SIP 2XX响应的实例。
Ended
1.已建立的通话结束时触发。
事件data字段
Originator '本地'/'远程'/'系统' String。呼叫终止来自哪里?
Message JsSIP.IncomingRequest或JsSIP.IncomingResponse当originator值为“远程” 时产生呼叫终止的实例,null否则。
Cause 失败和最终原因的一个价值。
Failed
1.当会议无法建立时被解雇。
事件data字段
Originator '本地'/'远程'/'系统' String。通话失败来自哪里?
Message JsSIP.IncomingRequest或JsSIP.IncomingResponse当originator值为“远程” 时产生呼叫失败的实例,null否则。
Cause 失败和最终原因的一个价值。
newDTMF
1.为传入或传出的DTMF启动。
data传入DTMF的事件字段
originator '遥远' String。新的DTMF由远程对端生成。
Dtmf JsSIP.RTCSession.DTMF 实例。
Request JsSIP.IncomingRequest收到的INFO请求的实例。
data传出DTMF的事件字段
originator '本地' String。新的DTMF由本地用户生成。
Dtmf JsSIP.RTCSession.DTMF 实例。
Request JsSIP.OutgoingRequest传出INFO请求的实例。
newInfo
1.为传入或传出的SIP INFO消息而启动。
data传入SIP INFO消息的事件字段。
Originator '遥远' String。新的SIP INFO消息由远程对等体生成。
Info JsSIP.RTCSession.Info 实例。
Request JsSIP.IncomingRequest收到的INFO请求的实例。
data传出SIP INFO消息的事件字段。
Originator '本地' String。新的SIP INFO消息。由本地用户生成。
Info JsSIP.RTCSession.Info 实例。
Request JsSIP.OutgoingRequest传出INFO请求的实例。
Hold 保持;
1.当用户或同伴把对方搁置的时候被解雇。
事件data字段
Originator String如果另一个对等方已经让用户保持“远程” 状态。String如果用户已经把另一个对方挂起,则为“本地” 。
Unhold 取消保持;
1. 当用户或对方恢复对方的保持状态时触发。
事件data字段
Originator String如果其他对等方已将用户从保持状态恢复,则为“远程” 。String如果用户已经恢复另一个对等体,则为“本地” 。
Muted 静音;
1. 本地媒体静音时被解雇
事件data字段
Audio Boolean 确定本地音频是否静音。
Video Boolean 确定本地视频是否被静音。
Unmuted 取消静音;
1.在当地媒体取消解散时被解雇。
事件data字段
Audio Boolean 确定本地音频是否静音。
Video Boolean 确定本地视频是否被静音。
Reinvite 重新邀请;
1.收到对话中的reINVITE时触发。
事件data字段
Request JsSIP.IncomingRequest 收到的reINVITE请求的实例。
Callback 最初undefined。如果用户在这里设置了一个函数,那么一旦reINVITE被处理,它就会被执行。
reject() 拒绝Method,如果再要执行INVITE被拒绝。默认使用403响应码。
事件data.reject()参数
Options 可选Object附加参数(见下文)。
options对象中的字段
extraHeaders Array的Strings额外SIP头的MESSAGE请求。
status_code Number介于300和699之间,代表SIP响应码。
reason_phrase String代表SIP原因词组。
Update 更新;
1.收到对话中的UPDATE时触发。
事件data字段
Request JsSIP.IncomingRequest收到的更新请求的实例。
Callback 最初undefined。如果用户在这里设置一个函数,那么一旦UPDATE被处理,它就会被执行。
reject() 拒绝Method,如果再要执行INVITE被拒绝。默认使用403响应码。
事件data.reject()参数
Options 可选Object附加参数(见下文)。
options对象中的字段
extraHeaders Array的Strings额外SIP头的MESSAGE请求。
status_code Number介于300和699之间,代表SIP响应码。
reason_phrase String代表SIP原因词组。
Refer 参考;
1.收到对话中的REFER时触发。
2.如果授予参考批准,JsSIP.RTCSession则在参考标题字段中指示的目标生成新的传出。
3.该NOTIFY机制被用于通知代理器发送的REFER中定义的参考的状态RFC 3515。
4.NOTE:Refer-To资源可以在传入属性中访问。JsSIP.IncomingRequest refer_to JsSIP.URI
事件data字段
Request JsSIP.IncomingRequest收到的REFER请求的实例。
accept() Method如果接受REFER,同意批准。这将生成一个传出JsSIP.RTCSession到引用到URI标识的资源。
reject() 同意拒绝Method,如果要执行REFER被拒绝。
事件data.accept()参数
newRTCSession(session) 可选的回调Function代表新的传出的事件执行。如果没有定义,则前一个事件将被发射。JsSIP.UA newRTCSessionRTCSessionfunction
options 可选Object提供传出的选项JsSIP.RTCSession。该参数的语义对应于方法的可选参数。JsSIP.UA call
事件data.reject()参数 这个方法不需要任何参数。
Replaces 取代;
1.通过Replaces标题字段收到指向这个INVITE的对话INVITE时触发。RTCSession
2.批准后,现在JsSIP.RTCSession终止,当新的建立。
事件data字段
Request JsSIP.IncomingRequest收到的INVITE请求的实例。
accept() Method如果接受邀请,同意批准。一个传入JsSIP.RTCSession将被生成。
reject() Method如果INVITE被拒绝,同意拒绝执行。
事件data.accept()参数
newRTCSession(session) 可选的回调Function代表新来的事件执行。如果没有定义,则前一个事件将被发射。JsSIP.UA newRTCSessionRTCSessionfunction
事件data.reject()参数 这个方法不需要任何参数。
Sdp
1.在将远程SDP传递给RTC引擎之前以及在发送本地SDP之前触发。
2.此事件提供了修改传入和传出SDP的机制。
事件data字段
Originator String指示SDP是本地生成的还是远程接收的。可能的值是local或remote分别。
Type String表明SDP是一个offer还是一个answer。
Sdp String代表SDP。必须直接对此参数进行修改。
Getusermediafailed
1.内部通话getUserMedia()失败时触发。它提供了DOMError作为参数。
peerconnection:createofferfailed
1.内部通话createOffer()失败时触发。它提供了DOMError作为参数。
peerconnection:createanswerfailed
1.内部通话createAnswer()失败时触发。它提供了DOMError作为参数。
peerconnection:setlocaldescriptionfailed
1.内部通话setLocalDescription()失败时触发。它提供了DOMError作为参数。
peerconnection:setremotedescriptionfailed
1.内部通话setRemoteDescription()失败时触发。它提供了DOMError作为参数。
类 JsSIP.Message
基于SIP 消息的IM。
实例属性:
Direction 方向;
String指示谁发送了MESSAGE消息。当MESSAGE由远程对等体发送时,可能的值是“传入”,或者当MESSAGE由本地用户发送时,可能的值是“ 传出” 。
local_identity
JsSIP.NameAddrHeader指示本地身份的实例。它对应于方向为“传出”时的MESSAGE From头部值,以及当方向为“传入”时的To头部值
remote_identity
JsSIP.NameAddrHeader指示远程身份的实例。当方向是“传出”时它对应于MESSAGE To标题值,当方向是“传入”时对应于From标题值,
实例方法
send(target, body, options=null)
1.通过WebSocket连接发送消息。此方法仅适用于传出消息。
参数:
Target 消息的目的地。String表示目标用户名或完整的SIP URI。
Body 消息内容。String代表消息的主体。
Options 可选Object附加参数(见下文)。
options对象中的字段
contentType 可选String代表正文的内容类型。默认text/plain。
eventHandlers Object事件处理程序的可选项将被注册到每个消息事件。为每个要通知的事件定义事件处理程序。
extraHeaders Array的Strings额外SIP头的MESSAGE请求。
例:
var text = 'Hello Bob!';
var eventHandlers = {
'succeeded': function(e){ /* Your code here */ },
'failed': function(e){ /* Your code here */ };
};
var options = {
'eventHandlers': eventHandlers
};
coolPhone.sendMessage('sip:bob@example.com', text, options);
accept(options)
1.积极响应传入的消息。指示发送者已被传送到目的地。此方法仅适用于传入消息。
参数
Options 可选Object附加参数(见下文)。
options对象中的字段
extraHeaders Array的Strings额外SIP头的MESSAGE请求。
Body 表示SIP消息正文的字符串。
注意:如果设置了此参数,则必须在'extraHeader'字段中设置相应的'Content-Type'标题字段。
reject(options)
1.对传入的消息做出负面的反应。指示发件人尚未传送到目的地。响应代码和原因决定了拒绝原因。此方法仅适用于传入消息。
参数
Options 可选Object附加参数(见下文)。
options对象中的字段
extraHeaders Array的Strings额外SIP头的MESSAGE请求。
status_code Number介于300和699之间,代表SIP响应码。
reason_phrase String代表SIP原因词组。
Body 表示SIP消息正文的字符串。
注意:如果设置了此参数,则必须在'extraHeader'字段中设置相应的'Content-Type'标题字段。
事件:
JsSIP.Message类定义了一系列事件。他们每个人都允许回调函数注册,以便让用户执行每个给定的刺激处理程序。
succeeded
1.在收到MESSAGE请求的最终肯定响应时触发。
事件data字段
Originator '遥远' String。远程同级对SIP MESSAGE作出了积极响应。
Response JsSIP.IncomingResponse 收到的2XX响应的实例。
failed
1.如果没有收到发送的MESSAGE消息,则会触发。
事件data字段
Originator '远程'/'系统' String。MESSAGE失败来自哪里?
Response JsSIP.IncomingResponse生成失败的实例的原始值remote,否则为null。
Cause 失败和最终原因的一个价值。
类 JsSIP.OutgoingRequest
这个实例JsSIP.OutgoingRequest持有一个SIP请求被发送。
实例属性
method
String指示SIP请求方法。
ruri
JsSIP.URI表示请求目标URI的实例。
cseq
Number 代表CSeq号码。
call_id
String 表示Call-ID头字段值。
from
JsSIP.NameAddrHeader 表示From标题字段的值。
to
JsSIP.NameAddrHeader 表示To头字段值。
body
String 代表请求主体。
实例方法
setHeader(name, value)
用给定的值填充给定的标题。
参数
Name String 指示标题名称。
Value 由a表示标头值(一个或多个)String或Array的Strings。
getHeader(name)
获取给定标题名称的第一个值。返回一个String头的值,或者null头不存在。
参数
Name String 指示标题名称。
getHeaders(name)
获取给定名称的标题。返回Array的Strings含有为给定标题名称的所有值。
参数
Name String 指示标题名称。
hasHeader(name)
验证给定标题的存在。true如果标题存在false则返回,否则返回
参数
Name String 指示标题名称。
toString()
返回一个String生成的SIP请求。
类 JsSIP.IncomingMessage
实例属性
method
String指示传入的SIP消息的方法。
from
JsSIP.NameAddrHeader实例表示传入的SIP消息的From头部值。
to
JsSIP.NameAddrHeader实例表示传入SIP消息的To头值。
body
String表示SIP消息体,null如果没有主体存在。
实例方法
countHeader(name)
计算给定标题名称的标题数量。返回Number给定名称的头文件。
参数
Name String 指示标题名称。
getHeader(name)
获取给定标题名称的第一个值。返回一个String头的值,或者null头不存在。
参数
Name String 指示标题名称。
getHeaders(name)
获取给定名称的标题。返回Array的Strings含有为给定标题名称的所有值。
参数
Name String 指示标题名称。
hasHeader(name)
验证给定标题的存在。true如果标题存在false则返回,否则返回。
参数
Name String 指示标题名称。
parseHeader(name, idx)
分析给定位置处的指定标题。如果标题不存在或解析错误Object,undefined则返回解析的标题(an )。
参数
Name String 指示标题名称。
Idx 标题索引(Number)被解析。默认值是0(第一个标题)。
toString()
String用收到的SIP消息返回a 。
类 JsSIP.IncomingRequest
JsSIP.IncomingRequest持有收到的SIP请求的实例。
父级 JsSIP.IncomingRequest继承JsSIP.IncomingMessage。
实例属性
ruri
JsSIP.URI表示请求URI的的SIP消息。
类 JsSIP.IncomingResponse
JsSIP.IncomingResponse保存收到的SIP响应的实例。
父级 JsSIP.IncomingResponse继承JsSIP.IncomingMessage。
实例属性
status_code
Number指示SIP响应的状态码。
reason_phrase
String指出SIP响应的原因词组。
类 JsSIP.Socket
1.本节介绍的Socket接口从用于发送和接收SIP流量的机制中抽象出JsSIP 。JsSIP内部传输现在处理这个接口,因此,它不作为传输套接字连接到内置的WebSocket。
2.实现必须遵循这里指定的接口,以使JsSIP与底层传输机制一起工作。
3.JsSIP公开了一个JsSIP.WebSocketInterface为浏览器环境实现这个接口的内置类。Node.js的实现也可以通过:jssip-node-websocket。
实例属性
via_transport
String 指示Via头域中用于传出请求的Via传输。
url
String识别套接字URL。它用于调试目的。
sip_uri
String指示连接端点SIP URI。用于SIP路由标题字段。
实例方法
connect()
当需要发送和接收数据的套接字可用性时,由JsSIP调用。只要套接字准备就绪,或套接字无法连接或不可用,就必须立即调用
事件处理程序。onconnectondisconnect
disconnect()
现在不再需要套接字时,由JsSIP调用。
在这个调用之后调用的事件处理程序将被忽略。
send(data)
当需要发送给定的数据时,由JsSIP调用。
true数据成功发送时返回。false除此以外。
参数:
Data String 表示要发送的数据。
事件处理程序
onconnect()
当套接字变得可用于发送和接收数据之后,必须connect被调用,或者主动断开发生。
ondisconnect(error, code, reason)
当套接字变得不可用于发送或接收数据时,必须调用它。
参数
Error Boolean 指示套接字是否由于错误而断开连接
Code 可选Number指示套接字断开代码。
Reason 可选String指示插座断开原因。
ondata(data)
当有完整的SIP消息被JsSIP处理时,必须被调用。
参数
Data String或Binary数据的表示。
类 JsSIP.WebSocketInterface
1.JsSIP内置的JsSIP.Socket浏览器环境界面。
2.如果需要,属性设置器允许套接字自定义。
实例属性
取一个String表示WebSocket服务器URL的参数。
属性设置器
via_transport(value)
String 指示Via头域中用于传出请求的Via传输。
例:
var socket = new JsSIP.WebSocketInterface('ws://sip-ws.example.com');
socket.via_transport = "tcp";
configuration.sockets = [ socket ];
var ua = new UA(configuration);
类 JsSIP.URI
1.JsSIP.URI该类的一个实例表示一个SIP URI,并提供一组属性和方法来检索和设置一个URI的不同部分。
2.它提供了以完整形式(包括参数和标题)和AoR形式表示URI的方法。
3.URI允许其本身被clonned所以第二URI可以从本身来形成。
实例化
1.JsSIP.URI(scheme="sip", user=null, host, port=null, parameters=null, headers=null)
2.如果没有host值传递,这个类的实例化将引发一个异常。
Scheme 可选String表示URI方案。默认值是issip
User 可选String指示用户名称。
Host String代表主人。它可以是IP地址或主机名。
Parameters 可选Object属性值以String表单形式表示。对于空参数,null必须指示一个值。
Headers 可选Object属性值由表单String或表单中的ArrayStrings
例
var parameters = {
param_name: 'param_value',
valueless_param: null
}
var headers = {
header_name: 'header_value',
multi_header: ['multi_header_value1','multi_header_value2']
}
var uri = new JsSIP.URI('sip', 'alice', 'atlanta.com', 5060, parameters, headers)
uri.toAor() // Returns "sip:alice@atlanta.com"
uri.toString()
//Returns"sip:alice@atlanta.com:5060;param_name=param_value;valueless_param?Header-Name=header_value&Multi-Header=multi_header_value1&Multi-Header=multi_header_value2"
实例属性
scheme
设置或获取一个String指示URI方案。
例
uri.scheme = 'sip';
uri.scheme // Returns 'sip'
uri.scheme = 'sIP';
uri.scheme // Returns 'sip'
user
设置或获取一个String指示URI用户。
例
uri.user = 'alice';
uri.user // Returns 'alice'
uri.user = 'Alice';
uri.user // Returns 'Alice'
uri.user = 'j@s0n'
uri.toAor() // Returns 'sip:j%40s0n@atlanta.com'
host
设置或获取一个String指示URI主机。
例
uri.host = 'atlanta.com';
uri.host // Returns 'atlanta.com'
uri.host = 'AtLATta.cOm';
uri.host // Returns 'atlanta.com'
port
设置或获取一个Number指示URI端口。
例
uri.port = 5060;
uri.port // Returns 5060
uri.port = '5060';
uri.port // Returns 5060
实例方法
setParam(key, value=null)
用给定的值创建或替换给定的URI参数。
参数
Key String 指示参数名称。
Value 可选,String指示参数值。
例
uri.setParam('param_name', 'param_value');
getParam(key)
获取给定URI参数的值。返回undefined参数集中不存在的参数。
参数
Key String 指示参数名称。
例
uri.getParam('param_name'); // Returns 'param_value'
hasParam(key)
验证给定的URI参数的存在。返回true参数是否存在,false否则返回。
参数
Key String 指示参数名称。
例
uri.hasParam('param_name'); // Returns true
deleteParam(key)
从URI中删除给定的参数。
参数
Key String 指示参数名称。
例
uri.deleteParam('param_name');
clearParams()
删除所有的URI参数。
setHeader(key, value)
使用给定值创建或替换给定的URI标头。
参数
Key String 指示标题名称。
Value String或者Array指示标题值。
例
uri.setHeader('header_name','header_value');
uri.setHeader('header_name',['header_value1','header_value2']);
getHeader(key)
获取给定的URI标头的值。返回Array给定标题名称的标题值/ s,或undefined标题集合中不存在标题。
参数
Key String 指示标题名称。
例
uri.setHeader('header_name',['header_value1','header_value2']);
uri.getHeader('header_name'); // Returns ['header_value1','header_value2']
uri.setHeader('header_name','header_value');
uri.getHeader('header_name'); // Returns ['header_value']
hasHeader(key)
验证给定URI标头的存在。true如果标题存在false则返回,否则返回。
参数
Key String 指示标题名称。
例
uri.setHeader('header_name','header_value');
uri.hasHeader('header_name'); // Returns true
deleteHeader(key)
从URI中删除给定的标题。
参数
Key String 指示标题名称。
例
uri.delteHeader('header_name');
clearHeaders()
删除所有的URI标头。
例
uri.clearHeaders();
clone()
返回JsSIP.URI该URI的克隆实例。
例
cloned_uri = uri.clone();
cloned_uri === uri // Returns false
toString()
返回一个String表示URI。
不能转义的字符会按照RFC 3261的BNF语法中的规定进行转义。
例
uri.toString();//Returns"sip:alice@atlanta.com:5060?header_name=header_value1&header_name=header_value2"
toAor()
返回一个String表示URI的AoR 。
不能转义的字符会按照RFC 3261的BNF语法中的规定进行转义。
例
uri.toAor(); // Returns "sip:alice@atlanta.com"
uri.user = 'j%40s0n'
uri.toAor(): // Returns "sip:j%40s0n@atlanta.com"
模块功能
parse(uri)
String根据SIP URI语法规则解析给定的内容。JsSIP.URI如果解析成功则返回一个实例,undefined否则返回。
参数
Uri String代表一个SIP URI。
例
var uri = JsSIP.URI.parse('sip:alice@atlanta.com');
类 JsSIP.NameAddrHeader
JsSIP.NameAddrHeader该类的实例包含RFC 3261的BNF语法中所述的“name-addr”或“addr-spec”值。
“name-addr”值的格式是“display name < URI >”。
例:
From: "Alice" <sip:alice@atlanta.com>
“addr-spec”值的格式为“ URI ”。
例:
From: sip:alice@atlanta.com
实例化
JsSIP.NameAddrHeader(uri, display_name=null, parameters=null)
如果没有uri值传递,这个类的实例化将引发一个异常。
参数
Uri JsSIP.URI 实例。
display_name 可选String指示显示名称。
Parameters 可选Object属性值以String表单形式表示。对于空参数,null必须指示一个值。
例
var parameters = {
'parameter_1': 'value_1',
'parameter_2': null
}
var header = new JsSIP.NameAddrHeader(uri, 'Mrs. Alice', parameters)
header.toString()//Returns'"Mrs.Alice"<sip:alice@atlanta.com>;parameter_1=value_1;parameter_2'
实例属性
display_name
设置或获取一个String指示标题显示名称。
例
header.display_name = 'Mrs. Alice';
uri
Getter为JsSIP.URI这个“名字地址” 的实例。
例
header.display_name = 'Mrs. Alice';
实例方法
setParam(key, value=null)
用给定的值创建或替换给定的头部参数。
参数
Key String 指示参数名称。
Value 可选,String指示参数值。
例
header.setParam('param_name', 'param_value');
getParam(key)
获取给定标题参数的值。返回undefined参数集中不存在的参数。
参数
Key String 指示参数名称。
例
header.setParam('param_name', 'param_value');
header.getParam('param_name'); // Returns 'param_value'
hasParam(key)
验证给定的头参数的存在。返回true参数是否存在,false否则返回。
参数
Key String 指示参数名称。
例
header.setParam('param_name', 'param_value');
header.hasParam('param_name'); // Returns true
deleteParam(key)
从头中删除给定的参数。
参数
Key String 指示参数名称。
例
header.deleteParam('param_name');
clearParams()
删除所有标题参数。
clone()
返回JsSIP.NameAddrHeader标头的克隆实例。
例
cloned_header = header.clone();
cloned_header === header // Returns false
toString()
返回一个String表示标题。
不能转义的字符会按照RFC 3261的BNF语法中的规定进行转义。
例
header.toString();//Returns'"Mrs.Alice"<sip:alice@atlanta.com:5060>;param_name=param_value'
模块功能
parse(nameAddrHeader)
String根据名称地址头文法规则解析给定的内容。JsSIP.NameAddrHeader如果解析成功则返回一个实例,undefined否则返回。
参数
nameAddrHeader String 表示名称地址标题字段值。
例
var name_addr_hdr=JsSIP.NameAddrHeader.parse('"Mrs.Alice"<sip:alice@atlanta.com:5060>;param_name=param_value');
jssip-node-websocket
JsSIP.Socket基于websocket模块的Node.js接口。
在Node.js中运行时,该模块为JsSIP提供了WebSocket支持。从JsSIP代码中分离这个模块的目的是为了防止在浏览器环境中编译Node.js websocket模块
UA配置参数
JsSIP.UA需要具有强制参数和可选参数的配置对象
例
var socket = new JsSIP.WebSocketInterface(ws://sip-ws.example.com);
var configuration = {
sockets : [ socket ],
uri : 'sip:alice@example.com',
password : 'superpassword'
};
var ua = new JsSIP.UA(configuration);
强制参数
URI
1.与用户代理关联的SIP URI(String)。这是您的提供商给您的SIP地址。
例
uri: "sip:alice@example.com"
sockets