前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过WebRTC进行实时通信- 使用RTCDataChannel交换数据

通过WebRTC进行实时通信- 使用RTCDataChannel交换数据

作者头像
音视频_李超
发布2020-04-02 18:33:12
4K0
发布2020-04-02 18:33:12
举报
更新 HTML

对于这一步,我们将使用WebRTC的 data channel 在同一页中的两个 textarea之间发送文本。这个例子本身并没什么价值,但它证明了 WebRTC除了传输视频外,还能用于共享数据。

从index.html中移除video和button元素,使用下面的HTML替换它们:

<textarea id="dataChannelSend" disabled
    placeholder="Press Start, enter some text, then press Send."></textarea>
<textarea id="dataChannelReceive" disabled></textarea>

<div id="buttons">
  <button id="startButton">Start</button>
  <button id="sendButton">Send</button>
  <button id="closeButton">Stop</button>
</div>

一个 textarea 输入文本,另一个显示对端传过来的文本。 index.html现在看起来像这样:

<!DOCTYPE html>
<html>

<head>

  <title>Realtime communication with WebRTC</title>

  <link rel="stylesheet" href="css/main.css" />

</head>

<body>

  <h1>Realtime communication with WebRTC</h1>

  <textarea id="dataChannelSend" disabled
    placeholder="Press Start, enter some text, then press Send."></textarea>
  <textarea id="dataChannelReceive" disabled></textarea>

  <div id="buttons">
    <button id="startButton">Start</button>
    <button id="sendButton">Send</button>
    <button id="closeButton">Stop</button>
  </div>

  <script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
  <script src="js/main.js"></script>

</body>

</html>

更新 JavaScript 用step-03/js/main.js替换main.js。

证明前面的步骤,在codelab里的大块代码做剪切复制不是一个好的想法,但(证如RTCPeerConnection)别无选择。

偿试在端点之间传输数据:打开index.html, 按 Start建立一个对等连接,输入一些文本在左边的textarea,点击 Send使用 WebRTC数据channel传输文本。

它是如何工作的

这个代码使用 RTCPeerConnection 和 RTCDataChannel 交换文本消息。 在这一步中,大部分代码与RTCPeerChannection 例子是一样的。

`sendData() 和 CreateConnection() 函数很多新代码:

function createConnection() {
  dataChannelSend.placeholder = '';
  var servers = null;
  pcConstraint = null;
  dataConstraint = null;
  trace('Using SCTP based data channels');
  // For SCTP, reliable and ordered delivery is true by default.
  // Add localConnection to global scope to make it visible
  // from the browser console.
  window.localConnection = localConnection =
      new RTCPeerConnection(servers, pcConstraint);
  trace('Created local peer connection object localConnection');

  sendChannel = localConnection.createDataChannel('sendDataChannel',
      dataConstraint);
  trace('Created send data channel');

  localConnection.onicecandidate = iceCallback1;
  sendChannel.onopen = onSendChannelStateChange;
  sendChannel.onclose = onSendChannelStateChange;

  // Add remoteConnection to global scope to make it visible
  // from the browser console.
  window.remoteConnection = remoteConnection =
      new RTCPeerConnection(servers, pcConstraint);
  trace('Created remote peer connection object remoteConnection');

  remoteConnection.onicecandidate = iceCallback2;
  remoteConnection.ondatachannel = receiveChannelCallback;

  localConnection.createOffer().then(
    gotDescription1,
    onCreateSessionDescriptionError
  );
  startButton.disabled = true;
  closeButton.disabled = false;
}

function sendData() {
  var data = dataChannelSend.value;
  sendChannel.send(data);
  trace('Sent Data: ' + data);
}

RTCDataChannel的语法估计设置成与 WebSocket 相似, 俱有send()方法和message 事件。注意 dataConstraint的使用。数据channel能配置成开启不同类型的数据共享 -- 例如,优先考虑可靠的交付而不是性能。在Mozilla Developer Network你能发现更多关于选项的信息

三种类型的约束 不同类型的WebRTC呼叫设置选项通常都被称为“约束”。 了解有关约束和选项的更多信息:

点滴

  1. SCTP,它是WebRTC 数据通道使用的协议, 默认是可考和有序的数据投递。何时RTCDataChannel可能需要提供可靠的数据传输,何时性能可能更重要 - 即使这意味着丢失一些数据?
  2. 使用CSS改进页面布局,并将“占位符”属性添加到“dataChannelReceive”textarea 。
  3. 在移动设备上测试本页。

我们学到了什么

在这一步我们学习了如何:

  • 在两个 WebRTC 端点之间建立连接。
  • 在端点之间交换文本数据。

这一步完整的版本在 step-03目录下。

查找更多的信息

下一步

您已经学会了如何在同一页面上的端点之间交换数据,但是如何在不同的机器之间进行此操作? 首先,您需要设置信令通道来交换元数据消息。了解下一步的工作方式!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 它是如何工作的
  • 点滴
  • 我们学到了什么
  • 查找更多的信息
  • 下一步
相关产品与服务
对等连接
对等连接(Peering Connection,PC)是一种大带宽、高质量的云上资源互通服务,可以帮助您打通腾讯云上的资源通信链路。 对等连接具有多区域、多账户、多种网络异构互通等特点,轻松实现云上两地三中心、游戏同服等复杂网络场景;支持 VPC 网络与基础网络、黑石网络互通,满足您不同业务的部署需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档