如何启动基本的WebRTC数据通道?

这是我到目前为止所做的,但它似乎甚至没有试图连接.我确定我只是遗漏了一些基本的东西.

var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection || window.msRTCPeerConnection;

var peerConnection = new RTCPeerConnection({
    iceServers: [
        {url: 'stun:stun1.l.google.com:19302'},{url: 'stun:stun2.l.google.com:19302'},{url: 'stun:stun3.l.google.com:19302'},{url: 'stun:stun4.l.google.com:19302'},]
});
peerConnection.ondatachannel  = function () {
    console.log('peerConnection.ondatachannel');
};
peerConnection.onicecandidate = function () {
    console.log('peerConnection.onicecandidate');
};

var dataChannel = peerConnection.createDataChannel('myLabel',{
});

dataChannel.onerror = function (error) {
    console.log('dataChannel.onerror');
};

dataChannel.onmessage = function (event) {
    console.log('dataChannel.onmessage');
};

dataChannel.onopen = function () {
    console.log('dataChannel.onopen');
    dataChannel.send('Hello World!');
};

dataChannel.onclose = function () {
    console.log('dataChannel.onclose');
};
console.log(peerConnection,dataChannel);

解决方法

WebRTC假设您有办法向任何想要联系的人发送信号(向其发送要约字符串,并从中接收答案字符串).没有一些服务器,你会怎么做?

为了说明,这里有一些代码可以执行除此之外的所有操作(适用于Firefox和Chrome 45):

var config = { iceServers: [{ urls: "stun:stun.l.google.com:19302" }]};
var dc,pc = new RTCPeerConnection(config);
pc.ondatachannel = e => {
  dc = e.channel;
  dc.onopen = e => (log("Chat!"),chat.select());
  dc.onmessage = e => log(e.data);
}

function createOffer() {
  button.disabled = true;
  pc.ondatachannel({ channel: pc.createDataChannel("chat") });
  pc.createOffer().then(d => pc.setLocalDescription(d)).catch(Failed);
  pc.onicecandidate = e => {
    if (e.candidate) return;
    offer.value = pc.localDescription.sdp;
    offer.select();
    answer.placeholder = "Paste answer here";
  };
};

offer.onkeypress = e => {
  if (e.keyCode != 13 || pc.signalingState != "stable") return;
  button.disabled = offer.disabled = true;
  var obj = { type:"offer",sdp:offer.value };
  pc.setRemoteDescription(new RTCSessionDescription(obj))
  .then(() => pc.createAnswer()).then(d => pc.setLocalDescription(d))
  .catch(Failed);
  pc.onicecandidate = e => {
    if (e.candidate) return;
    answer.focus();
    answer.value = pc.localDescription.sdp;
    answer.select();
  };
};

answer.onkeypress = e => {
  if (e.keyCode != 13 || pc.signalingState != "have-local-offer") return;
  answer.disabled = true;
  var obj = { type:"answer",sdp:answer.value };
  pc.setRemoteDescription(new RTCSessionDescription(obj)).catch(Failed);
};

chat.onkeypress = e => {
  if (e.keyCode != 13) return;
  dc.send(chat.value);
  log(chat.value);
  chat.value = "";
};

var log = msg => div.innerHTML += "<p>" + msg + "</p>";
var Failed = e => log(e + ",line " + e.lineNumber);
<script src="https://rawgit.com/webrtc/adapter/master/adapter.js"></script>
<button id="button" onclick="createOffer()">Offer:</button>
<textarea id="offer" placeholder="Paste offer here"></textarea><br>
Answer: <textarea id="answer"></textarea><br><div id="div"></div>
Chat: <input id="chat"></input><br>

在第二个选项卡中打开此页面,您可以从一个选项卡与另一个选项卡(或世界各地的其他计算机)进行聊天.什么臭,你必须自己得到报价:

>按Tab A中的“优惠”按钮(仅限),等待1-20秒,直到看到优惠文字为止,
>将商品标签从标签A复制粘贴到标签B,然后按Enter键
>将选项卡B中显示的答案文本复制粘贴到选项卡A,然后按Enter键.

您现在应该能够在没有服务器的选项卡之间聊天.

正如你所看到的,这是一个低于标准的体验,这就是为什么你需要一些基本的websocket服务器来传递A / B之间的提供/回答(以及如果想要快速连接的涓冰候选者)来获取东西开始.一旦建立了连接,就可以使用数据通道进行一些额外的工作.

javascript – 如何启动基本的WebRTC数据通道?的更多相关文章

  1. 在iOS上构建WebRtc

    msg/discuss-webrtc/VJg-fk2-i_0/dtG200DOzsgJ但步骤不明确.某人可以总结这些步骤,以便将来对所有人都有用吗?解决方法我写了一篇详细的博客文章,其中包含有关如何构建WebRTC示例iOS应用程序的所有说明,以及如何在iOS模拟器或实际的iOS设备上运行它.你可以takealookhere阅读细节,这是一个非常漫长的过程.

  2. ios – 可以在iPhone上使用Web RTC,如果是这样,怎么样?

    可以在iPhone上使用WebRTC,如果是这样,怎么样?我们如何在iPhone中集成WebRTC.解决方法有一些适用于iOS的基于WebRTC的SDK.看看这篇文章:http://bloggeek.me/webrtc-fit-ios/

  3. QuickBlox WebRtc VideoChat Android

    几天我正在研究quickblox.i让对手观点在我的观点下面,如this.它工作正常,但是当我保持像skype这样的视图时:–对手视图在全屏幕上,我的视图位于对手视图的右上角,它只渲染一个最终渲染的视图.我在quickblox网站上看了quickbloxwebrtc示例.我看到了该示例中的代码,但它包含了一些会议对话,其中包含一些复杂的循环视图编码,对我来说,单个一对一的谈话是必需的,任何人都可以

  4. Android Webrtc记录来自其他同行的流的视频

    我正在开发一个webrtc视频通话Android应用程序,它工作得很好,我需要录制其他对等(remoteVideoStream)和myStream(localVideoStream)的视频,并将其转换为某些可保存的格式,如mp4或任何其他格式,我真的在寻找它,但却无法弄清楚如何完成这项工作.我已经阅读了有关VideoFileRenderer的内容,我尝试将其添加到我的代码中以保存视频但是也无法使用

  5. DataChannel.state()始终返回CONNECTING webRTC Android

    我有一个Android应用程序作为运行在Node.js服务器上的WebRTC服务器的客户端运行.该应用程序的当前状态是我可以进行视频通话,但无法在DataChannel上发送消息.这是我的Android应用程序的完整代码.Home.javapeerEventHandler.java欢迎任何意见和建议;)解决方法WebRTC数据通道现在通过SCTP工作,因此您可以删除RtpDataChannels约

  6. android – 使用AppRTC与自定义服务器

    我已经成功构建了AppRTCforAndroid,我可以使视频通话提供演示应用程序的地址(https://apprtc.appspot.com/?r=XXXXXXXX)我的问题是,如何使这个应用程序与自定义WebRTC服务器或另一个WebRTC应用程序(例如https://talky.io/)配合使用我有点困惑如何实现这一点.我也遵循教程HERE,我可以在桌面浏览器之间拨打电话,但我不知道如何从A

  7. 详解IOS WebRTC的实现原理

    WebRTC,源自网页实时通信(Web Real-Time Communication)缩写,它是支持网页浏览器进行实时语音对话或视频对话的技术。它为我们提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android,ios。

  8. Html5 webRTC简单实现视频调用的示例代码

    这篇文章主要介绍了Html5 webRTC简单实现视频调用的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. Android WebRTC 对 AudioRecord 的使用技术分享

    这篇文章主要介绍了Android WebRTC 对 AudioRecord 的使用技术分享,AudioRecord 是 Android 基于原始PCM音频数据录制的类,接下来和小编进入文章了解更详细的内容吧

  10. 只能从启动连接的一端发送数据。如何从另一端(PeerJs)发送数据

    我正在使用我的SveltKit应用程序中的peerjs模块创建一个对等文件传输应用程序此外,自定义信令服务器使用peerjs--port5000命令,并成功连接这是我的文件发送者端的代码类型脚本:这是我在文件接收方端的代码类型脚本:我在这里做错了什么,或者只有发起连接的一方可以发送数据?我浏览了互联网,但找不到类似的问题和解决方法,请帮助!!

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部