PeerConnection

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

注意: RTCPeerConnection 和  RTCSessionDescription在不同的浏览器中有不同的实现方式。(navigator.getUserMedia() 方法也是如此)如果有必要,则需要考虑在不同浏览器的实现。例如: 

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

这将提高您的这将提高您的网站或网络应用的兼容性。 Adapter.js 提供的代码解决了浏览器兼容性的问题 

由于RTCPeerConnection实现了 EventTarget 接口,故其可以接收处理事件。

构造函数

RTCPeerConnection.RTCPeerConnection()

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

属性 

该接口的属性继承了其父接口, EventTarget.

RTCPeerConnection.canTrickleIceCandidates 只读

如果远端支持UDP打洞或支持通过中继服务器连接,则该属性值为true。否则,为false。该属性的值依赖于远端设置且仅在本地的 RTCPeerConnection.setRemoteDescription()方法被调用时有效,如果该方法没被调用,则其值为null.

RTCPeerConnection.connectionState 只读

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

RTCPeerConnection.currentLocalDescription 只读

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

RTCPeerConnection.currentRemoteDescription 只读

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

RTCPeerConnection.defaultIceServers 只读

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

RTCPeerConnection.iceConnectionState 只读

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

RTCPeerConnection.iceGatheringState 只读

Returns an enum of type RTCIceGatheringState that describes the ICE gathering state for the connection.

RTCPeerConnection.idpLoginUrl 只读

blah

RTCPeerConnection.localDescription 只读

Returns a RTCSessionDescription describing the session for the local end of the connection. If it has not yet been set, it can be null.

RTCPeerConnection.peerIdentity 只读

Returns a RTCIdentityAssertion, that is a couple of a domain name (idp) and a name (name) representing the identity of the remote peer of this connection, once set and verified. If no peer has yet been set and verified, this property will return null. Once set, via the appropriate method, it can't be changed.

RTCPeerConnection.pendingLocalDescription 只读

blah

RTCPeerConnection.pendingRemoteDescription 只读

blah

RTCPeerConnection.remoteDescription 只读

blah

RTCPeerConnection.sctp 只读

blah

RTCPeerConnection.signalingState 只读

Returns an enum of type RTCSignalingState that describes the signaling state of the local connection. This state describes the SDP offer that defines the configuration of the connection; this includes information including the description of the locally associated objects of type MediaStream, the codec/RTP/RTCP options, and the candidates gathered by the ICE agent. When this value changes, a signalingstatechange event is fired on the object.

基本用法

Basic RTCPeerConnection usage involves negotiating a connection between your local machine and a remote one by generating Session Description Protocol to exchange between the two. i.e. The caller sends an offer. The called party responds with an answer. Both parties, the caller and the called party, need to set up their own RTCPeerConnection objects initially:

var pc = new RTCPeerConnection();
pc.onaddstream = function(obj) {
  var vid = document.createElement("video");
  document.appendChild(vid);
  vid.srcObject = obj.stream;
}

// Helper functions
function endCall() {
  var videos = document.getElementsByTagName("video");
  for (var i = 0; i < videos.length; i++) {
    videos[i].pause();
  }

  pc.close();
}

function error(err) { endCall(); }

Initializing the call

If you are the one initiating the initial connection you would call:

// Get a list of friends from a server
// User selects a friend to start a peer connection with
navigator.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);
}

Answering a call

On the opposite end, the friend will receive the offer from the server.

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

Handling the answer

Back on the original machine, you'll receive the response, and set it as the remote connection

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

属性EDIT

This interface inherits properties from its parent element, EventTarget.

RTCPeerConnection.iceConnectionState 只读

Returns an enum of type RTCIceConnectionState that describes the ICE connection state for the connection. When this value changes, a iceconnectionstatechange event is fired on the object. The possible values are:

  • "new": the ICE agent is gathering addresses or waiting for remote candidates (or both).
  • "checking": the ICE agent has remote candidates, on at least one component, and is check them, though it has not found a connection yet. At the same time, it may still be gathering candidates.
  • "connected": the ICE agent has found a usable connection for each component, but is still testing more remote candidates for a better connection. At the same time, it may still be gathering candidates.
  • "completed": the ICE agent has found a usable connection for each component, and is no more testing remote candidates.
  • "failed": the ICE agent has checked all the remote candidates and didn't find a match for at least one component. Connections may have been found for some components.
  • "disconnected": liveness check has failed for at least one component. This may be a transient state, e. g. on a flaky network, that can recover by itself.
  • "closed": the ICE agent has shutdown and is not answering to requests.

RTCPeerConnection.iceGatheringState 只读

Returns an enum of type RTCIceGatheringState that describes the ICE gathering state for the connection. The possible values are:

  • "new": the object was just created, and no networking has occurred yet.
  • "gathering": the ICE engine is in the process of gathering candidates for this connection.
  • "complete": the ICE engine has completed gathering. Events such as adding a new interface or a new TURN server will cause the state to go back to gathering.

RTCPeerConnection.localDescription 只读

Returns a RTCSessionDescription describing the session for the local end of the connection. If it has not yet been set, it can be null.

RTCPeerConnection.peerIdentity 只读

Returns a RTCIdentityAssertion, that is a couple of a domain name (idp) and a name (name) representing the identity of the remote peer of this connection, once set and verified. If no peer has yet been set and verified, this property will return null. Once set, via the appropriate method, it can't be changed.

RTCPeerConnection.remoteDescription 只读

Returns a RTCSessionDescription describing the session for the remote end of the connection. If it has not yet been set, it can be null.

RTCPeerConnection.signalingState 只读

Returns an enum of type RTCSignalingState that describes the signaling state of the local connection. This state describes the SDP offer, that defines the configuration of the connections like the description of the locally associated objects of type MediaStream, the codec/RTP/RTCP options, the candidates gathered by the ICE Agent. When this value changes, a signalingstatechange event is fired on the object. The possible values are:

  • "stable": there is no SDP offer/answer exchange in progress. This is also the initial state of the connection.
  • "have-local-offer": the local end of the connection has locally applied a SDP offer.
  • "have-remote-offer": the remote end of the connection has locally applied a SDP offer.
  • "have-local-pranswer": a remote SDP offer has been applied, and a SDP pranswer applied locally.
  • "have-remote-pranswer": a local SDP offer has been applied, and a SDP pranswer applied remotely.
  • "closed": the connection is closed.

Event handlers

RTCPeerConnection.onaddstream

Is the event handler called when the addstream event is received. Such an event is sent when a MediaStream is added to this connection by the remote peer. The event is sent immediately after the call RTCPeerConnection.setRemoteDescription() and doesn't wait for the result of the SDP negotiation.

RTCPeerConnection.ondatachannel

Is the event handler called when the datachannel event is received. Such an event is sent when a RTCDataChannel is added to this connection.

RTCPeerConnection.onicecandidate

Is the event handler called when the icecandidate event is received. Such an event is sent when a RTCICECandidate object is added to the script.

RTCPeerConnection.oniceconnectionstatechange

Is the event handler called when the iceconnectionstatechange event is received. Such an event is sent when the value of iceConnectionState changes.

RTCPeerConnection.onidentityresult

Is the event handler called when the identityresult event is received. Such an event is sent when an identity assertion is generated, via getIdentityAssertion(), or during the creation of an offer or an answer.

RTCPeerConnection.onidpassertionerror

Is the event handler called when the idpassertionerror event is received. Such an event is sent when the associated identity provider (IdP) encounters an error while generating an identity assertion.

RTCPeerConnection.onidpvalidationerror

Is the event handler alled when the idpvalidationerror event is received. Such an event is sent when the associated identity provider (IdP) encounters an error while validating an identity assertion.

RTCPeerConnection.onnegotiationneeded

Is the event handler called when the negotiationneeded event, sent by the browser to inform that negotiation will be required at some point in the future, is received.

RTCPeerConnection.onpeeridentity

Is the event handler called when the peeridentity event, sent when a peer identity has been set and verified on this connection, is received.

RTCPeerConnection.onremovestream

Is the event handler called when the removestream event, sent when a MediaStream is removed from this connection, is received.

RTCPeerConnection.onsignalingstatechange

Is the event handler called when the signalingstatechange event, sent when the value of signalingState changes, is received.

MethodsEDIT

RTCPeerConnection()

 

RTCPeerConnection.createOffer()

Creates an offer that is a request to find a remote peer with a specific configuration. The two first parameters of this methods are respectively success and error callbacks, the optional third one are options the user want to have, like audio or video streams.

RTCPeerConnection.createAnswer()

Creates an answer to the offer received by the remote peer, in a two-part offer/answer negotiation of a connection. The two first parameters are respectively success and error callbacks, the optional third one represent options for the answer to be created.

RTCPeerConnection.setLocalDescription()

Changes the local description associated with the connection. The description defines the properties of the connection like its codec. The connection is affected by this change and must be able to support both old and new descriptions. The method takes three parameters, a RTCSessionDescription object to set, and two callbacks, one called if the change of description succeeds, another called if it failed.

RTCPeerConnection.setRemoteDescription()

Changes the remote description associated with the connection. The description defines the properties of the connection like its codec. The connection is affected by this change and must be able to support both old and new descriptions. The method takes three parameters, a RTCSessionDescription object to set, and two callbacks, one called if the change of description succeeds, another called if it failed.

RTCPeerConnection.updateIce()

 

RTCPeerConnection.addIceCandidate()

 

RTCPeerConnection.getConfiguration()

 

RTCPeerConnection.getLocalStreams()

Returns an array of MediaStream associated with the local end of the connection. The array may be empty.

RTCPeerConnection.getRemoteStreams()

Returns an array of MediaStream associated with the remote end of the connection. The array may be empty.

RTCPeerConnection.getStreamById()

Returns the MediaStream with the given id that is associated with local or remote end of the connection. If no stream matches, it returns null.

RTCPeerConnection.addStream()

Adds a MediaStream as a local source of audio or video. If the negotiation already happened, a new one will be needed for the remote peer to be able to use it.

RTCPeerConnection.removeStream()

Removes a MediaStream as a local source of audio or video. If the negotiation already happened, a new one will be needed for the remote peer to stop using it.

RTCPeerConnection.close()

Abruptly closes a connection.

RTCPeerConnection.createDataChannel()

Creates a new RTCDataChannel associated with this connection. The method takes a dictionary as parameter, with the configuration required for the underlying data channel, like its reliability.

RTCPeerConnection.createDTMFSender()

Creates a new RTCDTMFSender, associated to a specific MediaStreamTrack, that will be able to send DTMF phone signaling over the connection.

RTCPeerConnection.getStats()

Creates a new RTCStatsReport that contains and allows access to statistics regarding the connection.

RTCPeerConnection.setIdentityProvider()

Sets the Identity Provider (IdP) to the triplet given in parameter: its name, the protocol used to communicate with it (optional) and an optional username. The IdP will be used only when an assertion will be needed.

RTCPeerConnection.getIdentityAssertion()

Initiates the gathering of an identity assertion. This has an effect only if the signalingState is not "closed". It is not expected for the application dealing with the RTCPeerConnection: this is automatically done; an explicit call only allows to anticipate the need.

Constructor

new RTCPeerConnection(RTCConfiguration configuration, optional MediaConstraints constraints);

Note: While the PeerConnection specification reads like passing an RTCConfiguration object is required, Firefox will supply a default if you don't.

MethodsEDIT

createOffer

void createOffer(RTCSessionDescriptionCallback successCallback,RTCPeerConnectionErrorCallback failureCallback, optional MediaConstraintsconstraints);

Create offer generates a blob of description data to facilitate a PeerConnection to the local machine. Use this when you've got a remote Peer connection and you want to set up the local one.

Example

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

Arguments

successCallback

An RTCSessionDescriptionCallback which will be passed a single RTCSessionDescriptionobject

errorCallback

An RTCPeerConnectionErrorCallback which will be passed a single DOMError object

[optional] constraints

An optional MediaConstraints object.

createAnswer

void createAnswer(RTCSessionDescriptionCallback successCallback,RTCPeerConnectionErrorCallback failureCallback, optional MediaConstraintsconstraints)")

Respond to an offer sent from a remote connection.

Example

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

Arguments

successCallback

An RTCSessionDescriptionCallback which will be passed a single RTCSessionDescriptionobject

errorCallback

An RTCPeerConnectionErrorCallback which will be passed a single DOMError object

[optional] constraints

An optional MediaConstraints object.

updateIce()

updateIce(optional RTCConfiguration configuration, optional MediaConstraints constraints)

The updateIce method updates the ICE Agent process of gathering local candidates and pinging remote candidates. If there is a mandatory constraint called "IceTransports" it will control how the ICE engine can act. This can be used to limit the use to TURN candidates by a callee to avoid leaking location information prior to the call being accepted. This call may result in a change to the state of the ICE Agent, and may result in a change to media state if it results in connectivity being established.

Example

 

addIceCandidate()

addIceCandidate (RTCIceCandidate candidate, Function successCallback, RTCPeerConnectionErrorCallback failureCallback);

The addIceCandidate() method provides a remote candidate to the ICE Agent. In addition to being added to the remote description, connectivity checks will be sent to the new candidates as long as the "IceTransports" constraint is not set to "none". This call will result in a change to the connection state of the ICE Agent, and may result in a change to media state if it results in different connectivity being established.

Example

pc.addIceCandidate(new RTCIceCandidate(candidate));

createDataChannel

RTCDataChannel createDataChannel (DOMString label, optional RTCDataChannelInitdataChannelDict);

Creates a data channel for sending non video or audio data across the peer connection

Example

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

Other readingEDIT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值