(官网地址:http://www.jssip.net/)html
完整案例demo下载地址: http://download.csdn.net/download/qq_39421580/10214712node
1.JsSIP是一个简单易用的JavaScript库,它利用SIP和WebRTC的最新发展,在任何网站上提供全功能的SIP端点。web
2.经过JsSIP ,只要几行代码,任何网站均可以经过音频,视频等得到实时通讯功能。api
1.经过WebSocket传输的 SIP。浏览器
2.音频/视频通话,即时消息和状态。服务器
3.轻巧!websocket
4.100%纯JavaScript从头开始构建。session
5.易于使用和功能强大的用户API。less
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);
类 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()
例:
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
一组