這篇翻譯不完整。請(qǐng)幫忙從英語(yǔ)翻譯這篇文章。
這是一個(gè)實(shí)驗(yàn)中的功能
此功能某些瀏覽器尚在開發(fā)中,請(qǐng)參考瀏覽器兼容性表格以得到在不同瀏覽器中適合使用的前綴。由于該功能對(duì)應(yīng)的標(biāo)準(zhǔn)文檔可能被重新修訂,所以在未來(lái)版本的瀏覽器中該功能的語(yǔ)法和行為可能隨之改變。
RTCPeerConnection接口代表一個(gè)由本地計(jì)算機(jī)到遠(yuǎn)端的WebRTC連接。該接口提供了創(chuàng)建,保持,監(jiān)控,關(guān)閉連接的方法的實(shí)現(xiàn)。
注意:?RTCPeerConnection 和?RTCSessionDescription在不同的瀏覽器中有不同的實(shí)現(xiàn)方式。(navigator.getUserMedia()方法也是如此)如果有必要,則需要考慮在不同瀏覽器的實(shí)現(xiàn)。例如:
var PeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;var SessionDescription = window.RTCSessionDescription || window.mozRTCSessionDescription || window.webkitRTCSessionDescription;var GET_USER_MEDIA = navigator.getUserMedia ? "getUserMedia" :? ? ? ? ? ? ? ? ? ? navigator.mozGetUserMedia ? "mozGetUserMedia" :? ? ? ? ? ? ? ? ? ? navigator.webkitGetUserMedia ? "webkitGetUserMedia" : "getUserMedia";var v = document.createElement("video");var SRC_OBJECT = 'srcObject' in v ? "srcObject" :? ? ? ? ? ? ? ? 'mozSrcObject' in v ? "mozSrcObject" :? ? ? ? ? ? ? ? 'webkitSrcObject' in v ? "webkitSrcObject" : "srcObject";
這將提高您的這將提高您的網(wǎng)站或網(wǎng)絡(luò)應(yīng)用的兼容性。Adapter.js提供的代碼解決了瀏覽器兼容性的問(wèn)題
由于RTCPeerConnection實(shí)現(xiàn)了EventTarget?接口,故其可以接收處理事件。
構(gòu)造函數(shù)
RTCPeerConnection.RTCPeerConnection()
構(gòu)造函數(shù);創(chuàng)建一個(gè)新的RTCPeerConnection對(duì)象。
屬性
該接口的屬性繼承了其父接口,?EventTarget.
RTCPeerConnection.canTrickleIceCandidates?只讀
如果遠(yuǎn)端支持UDP打洞或支持通過(guò)中繼服務(wù)器連接,則該屬性值為true。否則,為false。該屬性的值依賴于遠(yuǎn)端設(shè)置且僅在本地的?RTCPeerConnection.setRemoteDescription()方法被調(diào)用時(shí)有效,如果該方法沒(méi)被調(diào)用,則其值為null.
RTCPeerConnection.connectionState?只讀
只讀connectionState屬性通過(guò)返回由枚舉RTCPeerConnectionState指定的字符串值之一來(lái)指示對(duì)等連接的當(dāng)前狀態(tài)。
RTCPeerConnection.currentLocalDescription?只讀
只讀屬性RTCPeerConnection.currentLocalDescription返回一個(gè)描述連接本地端的RTCSessionDescription對(duì)象,因?yàn)樽陨洗蜶TCPeerConnection完成協(xié)商并連接到遠(yuǎn)程對(duì)等體之后,它最近成功協(xié)商。 還包括可能已經(jīng)由ICE代理生成的任何ICE候選者的列表,因?yàn)槭紫缺幻枋龅拿枋鏊硎镜囊s或答案。
RTCPeerConnection.currentRemoteDescription?只讀
只讀屬性RTCPeerConnection.currentRemoteDescription返回一個(gè)RTCSessionDescription對(duì)象,描述連接的遠(yuǎn)程端,因?yàn)樽罱淮蜶TCPeerConnection完成協(xié)商并連接到遠(yuǎn)程對(duì)等體后最近成功協(xié)商。 還包括可能已經(jīng)由ICE代理生成的任何ICE候選者的列表,因?yàn)槭紫缺幻枋龅拿枋鏊硎镜囊s或答案。
RTCPeerConnection.defaultIceServers?只讀
只讀屬性RTCPeerConnection.defaultIceServers根據(jù)RTCIceServer字典返回一個(gè)對(duì)象數(shù)組,該字典指示如果在RTCConfiguration中沒(méi)有提供給RTCPeerConnection的默認(rèn)情況下,瀏覽器將使用ICE服務(wù)器。 然而,瀏覽器根本不需要提供任何默認(rèn)的ICE服務(wù)器。
RTCPeerConnection.iceConnectionState?只讀
只讀屬性RTCPeerConnection.iceConnectionState返回與RTCPeerConnection關(guān)聯(lián)的ICE代理的狀態(tài)類型為RTCIceConnectionState的枚舉。
RTCPeerConnection.iceGatheringState?只讀
只讀屬性,返回一個(gè)RTCIceGatheringState類型的結(jié)構(gòu)體,它描述了連接的ICE收集狀態(tài)
RTCPeerConnection.idpLoginUrl?只讀
blah
RTCPeerConnection.localDescription?只讀
只讀屬性,返回一個(gè)?RTCSessionDescription?,它描述了這條連接的本地端的會(huì)話控制(用戶會(huì)話所需的屬性以及配置信息)。如果本地的會(huì)話控制還沒(méi)有被設(shè)置,它的值就會(huì)是null。
RTCPeerConnection.peerIdentity?只讀
只讀屬性,返回一個(gè)RTCIdentityAssertion,它由一組信息構(gòu)成,包括一個(gè)域名(idp)以及一個(gè)名稱(name),它們代表了這條連接的遠(yuǎn)端機(jī)器的身份識(shí)別信息。如果遠(yuǎn)端機(jī)器還沒(méi)有被設(shè)置以及校驗(yàn),這個(gè)屬性會(huì)返回一個(gè)null值。一旦被設(shè)置,它不能被一般方法改變。
RTCPeerConnection.pendingLocalDescription?只讀
blah
RTCPeerConnection.pendingRemoteDescription?只讀
blah
RTCPeerConnection.remoteDescription?只讀
blah
blah
RTCPeerConnection.signalingState?只讀
返回一個(gè)RTC通信狀態(tài)的結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體描述了本地連接的通信狀態(tài)。這個(gè) 狀態(tài)描述了一個(gè)定義連接配置的SDP offer。它包含了下列信息,與MediaStream類型本地相關(guān)的對(duì)象的描述,媒體流編碼方式或RTP和 ?RTCP協(xié)議的選項(xiàng)?,以及被ICE服務(wù)器收集到的candidates(連接候選者)。當(dāng)RTCPeerConnection.signalingState的值改變時(shí),對(duì)象上的signalingstatechange事件會(huì)被觸發(fā)。
基本用法
一個(gè)基本的RTCPeerConnection使用需要協(xié)調(diào)本地機(jī)器以及遠(yuǎn)端機(jī)器的連接,它可以通過(guò)在兩臺(tái)機(jī)器間生成Session Description的數(shù)據(jù)交換協(xié)議來(lái)實(shí)現(xiàn)。呼叫方發(fā)送一個(gè)offer(請(qǐng)求),被呼叫方發(fā)出一個(gè)answer(應(yīng)答)來(lái)回答請(qǐng)求。雙方-呼叫方以及被呼叫方,最開始的時(shí)候都要建立他們各自的RTCPeerConnection對(duì)象。
var pc = new RTCPeerConnection();pc.onaddstream = function(obj) {? var vid = document.createElement("video");? document.appendChild(vid);? vid.srcObject = obj.stream;}// Helper functionsfunction endCall() {? var videos = document.getElementsByTagName("video");? for (var i = 0; i < videos.length; i++) {? ? videos[i].pause();? }? pc.close();}function error(err) { endCall(); }
呼叫初始化
如果你是呼叫方,你需要初始化一個(gè)連接
// Get a list of friends from a server// User selects a friend to start a peer connection withnavigator.getUserMedia({video: true}, function(stream) {? pc.onaddstream({stream: stream});? // Adding a local stream won't trigger the onaddstream callback? pc.addStream(stream);? pc.createOffer(function(offer) {? ? pc.setLocalDescription(new RTCSessionDescription(offer), function() {? ? ? // send the offer to a server to be forwarded to the friend you're calling.? ? }, error);? }, error);}
呼叫回答
在另一端,你的朋友會(huì)從服務(wù)器收到offer信息。
var offer = getOfferFromFriend();navigator.getUserMedia({video: true}, function(stream) {? pc.onaddstream({stream: stream});? pc.addStream(stream);? pc.setRemoteDescription(new RTCSessionDescription(offer), function() {? ? pc.createAnswer(function(answer) {? ? ? pc.setLocalDescription(new RTCSessionDescription(answer), function() {? ? ? ? // send the answer to a server to be forwarded back to the caller (you)? ? ? }, error);? ? }, error);? }, error);}
處理應(yīng)答
同時(shí)在呼叫發(fā)起方,你會(huì)收到這個(gè)應(yīng)答(前面被呼叫方發(fā)出的answer),你需要將它設(shè)置為你的遠(yuǎn)端連接。
// pc was set up earlier when we made the original offervar offer = getResponseFromFriend();pc.setRemoteDescription(new RTCSessionDescription(offer), function() { }, error);
屬性
這個(gè)接口從它的父元素中繼承屬性,?EventTarget.
RTCPeerConnection.iceConnectionState?只讀
返回一個(gè)RTCIceConnectionState類型的結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體描述了連接的ICE連接狀態(tài)。當(dāng)這個(gè)狀態(tài)的值改變時(shí),這個(gè)對(duì)象會(huì)觸發(fā)一個(gè)iceconnectionstatechange?事件。狀態(tài)可能存在的值如下:
"new": ICE服務(wù)器正在收集地址或正在等待遠(yuǎn)端的candidates(這兩種情況可能同時(shí)存在)。
"checking": ICE服務(wù)器找到了遠(yuǎn)端的candidates(連接候選者),這些candidates至少有一個(gè),同時(shí)ICE服務(wù)器在檢測(cè)這些candidates,盡管它可能還沒(méi)有找到連接。此刻,ICE服務(wù)器可能仍在收集candidates(連接候選者)。
"connected": ICE服務(wù)器已經(jīng)找到了一條可用的適合所有組件的連接,但它仍然在測(cè)試更多的遠(yuǎn)端candidate以提供更好的連接。同時(shí),ICE服務(wù)器可能仍在收集candidates。
"completed": ICE服務(wù)器已經(jīng)找到了一條可用的連接,并不再測(cè)試遠(yuǎn)端candidates。
"failed": ICE服務(wù)器已經(jīng)檢測(cè)了所有的遠(yuǎn)端candidates,但并沒(méi)有找到可用的。對(duì)一些組件適用的連接可能已經(jīng)被找到。
"disconnected": 至少一個(gè)組件的活躍度檢查失敗了,這可能是由糟糕的網(wǎng)絡(luò)環(huán)境造成的一個(gè)短期狀態(tài),它可以被它自身所修復(fù)。
"closed": ICE服務(wù)器已經(jīng)關(guān)閉,并不再響應(yīng)請(qǐng)求。
RTCPeerConnection.iceGatheringState?只讀
返回一個(gè)iceGatheringState類型的結(jié)構(gòu)體,它描述了這條連接的ICE收集狀態(tài)。該狀態(tài)可能取以下的值:
"new": 對(duì)象剛剛被創(chuàng)建,還沒(méi)有網(wǎng)絡(luò)化。
"gathering": ICE引擎正在為連接收集candidates(連接候選者)。
"complete": 引擎已經(jīng)完成了candidates收集。但像添加一個(gè)新的接口或者一個(gè)新的turn服務(wù)器這些事件會(huì)導(dǎo)致狀態(tài)回到"gathering"。
RTCPeerConnection.localDescription?只讀
返回一個(gè)?RTCSessionDescription?,它描述了這條連接的本地端的會(huì)話控制(用戶會(huì)話所需的屬性以及配置信息)。如果本地的會(huì)話控制還沒(méi)有被設(shè)置,它的值就會(huì)是null。
RTCPeerConnection.peerIdentity?只讀
返回一個(gè)RTCIdentityAssertion,它由一組信息構(gòu)成,包括一個(gè)域名(idp)以及一個(gè)名稱(name),它們代表了這條連接的遠(yuǎn)端機(jī)器的身份識(shí)別信息。如果遠(yuǎn)端機(jī)器還沒(méi)有被設(shè)置以及校驗(yàn),這個(gè)屬性會(huì)返回一個(gè)null值。一旦被設(shè)置,它不能被一般方法改變。
RTCPeerConnection.remoteDescription?只讀
返回一個(gè)?RTCSessionDescription?它描述了這條連接的遠(yuǎn)端機(jī)器的會(huì)話控制,如果遠(yuǎn)端機(jī)器還未被設(shè)置,它的值會(huì)是null。
RTCPeerConnection.signalingState?只讀
返回一個(gè)RTC通信狀態(tài)的結(jié)構(gòu)體,這個(gè)結(jié)構(gòu)體描述了本地連接的通信狀態(tài)。這個(gè) 狀態(tài)描述了一個(gè)定義連接配置的SDP offer。它包含了下列信息,與MediaStream類型本地相關(guān)的對(duì)象的描述,媒體流編碼方式或RTP和 ?RTCP協(xié)議的選項(xiàng)?,以及被ICE服務(wù)器收集到的candidates(連接候選者)。當(dāng)RTCPeerConnection.signalingState的值改變時(shí),對(duì)象上的signalingstatechange事件會(huì)被觸發(fā)。?它可能取下列的值:
"stable": 沒(méi)有SDP offer/answer正在被交換,連接仍然處于初始化狀態(tài)。
"have-local-offer": 這條連接的本地端機(jī)器已經(jīng)本地應(yīng)用了一個(gè)SDP offer。
"have-remote-offer": 這條連接的遠(yuǎn)端機(jī)器已經(jīng)本地應(yīng)用了一個(gè)SDP offer。
"have-local-pranswer": 一個(gè)來(lái)自遠(yuǎn)端的SDP offer已經(jīng)被應(yīng)用,同時(shí)一個(gè)SDP pranswer在本地被應(yīng)用。
"have-remote-pranswer":一個(gè)本地的SDP offer被應(yīng)用,同時(shí)一個(gè)SDP pranswer在遠(yuǎn)端被應(yīng)用。
"closed": 連接被關(guān)閉。
事件處理器
是收到addstream?事件時(shí)調(diào)用的事件處理器。?Such an event is 當(dāng)MediaStream?被遠(yuǎn)端機(jī)器添加到這條連接時(shí),該事件會(huì)被觸發(fā)。?當(dāng)調(diào)用RTCPeerConnection.setRemoteDescription()方法時(shí),這個(gè)事件就會(huì)被立即觸發(fā),它不會(huì)等待SDP協(xié)商的結(jié)果。
RTCPeerConnection.ondatachannel
是收到datachannel?事件時(shí)調(diào)用的事件處理器。?當(dāng)一個(gè)RTCDataChannel?被添加到連接時(shí),這個(gè)事件被觸發(fā)。
RTCPeerConnection.onicecandidate
是收到?icecandidate?事件時(shí)調(diào)用的事件處理器.。當(dāng)一個(gè)RTCICECandidate?對(duì)象被添加時(shí),這個(gè)事件被觸發(fā)。
RTCPeerConnection.oniceconnectionstatechange
是收到iceconnectionstatechange事件時(shí)調(diào)用的事件處理器 。 當(dāng)iceConnectionState改變時(shí),這個(gè)事件被觸發(fā)。
RTCPeerConnection.onidentityresult
是收到?identityresult事件時(shí)調(diào)用的事件處理器。?當(dāng)通過(guò)getIdentityAssertion()生成身份斷言, 或在生成一個(gè)answer或一個(gè)offer的過(guò)程中,這個(gè)事件被觸發(fā)。
RTCPeerConnection.onidpassertionerror
是收到?idpassertionerror?事件時(shí)調(diào)用的事件處理器。當(dāng)生成一個(gè)身份斷言時(shí),如果關(guān)聯(lián)的身份提供者(idP)遇到一個(gè)錯(cuò)誤,這個(gè)事件就會(huì)被觸發(fā)。
RTCPeerConnection.onidpvalidationerror
是收到?idpvalidationerror?事件時(shí)調(diào)用的事件處理器。當(dāng)檢查 一個(gè)身份斷言時(shí),如果關(guān)聯(lián)的身份提供者(idP)遇到一個(gè)錯(cuò)誤,這個(gè)事件就會(huì)被觸發(fā)。
RTCPeerConnection.onnegotiationneeded
是收到negotiationneeded?事件時(shí)調(diào)用的事件處理器,?瀏覽器發(fā)送該事件以告知在將來(lái)某一時(shí)刻需要協(xié)商。
RTCPeerConnection.onpeeridentity
是收到peeridentity?事件時(shí)調(diào)用的事件處理器, 當(dāng)一條連接的peer identify被設(shè)置以及校驗(yàn)后,該事件被觸發(fā)
RTCPeerConnection.onremovestream
是收到removestream?事件時(shí)調(diào)用的事件處理器,當(dāng)一條MediaStream?從連接上移除時(shí),該事件被觸發(fā)。
RTCPeerConnection.onsignalingstatechange
是收到signalingstatechange?事件時(shí)調(diào)用的事件處理器, 當(dāng)signalingState的值發(fā)生改變時(shí),該事件被觸發(fā)。
方法
RTCPeerConnection的初始化函數(shù),通過(guò) new RTCPeerConnection()初始化一個(gè)RTCPeerConnection實(shí)例。
RTCPeerConnection.createOffer()
生成一個(gè)offer,它是一個(gè)帶有特定的配置信息尋找遠(yuǎn)端匹配機(jī)器(peer)的請(qǐng)求。這個(gè)方法的前兩個(gè)參數(shù)分別是方法調(diào)用成功以及失敗的回調(diào)函數(shù),可選的第三個(gè)參數(shù)是用戶對(duì)視頻流以及音頻流的定制選項(xiàng)(一個(gè)對(duì)象)。
RTCPeerConnection.createAnswer()
在協(xié)調(diào)一條連接中的兩端offer/answers時(shí),根據(jù)從遠(yuǎn)端發(fā)來(lái)的offer生成一個(gè)answer。這個(gè)方法的前兩個(gè)參數(shù)分別是方法調(diào)用成功以及失敗時(shí)的回調(diào)函數(shù),可選的第三個(gè)參數(shù)是生成的answer的可供選項(xiàng)。
RTCPeerConnection.setLocalDescription()
改變與連接相關(guān)的本地描述。這個(gè)描述定義了連接的屬性,例如:連接的編碼方式。連接會(huì)受到它的改變的影響,而且連接必須能同時(shí)支持新的以及舊的描述。這個(gè)方法可以接收三個(gè)參數(shù),一個(gè)RTCSessionDescription?對(duì)象包含設(shè)置信息,還有兩個(gè)回調(diào)函數(shù),它們分別是方法調(diào)用成功以及失敗的回調(diào)函數(shù)。
RTCPeerConnection.setRemoteDescription()
改變與連接相關(guān)的遠(yuǎn)端描述。這個(gè)描述定義了連接的屬性,例如:連接的編碼方式。連接會(huì)受到它的改變的影響,而且連接必須能同時(shí)支持新的以及舊的描述。這個(gè)方法可以接收三個(gè)參數(shù),一個(gè)RTCSessionDescription?對(duì)象包含設(shè)置信息,還有兩個(gè)回調(diào)函數(shù),它們分別是方法調(diào)用成功以及失敗的回調(diào)函數(shù)。
更新ICE服務(wù)器時(shí)調(diào)用的方法。
RTCPeerConnection.addIceCandidate()
添加iceCandidate時(shí)調(diào)用的方法。
RTCPeerConnection.getConfiguration()
獲取配置信息時(shí)調(diào)用的方法。
RTCPeerConnection.getLocalStreams()
返回連接的本地媒體流數(shù)組。這個(gè)數(shù)組可能是空數(shù)組。
RTCPeerConnection.getRemoteStreams()
返回連接的遠(yuǎn)端媒體流數(shù)組。這個(gè)數(shù)組可能是空數(shù)組。
RTCPeerConnection.getStreamById()
返回連接中與所給id匹配的媒體流?MediaStream,如果沒(méi)有匹配項(xiàng),返回null。
添加一個(gè)媒體流?MediaStream作為本地音頻或視頻源。如果本地端與遠(yuǎn)端協(xié)調(diào)已經(jīng)發(fā)生了,那么需要一個(gè)新的媒體流,這樣遠(yuǎn)端才可以使用它。
RTCPeerConnection.removeStream()
將一個(gè)作為本地音頻或視頻源的媒體流?MediaStream移除。如果本地端與遠(yuǎn)端協(xié)調(diào)已經(jīng)發(fā)生了,那么需要一個(gè)新的媒體流,這樣遠(yuǎn)端才可以停止使用它。
關(guān)閉一個(gè)RTCPeerConnection實(shí)例所調(diào)用的方法。
RTCPeerConnection.createDataChannel()
在一條連接上建立一個(gè)新的RTCDataChannel(用于數(shù)據(jù)發(fā)送)。這個(gè)方法把一個(gè)數(shù)據(jù)對(duì)象作為參數(shù),數(shù)據(jù)對(duì)象中包含必要的配置信息。
RTCPeerConnection.createDTMFSender()
創(chuàng)建一個(gè)新的與特殊的MediaStreamTrack相關(guān)的RTCDTMFSender,可以在連接上發(fā)送DTMF手機(jī)信號(hào)。
生成一個(gè)新的RTCStatsReport,它包含連接相關(guān)的統(tǒng)計(jì)信息。
RTCPeerConnection.setIdentityProvider()
根據(jù)所給的三個(gè)參數(shù)設(shè)置身份提供者(IdP),這三個(gè)參數(shù)是它的名稱,通信所使用的協(xié)議(可選),以及一個(gè)可選的用戶名。只有當(dāng)一個(gè)斷言被需要時(shí),這個(gè)IdP才會(huì)被使用。
RTCPeerConnection.getIdentityAssertion()
初始化身份斷言的收集,只有當(dāng)signalingState的值不為"closed"時(shí),它才有效。它自動(dòng)完成,在需求發(fā)生前調(diào)用它是最好的選擇。
構(gòu)造函數(shù)
new RTCPeerConnection(RTCConfigurationconfiguration, optionalMediaConstraintsconstraints);
注意:PeerConnection需要傳遞一個(gè)RTCConfiguration對(duì)象作為參數(shù),如果你沒(méi)有傳遞參數(shù)的話,火狐瀏覽器會(huì)自動(dòng)提供一個(gè)參數(shù)。
方法
createOffer
void createOffer(RTCSessionDescriptionCallback?successCallback,RTCPeerConnectionErrorCallback?failureCallback, optional?MediaConstraintsconstraints);
createOffer方法會(huì)生成描述信息的一個(gè)blob對(duì)象,它會(huì)幫助連接到本地機(jī)器。當(dāng)你已經(jīng)找到一個(gè)遠(yuǎn)端的PeerConnection并且打算設(shè)置建立本地的PeerConnection時(shí),你可以使用該方法。
舉例
var pc = new PeerConnection();pc.addStream(video);pc.createOffer(function(desc){? pc.setLocalDescription(desc, function() {? ? // send the offer to a server that can negotiate with a remote client? });}
參數(shù)
successCallback(方法調(diào)用成功時(shí)的回調(diào)函數(shù))
一個(gè)?RTCSessionDescriptionCallback?它會(huì)收到一個(gè)RTCSessionDescription?對(duì)象作為參數(shù)。
errorCallback(方法調(diào)用失敗時(shí)的回調(diào)函數(shù))
一個(gè)?RTCPeerConnectionErrorCallback?它會(huì)收到一個(gè)DOMError?對(duì)象作為參數(shù)。
[optional] constraints(可選的約束條件)
一個(gè)可選的MediaConstraints?對(duì)象。
createAnswer
void createAnswer(RTCSessionDescriptionCallback?successCallback,RTCPeerConnectionErrorCallback?failureCallback, optional?MediaConstraintsconstraints)")
對(duì)從遠(yuǎn)方收到的offer進(jìn)行回答。
舉例
var pc = new PeerConnection();pc.setRemoteDescription(new RTCSessionDescription(offer), function() {? pc.createAnswer(function(answer) {? ? pc.setLocalDescription(answer, function() {? ? ? // send the answer to the remote connection? ? })? })});
參數(shù)
successCallback(方法調(diào)用成功時(shí)的回調(diào)函數(shù))
一個(gè)?RTCSessionDescriptionCallback?它會(huì)收到一個(gè)RTCSessionDescription?對(duì)象作為參數(shù)。
errorCallback(方法調(diào)用失敗時(shí)的回調(diào)函數(shù))
一個(gè)?RTCPeerConnectionErrorCallback?它會(huì)收到一個(gè)DOMError?對(duì)象作為參數(shù)。
[optional] constraints(可選的約束條件)
一個(gè)可選的MediaConstraints?對(duì)象。
updateIce()
updateIce(optional?RTCConfiguration?configuration, optional?MediaConstraintsconstraints)
該方法會(huì)更新ICE代理收集本地candidates以及連接云端candidates的進(jìn)程。如果強(qiáng)制約束條件"IceTransports"存在,那么它會(huì)控制ICE代理的工作方式。它可以用于限制接聽者對(duì)TURN candidates的使用,這樣可以避免在請(qǐng)求被應(yīng)答前泄露位置信息。如果這個(gè)方法影響了已經(jīng)建立的連接,那么它可能導(dǎo)致ICE代理狀態(tài)的改變以及媒體狀態(tài)的改變。
舉例
addIceCandidate()
addIceCandidate (RTCIceCandidate?candidate,?Function?successCallback,?RTCPeerConnectionErrorCallback?failureCallback);
除了被添加到遠(yuǎn)端描述之外,只要約束條件"IceTransports" 沒(méi)有被設(shè)置為null,連接檢測(cè)結(jié)果會(huì)被發(fā)送給新的candidates。如果這個(gè)方法影響了已經(jīng)建立的連接,那么它可能導(dǎo)致ICE代理狀態(tài)的改變以及媒體狀態(tài)的改變。
舉例
pc.addIceCandidate(new RTCIceCandidate(candidate));
createDataChannel
RTCDataChannel?createDataChannel (DOMString?label, optionalRTCDataChannelInit?dataChannelDict);
通過(guò)peerconnection建立一條數(shù)據(jù)信道,用于發(fā)送非視頻音頻信息。
例子
var pc = new PeerConnection();var channel = pc.createDataChannel("Mydata");channel.onopen = function(event) {channel.send('sending a message');}channel.onmessage = function(event) { console.log(event.data); }
引申閱讀
https://github.com/jesup/nightly-gupshup/blob/master/static/js/chat.js
http://www.html5rocks.com/en/tutorials/webrtc/basics/#toc-simple
http://dev.w3.org/2011/webrtc/editor/webrtc.html
文檔標(biāo)簽和貢獻(xiàn)者
?標(biāo)簽:?
此頁(yè)面的貢獻(xiàn)者:?ztacesa,?yxxgoogle,?Move,?zhuyeqing5828,?Wunmest
最后編輯者:?ztacesa,?Aug 24, 2017, 8:34:52 AM