欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

webrtc学习笔记二(datachannel)

程序员文章站 2022-07-08 16:45:39
...
https://www.webrtc-experiment.com/DataChannel/
https://www.npmjs.com/package/datachannel.io
datachannel.io
官方:
http://www.html5rocks.com/en/tutorials/webrtc/datachannels/?redirect_from_locale=zh


本地调用的传数据的datachannel
<!DOCTYPE html>
<html>
<head><title>RTCDataChannel</title></head>
<body>
<button id="startButton" onclick="createConnection()">Start</button>
<button id="sendButton" onclick="sendData()">Send</button>
<button id="closeButton" onclick="closeDataChannels()">Stop</button>
<textarea id="dataChannelSend" >abc</textarea>
<textarea id="dataChannelReceive" ></textarea>
<script type="text/javascript">
var localPeerConnection, remotePeerConnection;//用于peer跟peer之间呼叫和建立连接以便传输音视频数据流
var sendChannel, receiveChannel;//用于peer跟peer之间传输音视频之外的一般数据。

function trace(text) {
  console.log((window.performance.now() / 1000).toFixed(3) + ': ' + text);
}

function createConnection() {
  var servers = null;
  localPeerConnection = window.localPeerConnection =new webkitRTCPeerConnection(servers,{optional: [{RtpDataChannels: true}]});
  remotePeerConnection = window.remotePeerConnection = new webkitRTCPeerConnection(servers,{optional: [{RtpDataChannels: true}]});
  try {
    sendChannel = localPeerConnection.createDataChannel('sendDataChannel',{reliable: false});
  } catch (e) {
    alert('createDataChannel() failed with exception: ' + e.message);
  }
  localPeerConnection.onicecandidate = function(event) {
		  if (event.candidate) {
		    remotePeerConnection.addIceCandidate(event.candidate);
		    trace('★★★★★Local ICE candidate: \n' + event.candidate.candidate);
		  }
		}
  remotePeerConnection.onicecandidate = function(event) {
		  if (event.candidate) {
		    localPeerConnection.addIceCandidate(event.candidate);
		    trace('★★★Remote ICE candidate: \n ' + event.candidate.candidate);
		  }
		};
  
  sendChannel.onopen = trace('--Send channel open state is : ' +sendChannel.readyState);;
  sendChannel.onclose = trace('--Send channel close  state is: ' +sendChannel.readyState);;
  
  remotePeerConnection.ondatachannel = function(event) {
	  receiveChannel = event.channel;
	  receiveChannel.onmessage = function(event) {
			  document.getElementById('dataChannelReceive').value = event.data;
			};
	  receiveChannel.onopen = trace('--Receive channel open state is: ' + receiveChannel.readyState);;
	  receiveChannel.onclose = trace('--Receive channel close state is: ' + receiveChannel.readyState);;
	};

  localPeerConnection.createOffer(gotLocalDescription);//
}

function sendData() {
  var data = document.getElementById('dataChannelSend').value;
  sendChannel.send(data);
}

function closeDataChannels() {
  console.log("------close");
  sendChannel.close();
  receiveChannel.close();
  localPeerConnection.close();
  remotePeerConnection.close();
  localPeerConnection = null;
  remotePeerConnection = null;
}

function gotLocalDescription(desc) {
  trace("createOffer gotLocalDescription--->");
  localPeerConnection.setLocalDescription(desc);
 // trace('------|||||----Offer from localPeerConnection \n' + desc.sdp);
  remotePeerConnection.setRemoteDescription(desc);
  remotePeerConnection.createAnswer(gotRemoteDescription);//
}

function gotRemoteDescription(desc) {
  trace("createAnswer gotRemoteDescription--->");
  remotePeerConnection.setLocalDescription(desc);
  //trace('------------->>>>>>>>>>>>Answer from remotePeerConnection \n' + desc.sdp);
  localPeerConnection.setRemoteDescription(desc);
}
</script>

</body>
</html>

相关标签: webrtc