jsSip 开发
SIP协议
本段参考https://www.cnblogs.com/xiaxveliang/p/12434170.html
简介
SIP(Session Initiation Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。广泛应用于CS(Circuit Switched,电路交换)、NGN(Next Generation Network,下一代网络)以及IMS(IP Multimedia Subsystem,IP多媒体子系统)的网络中,可以支持并应用于语音、视频、数据等多媒体业务,同时也可以应用于Presence(呈现)、Instant Message(即时消息)等特色业务。可以说,有IP网络的地方就有SIP协议的存在。SIP是类似于HTTP,SIP可以减少应用特别是高级应用的开发时间。由于基于IP协议的SIP利用了IP网络,固定网运营商也会逐渐认识到SIP技术对于他们的远意义。两种模式
session model 消息体内容大于1300字节时使用,一般用于音视频
pager model 消息体内容小于1300字节时使用,一般用于及时消息
即时消息 pager model
在Sip消息中,对于消息体不大于1300字节时,一般采用Pager Model。Sip消息通信中采用MESSAGE方法,MESSAGE方法本身并不建立Dialog,在多数应用中,每条IM消息都是独立的,颇似分页消息。

sip消息体格式
- 请求行(request-line) or 状态行(status-line)
- 消息头(header)
- 正文(body)
请求行格式 Method Request-URI SIP-Version CRLF
请求行示例 INVITE sip:bob@zte.com SIP/2.0 /r/n
状态行
格式 SIP-Version Status-Code Reason-Phrase CRLF
示例 SIP/2.0 200 OK /r/n
状态码
| 状态码 | 含义 |
|---|---|
| 1xx: | 临时响应、表示请求消息正在被处理 |
| 2xx | 成功响应、表示请求已被成功接收完全理解并接收 |
| 3xx | 重定向响应、表示需采取进一步完成请求 |
| 4xx | 客户机错误、表示请求消息中包含语法错误信息或服务器无法完成客户机的请求 |
| 5xx | 服务器错误、表示服务器无法合法完成请求 |
| 6xx | 全局故障 、表示任何服务器都无法完成该请求 |
常用状态码
| 状态码 | msg | 含义 |
|---|---|---|
| 100 | Trying | 试呼叫 |
| 180 | Ringing | 振铃 |
| 181 | Call is Being Forwarded | 呼叫正在前转 |
| 200 | OK | 成功响应 |
| 302 | Moved Temporarily | 临时迁移 |
| 400 | Bad Request | 错误请求 |
| 401 | Unauthorized | 未授权 |
| 403 | Forbidden | 禁止 |
| 404 | Not Found | 用户不存在 |
| 408 | Request Timeout | 请求超时 |
| 480 | Temporarily Unavailable | 暂时无人接听 |
| 486 | Busy Here | 线路忙 |
| 504 | Server Time-out | 服务器超时 |
| 600 | Busy Everywhere | 全忙 |
jssip
特征
js的 web的 可音视频通话的 可及时通信的 基于sip协议与webrtc的 库
创建websocket 信令服务器
var socket = new JsSIP.WebSocketInterface('wss://sip.myhost.com');(详见三API)创建jsSIP UA
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.debug
默认情况下,JsSIP不向浏览器控制台记录任何内容。为了启用调试,请在浏览器控制台中运行以下命令并重新加载页面:
JsSIP.debug.enable('JsSIP:*');
请注意,日志记录设置将存储在浏览器LocalStorage中。要禁用它,请在浏览器控制台中运行以下命令并重新加载页面
JsSIP.debug.disable('JsSIP:*');
jsSIP.UA 实例方法
start()
连接到信令服务器,并恢复以前的状态,如果以前停止。重新开始时,如果UA配置中的参数设置为register true,则向SIP域注册。
stop()
保存当前注册状态,正常注销并终止活动会话(如果有的话)后断开与信令服务器的连接。
register()
注册UA。如果register参数设置为true在UA配置参数,则UA将自动注册。
unregister(options=null)
取消注册UA。
options对象中的字段all,可选,Boolean用于注销同一SIP用户的所有绑定。默认值是false。
例
var options = {
all: true
};
call(target, options=null)
拨打多媒体电话。
Target 通话的目的地。String表示目标用户名或完整的SIP URI或JsSIP.URI实例。
Options 可选Object附加参数(见下文)。
sendMessage(target, body, options=null)
使用SIP MESSAGE方法发送即时消息。
Target 消息的目的地。String表示目标用户名或完整的SIP URI或JsSIP.URI实例。
Body 消息内容。String代表消息的主体。
Options 可选Object附加参数(见下文)。
terminateSessions(options=null)
终止正在进行的呼叫。
options 可选Object带有在JsSIP.RTCSession呼叫终止中定义的额外参数。
Body 消息内容。String代表消息的主体。
Options 可选Object附加参数(见下文)。
isRegistered()
如果UA被注册,则返回true; 否则false。
isConnected()
如果UA被注册,则返回true; 否则false。
Events(data事件)
JsSIP.UA类定义了一系列事件。他们每个人都允许回调函数注册,以便让用户执行每个给定的刺激处理程序。
Connecting:
为每个传输连接尝试而触发。
参数
Socket JsSIP.Socket 实例正在连接。
Attempts Number 指示传输连接尝试。
Connected:
连接建立后触发。
参数
Socket JsSIP.Socket 已连接的实例。
Disconnected:
传输连接尝试(或自动重新尝试)失败时触发。
参数
Socket JsSIP.Socket 实例。
Error Boolean 指示套接字是否由于错误而断开连接
Code 可选Number指示套接字断开代码。
Reason 可选String指示插座断开原因。
Registered:
成功注册成功
参数
Response JsSIP.IncomingResponse收到的SIP 2XX响应的实例。
unregistered:
被取消注册。在以下情况下会触发此事件
1.作为未注册请求的结果。UA.unregister()。
2.如果被注册,则定期重新注册失败。
参数
Response JsSIP.IncomingResponse接收到的(未)注册SIP请求的SIP响应实例。
Cause null以便对非注册 SIP请求作出正确的响应。在其他情况下,失败和最终原因的一个值。
registrationFailed:
注册失败。
参数
Response JsSIP.IncomingResponse接收到的(未)注册SIP请求的SIP响应实例。
Cause 失败和最终原因的一个值
registrationExpiring:
1.在注册到期之前几秒钟触发。如果应用程序没有为这个事件设置任何监听器,JsSIP将像往常一样重新注册。
2.如果应用程序订阅了这个事件,它负责ua.register()在registrationExpiring事件中调用(否则注册将过期)。
3.此事件使应用程序有机会在重新注册之前执行异步操作。对于那些在REGISTER请求中的自定义SIP头中使用外部获得的“令牌”的环境很有用。
newRTCSession:
为传入或传出的会话/呼叫而触发
传入参数
originator '远程' String。新会话由远程对等生成。
Session JsSIP.RTCSession 会议的实例。
Request JsSIP.IncomingRequest收到的INVITE请求的实例。
传出参数
originator '本地' String。新会话由本地用户生成。
Session JsSIP.RTCSession 会议的实例。
Request JsSIP.OutgoingRequest传出INVITE请求的实例。
newMessage(新消息):
为传入或传出的MESSAGE请求而触发
传入参数
originator '远程' String。新消息由远程对等生成。
Message JsSIP.Message 实例。
Request JsSIP.IncomingRequest收到的MESSAGE请求的实例。
传出参数
originator '本地' String。新消息由本地用户生成。
Message JsSIP.Message 实例。
Request JsSIP.OutgoingRequest传出MESSAGE请求的实例。
配置ice 实现内网穿透与中继
在call的option参数中配置
'iceServers': [ { 'urls': ['stun:a.example.com', 'stun:b.example.com'] }, { 'urls': 'turn:example.com', 'username': 'foo', 'credential': ' 1234' } ]
JsSIP.Registrator
类JsSIP.Registrator管理UA reigstration程序。
实例方法:
setExtraHeaders(extraHeaders)
将自定义标题追加到每个注册 /取消注册请求。他们可以在任何时候被覆盖。
参数
extraHeaders Array的Strings额外SIP头被包含在每一个注册请求。将其设置null为删除它们。
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 });
JsSIP.RTCSession
该类JsSIP.RTCSession表示WebRTC媒体(音频/视频)会话。它可以由本地用户或远程对等方发起。
它在内部拥有一个RTCPeerConnection实例,可以通过connection属性访问。
实例属性:
Connection
RTCPeerConnection与此会话关联的基础实例。用它来建立与WebRTC相关的事件(如onaddstream,onaddtrack等)。
请注意,对于拨出电话,拨打电话RTCPeerConnection后设置ua.call()。但是,对于来电呼叫RTCPeerConnection后设置session.answer()。
Direction
String 指示谁开始了会话。当会话由远程对等体启动时,可能的值是“incoming”,或者当会话由本地用户启动时,可能的值是“outgoing”。
local_identity
JsSIP.NameAddrHeader指示本地身份的实例。它对应于方向为“outgoing”时的MESSAGE From头部值,以及当方向为“incoming”时的To头部值
remote_identity
JsSIP.NameAddrHeader指示远程身份的实例。当方向是“outgoing”时它对应于MESSAGE To标题值,当方向是“incoming”时对应于From标题值。
start_time
Date对象指示会话开始的时间。在accepted事件被触发的那一刻,它的值就在于此。
end_time
Date对象指示会话开始的时间。在ended事件被触发的那一刻,它的值就在于此。
data
应用程序存储与此会话关联的自定义信息的对象。
实例方法:
isInProgress()
return true 如果会话过程中的状态(未建立,而不是结束)。
isEstablished()
会话建立后返回true。
isEnded()
会话结束时返回true。
isReadyToReOffer()
return true 会话是否准备好了SDP重新协商(hold(),unhold()或renegotiate()方法)。
answer(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对象中的字段。
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附加参数。见下文。
参数
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对象中的字段
useUpdate Boolean发送更新而不是重新邀请
extraHeaders Array的Strings额外SIP头的请求。
done Function重新谈判成功后可选择调用
unhold(options=null, done=null)
1.通过发送Re- INVITE或UPDATE SIP请求来恢复保持的呼叫。
2.如果此时重新协商不可能,则返回false。
参数
options对象中的字段
useUpdate Boolean发送更新而不是重新邀请
extraHeaders Array的Strings额外SIP头的请求
done Function重新谈判成功后可选择调用
renegotiate()
1.强制进行SDP重新协商。修改附加到底层的本地流RTCPeerConnection(通过connection属性)后很有用。
2.如果此时重新协商不可能,则返回false。
参数
options对象中的字段
useUpdate Boolean发送更新而不是重新邀请
extraHeaders Array的Strings额外SIP头的请求。
rtcOfferConstraints Object代表RTCPeerConnection的约束createOffer()
done Function重新谈判成功后可选择调用
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()
1.返回一个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对象中的字段
extraHeaders 可选Array的Strings额外SIP头的REFER请求。
eventHandlers 可选Object的事件处理程序将被注册为JsSIP.RTCSession.ReferSubscriber。
replaces 可选JsSIP.RTCSession实例该对话框意味着在参照目标处被替换。这是此用户代理与Refer-To资源指向的实时会话。
resetLocalMedia()
1.通过启用音频和视频轨道来重置本地MediaStream(除非远程对等体处于保留状态)。
事件
peerconnection
1.一旦底层RTCPeerConnection被创建,就会被触发。应用程序有机会通过例如添加一个RTCDataChannel或者设置相应的事件监听器来改变对等连接。
参数
peerconnection 该RTCPeerConnection实例。
例
var datachannel; session.on('peerconnection', function(data) { datachannel = data.peerconnection.createDataChannel('chat'); });connecting
1.在本地媒体流加入RTCSession之后,在ICE采集开始之前触发初始INVITE请求或“200 OK”响应传输。
传入参数
request JsSIP.IncomingRequest表示传入的INVITE SIP消息的实例。
传出参数
request JsSIP.OutgoingRequest表示传出INVITE SIP消息的实例。
sending
1.在发送初始INVITE之前触发(仅用于拨出电话)。它为应用程序提供了一个调用SIP INVITE或其SDP的机会。
参数
request JsSIP.OutgoingRequest表示传出INVITE SIP消息的实例。
progress
1.在接收或生成对INVITE请求的1XX SIP类别响应(> 100)时触发。
2.事件在SDP处理之前被触发,如果存在的话,可以根据需要调整它,甚至删除对象中响应参数的主体data。
传入参数
originator '本地' String。
传出参数
originator '遥远' String。
response JsSIP.IncomingResponse接收到的SIP 1XX响应的实例
accepted
1.通话被接受时(2XX收/发)触发
出入参数
originator '本地' String
传出参数
originator '遥远' String
response JsSIP.IncomingResponse接收到的SIP 1XX响应的实例
confirmed
1.通话确认(ACK收到/发送)时触发
出入参数
originator '本地' String
传出参数
originator '遥远' String
response JsSIP.IncomingResponse收到的SIP 2XX响应的实例
ended
1.已建立的通话结束时触发
参数
Originator 'local'/'remote'/'system' String。呼叫终止来自哪里?
Message JsSIP.IncomingRequest或JsSIP.IncomingResponse当originator值为“remote” 时产生呼叫终止的实例,否则 null。
Cause 失败和最终原因的一个值。
failed
1.当会议无法建立时被触发
参数
Originator 'local'/'remote'/'system' String。通话失败来自哪里?
Message JsSIP.IncomingRequest或JsSIP.IncomingResponse当originator值为“remote” 时产生呼叫失败的实例,否则null。
Cause 失败和最终原因的一个值
newDTMF
1.为传入或传出的DTMF启动
传入参数
originator 'remote' String。新的DTMF由远程对端生成。
Dtmf JsSIP.RTCSession.DTMF 实例。
Request JsSIP.IncomingRequest收到的INFO请求的实例
传出参数
originator 'local' String。新的DTMF由本地用户生成。
Dtmf JsSIP.RTCSession.DTMF 实例。
Request JsSIP.OutgoingRequest传出INFO请求的实例。
newInfo
1.为传入或传出的SIP INFO消息而启动
传入参数
Originator 'remote' String。新的SIP INFO消息由远程对等体生成。
Info JsSIP.RTCSession.Info 实例。
Request JsSIP.IncomingRequest收到的INFO请求的实例。
传出参数
Originator '本地' String。新的SIP INFO消息。由本地用户生成。
Info JsSIP.RTCSession.Info 实例。
Request JsSIP.OutgoingRequest传出INFO请求的实例。
hold
1.当用户或同伴把对方搁置的时候被触发。
参数
Originator String如果另一个对等方已经让用户保持“remote” 状态。String如果用户已经把另一个对方挂起,则为“local”。
unhold
1. 当用户或对方恢复对方的保持状态时触发。
参数
Originator String如果其他对等方已将用户从保持状态恢复,则为“remote” 。String如果用户已经恢复另一个对等体,则为“local” 。
muted
1. 本地媒体静音时被触发。
参数
Audio Boolean 确定本地音频是否静音。
Video Boolean 确定本地视频是否被静音
unmuted
1. 在当地媒体取消静音时被触发。
参数
Audio Boolean 确定本地音频是否静音。
Video Boolean 确定本地视频是否被静音
reinvite
1. 收到对话中的reINVITE时触发。
参数
Request JsSIP.IncomingRequest 收到的reINVITE请求的实例。
Callback 最初undefined。如果用户在这里设置了一个函数,那么一旦reINVITE被处理,它就会被执行。
reject() 拒绝Method,如果再要执行INVITE被拒绝。默认使用403响应码。
事件data.reject()参数
options 对象中的字段
extraHeaders Array的Strings额外SIP头的MESSAGE请求。
status_code Number介于300和699之间,代表SIP响应码。
reason_phrase String代表SIP原因词组
update
1. 收到对话中的UPDATE时触发。
参数
Request JsSIP.IncomingRequest收到的更新请求的实例。
Callback 最初undefined。如果用户在这里设置一个函数,那么一旦UPDATE被处理,它就会被执行。
reject() 拒绝Method,如果再要执行INVITE被拒绝。默认使用403响应码。
事件data.reject()参数
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
参数
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终止,当新的建立。
参数
Request JsSIP.IncomingRequest收到的INVITE请求的实例。
accept() Method如果接受邀请,同意批准。一个传入JsSIP.RTCSession将被生成。
reject() Method如果INVITE被拒绝,同意拒绝执行。
事件data.accept()参数
newRTCSession(session) 可选的回调Function代表新来的事件执行。如果没有定义,则前一个事件将被发射。JsSIP.UA newRTCSessionRTCSessionfunction
事件data.reject()参数 这个方法不需要任何参数。
replaces
1.通过Replaces标题字段收到指向这个INVITE的对话INVITE时触发。RTCSession
2.批准后,现在JsSIP.RTCSession终止,当新的建立。
参数
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的机制。
参数
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.OutgoingRequest
这个实例JsSIP.OutgoingRequest持有一个SIP请求被发送。
实例属性
method
String指示SIP请求方法
ruri
JsSIP.URI表示请求目标URI的实例
cseq
Number 代表CSeq号码
call_id
String 表示Call-ID头字段值
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.IncommingRequest
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 truedeleteParam(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 truedeleteHeader(key)
从URI中删除给定的标题。
参数
Key String 指示标题名称。
例
uri.delteHeader('header_name');clearHeaders()
删除所有的URI标头。
例
uri.clearHeaders();clone()
返回JsSIP.URI该URI的克隆实例。
例
cloned_uri = uri.clone(); cloned_uri === uri // Returns falsetoString()
返回一个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 truedeleteParam(key)
从头中删除给定的参数
参数
Key String 指示参数名称。
例
header.deleteParam('param_name');clearParams()
删除所有标题参数
clone()
返回JsSIP.NameAddrHeader标头的克隆实例
例
cloned_header = header.clone(); cloned_header === header // Returns falsetoString()
返回一个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');
业务
