热门搜索 :
考研考公
您的当前位置:首页正文

webrtc翻译

来源:东饰资讯网

这是一个实验中的功能

RTCPeerConnection接口代表一个由本地计算机到远端的WebRTC连接。该接口提供了创建,保持,监控,关闭连接的方法的实现。

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";

构造函数

构造函数;创建一个新的RTCPeerConnection对象。

属性

只读connectionState属性通过返回由枚举RTCPeerConnectionState指定的字符串值之一来指示对等连接的当前状态。

只读属性RTCPeerConnection.currentLocalDescription返回一个描述连接本地端的RTCSessionDescription对象,因为自上次RTCPeerConnection完成协商并连接到远程对等体之后,它最近成功协商。 还包括可能已经由ICE代理生成的任何ICE候选者的列表,因为首先被描述的描述所表示的要约或答案。

只读属性RTCPeerConnection.currentRemoteDescription返回一个RTCSessionDescription对象,描述连接的远程端,因为最近一次RTCPeerConnection完成协商并连接到远程对等体后最近成功协商。 还包括可能已经由ICE代理生成的任何ICE候选者的列表,因为首先被描述的描述所表示的要约或答案。

只读属性RTCPeerConnection.defaultIceServers根据RTCIceServer字典返回一个对象数组,该字典指示如果在RTCConfiguration中没有提供给RTCPeerConnection的默认情况下,浏览器将使用ICE服务器。 然而,浏览器根本不需要提供任何默认的ICE服务器。

只读属性RTCPeerConnection.iceConnectionState返回与RTCPeerConnection关联的ICE代理的状态类型为RTCIceConnectionState的枚举。

只读属性,返回一个RTCIceGatheringState类型的结构体,它描述了连接的ICE收集状态

blah

只读属性,返回一个RTCIdentityAssertion,它由一组信息构成,包括一个域名(idp)以及一个名称(name),它们代表了这条连接的远端机器的身份识别信息。如果远端机器还没有被设置以及校验,这个属性会返回一个null值。一旦被设置,它不能被一般方法改变。

blah

blah

blah

blah

基本用法

一个基本的RTCPeerConnection使用需要协调本地机器以及远端机器的连接,它可以通过在两台机器间生成Session Description的数据交换协议来实现。呼叫方发送一个offer(请求),被呼叫方发出一个answer(应答)来回答请求。双方-呼叫方以及被呼叫方,最开始的时候都要建立他们各自的RTCPeerConnection对象。

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(); }

呼叫初始化

如果你是呼叫方,你需要初始化一个连接

// 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);}

呼叫回答

在另一端,你的朋友会从服务器收到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);}

处理应答

同时在呼叫发起方,你会收到这个应答(前面被呼叫方发出的answer),你需要将它设置为你的远端连接。

// pc was set up earlier when we made the original offervar offer = getResponseFromFriend();pc.setRemoteDescription(new RTCSessionDescription(offer), function() { }, error);

属性

"new": ICE服务器正在收集地址或正在等待远端的candidates(这两种情况可能同时存在)。

"checking": ICE服务器找到了远端的candidates(连接候选者),这些candidates至少有一个,同时ICE服务器在检测这些candidates,尽管它可能还没有找到连接。此刻,ICE服务器可能仍在收集candidates(连接候选者)。

"connected": ICE服务器已经找到了一条可用的适合所有组件的连接,但它仍然在测试更多的远端candidate以提供更好的连接。同时,ICE服务器可能仍在收集candidates。

"completed": ICE服务器已经找到了一条可用的连接,并不再测试远端candidates。

"failed": ICE服务器已经检测了所有的远端candidates,但并没有找到可用的。对一些组件适用的连接可能已经被找到。

"disconnected": 至少一个组件的活跃度检查失败了,这可能是由糟糕的网络环境造成的一个短期状态,它可以被它自身所修复。

"closed": ICE服务器已经关闭,并不再响应请求。

返回一个iceGatheringState类型的结构体,它描述了这条连接的ICE收集状态。该状态可能取以下的值:

"new": 对象刚刚被创建,还没有网络化。

"gathering": ICE引擎正在为连接收集candidates(连接候选者)。

"complete": 引擎已经完成了candidates收集。但像添加一个新的接口或者一个新的turn服务器这些事件会导致状态回到"gathering"。

返回一个RTCIdentityAssertion,它由一组信息构成,包括一个域名(idp)以及一个名称(name),它们代表了这条连接的远端机器的身份识别信息。如果远端机器还没有被设置以及校验,这个属性会返回一个null值。一旦被设置,它不能被一般方法改变。

"stable": 没有SDP offer/answer正在被交换,连接仍然处于初始化状态。

"have-local-offer": 这条连接的本地端机器已经本地应用了一个SDP offer。

"have-remote-offer": 这条连接的远端机器已经本地应用了一个SDP offer。

"have-local-pranswer": 一个来自远端的SDP offer已经被应用,同时一个SDP pranswer在本地被应用。

"have-remote-pranswer":一个本地的SDP offer被应用,同时一个SDP pranswer在远端被应用。

"closed": 连接被关闭。

事件处理器

方法

RTCPeerConnection的初始化函数,通过 new RTCPeerConnection()初始化一个RTCPeerConnection实例。

生成一个offer,它是一个带有特定的配置信息寻找远端匹配机器(peer)的请求。这个方法的前两个参数分别是方法调用成功以及失败的回调函数,可选的第三个参数是用户对视频流以及音频流的定制选项(一个对象)。

在协调一条连接中的两端offer/answers时,根据从远端发来的offer生成一个answer。这个方法的前两个参数分别是方法调用成功以及失败时的回调函数,可选的第三个参数是生成的answer的可供选项。

更新ICE服务器时调用的方法。

添加iceCandidate时调用的方法。

获取配置信息时调用的方法。

返回连接的本地媒体流数组。这个数组可能是空数组。

返回连接的远端媒体流数组。这个数组可能是空数组。

关闭一个RTCPeerConnection实例所调用的方法。

根据所给的三个参数设置身份提供者(IdP),这三个参数是它的名称,通信所使用的协议(可选),以及一个可选的用户名。只有当一个断言被需要时,这个IdP才会被使用。

构造函数

注意:PeerConnection需要传递一个RTCConfiguration对象作为参数,如果你没有传递参数的话,火狐浏览器会自动提供一个参数。

方法

createOffer

createOffer方法会生成描述信息的一个blob对象,它会帮助连接到本地机器。当你已经找到一个远端的PeerConnection并且打算设置建立本地的PeerConnection时,你可以使用该方法。

举例

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  });}

参数

successCallback(方法调用成功时的回调函数)

errorCallback(方法调用失败时的回调函数)

[optional] constraints(可选的约束条件)

createAnswer

对从远方收到的offer进行回答。

举例

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    })  })});

参数

successCallback(方法调用成功时的回调函数)

errorCallback(方法调用失败时的回调函数)

[optional] constraints(可选的约束条件)

updateIce()

该方法会更新ICE代理收集本地candidates以及连接云端candidates的进程。如果强制约束条件"IceTransports"存在,那么它会控制ICE代理的工作方式。它可以用于限制接听者对TURN candidates的使用,这样可以避免在请求被应答前泄露位置信息。如果这个方法影响了已经建立的连接,那么它可能导致ICE代理状态的改变以及媒体状态的改变。

举例

addIceCandidate()

除了被添加到远端描述之外,只要约束条件"IceTransports" 没有被设置为null,连接检测结果会被发送给新的candidates。如果这个方法影响了已经建立的连接,那么它可能导致ICE代理状态的改变以及媒体状态的改变。

举例

pc.addIceCandidate(new RTCIceCandidate(candidate));

createDataChannel

通过peerconnection建立一条数据信道,用于发送非视频音频信息。

例子

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); }

引申阅读

文档标签和贡献者

 标签: 

Top