(官網地址: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
一組