jsSip開發文檔
(官網地址:http://www.jssip.net/)
完整案例demo下載地址: http://download.csdn.net/download/qq_39421580/10214712
概觀:
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
一組