标签: rtcdatachannel

WebRTC 通道可靠性

我想检查一下我对 WebRTC 数据通道的理解是否正确,特别是通过改变字典的ordered&maxRetransmitsmaxPacketLifeTime属性可以实现的不同类型的通道RTCDataChannelInit。我的以下假设是否正确:

  1. 创建一个可靠有序的通道,如 TCP,但基于消息而不是流:
RTCPeerConnection.createDataChannel("label", {
    ordered: true 
});
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个可靠无序的通道(也应该maxRetransmits或被maxPacketLifeTime指定以实现可靠性?)
RTCPeerConnection.createDataChannel("label", {
        ordered: false    
});
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个不可靠无序的通道,如 UDP
RTCPeerConnection.createDataChannel("label", {
    ordered: false,
    maxRetransmits: 0
});
Run Code Online (Sandbox Code Playgroud)
  1. 产生不可靠“有序”的通道,即如果较晚的消息到达,则较早的消息将被丢弃
RTCPeerConnection.createDataChannel("label", {
    ordered: true,
    maxRetransmits: 0
});
Run Code Online (Sandbox Code Playgroud)

webrtc rtcdatachannel rtcpeerconnection

17
推荐指数
1
解决办法
2114
查看次数

使用信令实现Hello World WebRTC DataChannel示例

这样做的目的是成为一个保持最新的社区Wiki帖子,因此对使用WebRTC DataChannel实现浏览器到浏览器(p2p)的JSON消息通信感兴趣的开发人员具有简单但功能性的示例.

WebRTC DataChannels是实验性的,仍处于草案阶段.目前网络似乎是过时的WebRTC示例的雷区,如果开发人员正在尝试学习RTCDataChannel API,那就更是如此.

现在,在WebRTC 兼容的浏览器中运行的简单但功能性的1页示例似乎很难找到.例如,一些示例省略了信号实现,其他示例仅适用于单个浏览器(例如Chrome-Chrome),许多因最近的API更改而过时,而其他示例如此复杂,它们为入门创建了障碍.

请发布符合以下条件的示例(如果不符合要求,请说明):

  1. 客户端代码为1页(200行或更少)
  2. 服务器端代码是1页,引用了技术(例如node.js,php,python等)
  3. 实现了信令机制并引用了协议技术(例如WebSockets,长轮询,GCM等)
  4. 跨浏览器运行的工作代码(Chrome,Firefox,Opera和/或Bowser)
  5. 最小的选项,错误处理,抽象等 - 意图是一个基本的例子

javascript p2p webrtc rtcdatachannel

10
推荐指数
1
解决办法
2082
查看次数

在webrtc中创建和传输自定义媒体流

我想使用canvas元素作为webrtc通信的视频部分的mediastreamsource,任何方向都会有所帮助,搜索网络,找不到讨论这个主题的资源

*长篇背景故事*

问题是,我无法直接从相机发送视频,这是我在显示之前处理视频(一些图像处理内容,超出此问题的范围)的要求的一部分.

以前,在另一个对等的浏览器上<video>,我没有使用标签直接显示视频,而是对隐藏的画布元素进行了一些处理,然后将细节复制到另一个画布(我使用了settimeout来保持绘图,这给了它illusion of live video).

现在,客户希望在传输视频之前完成处理,因此我使用webrtc直接传递音频流(之前音频和视频都是通过webrtc发送的).对于视频流,我有两个解决方案:

脚步:

  1. 在本地对等体上处理视频,在隐藏的画布上绘制.简单的部分.

  2. 使用超时重复捕获图像数据并传输
    a)使用websockets( yes, goes through server),这带来了可怕的延迟和浏览器的最终崩溃.
    b)使用RTCDataChannel,具有更好的性能,但有时无故失败.我还有其他几个问题(例如使用额外带宽,因为发送jpeg而不是webp).

另一个主要问题是,因为我正在使用超时:当我切换标签时,帧速率在另一侧下降.

那么,有什么方法可以将隐藏的画布用作mediastreamsource而不是我手动操作吗?

javascript mediastreamsource webrtc rtcdatachannel

6
推荐指数
1
解决办法
1721
查看次数

WebRTC RTCDataChannel - 如何配置为可靠?

我启动了一个RTCDataChannel,默认情况下它似乎处于不可靠的模式.

我想配置它是可靠的,以获得有保证的数据包传输,但RTCDataChannelInit配置似乎没有这个设置.

dictionary RTCDataChannelInit {
             boolean        ordered = true;
             unsigned short maxPacketLifeTime;
             unsigned short maxRetransmits;
             DOMString      protocol = "";
             boolean        negotiated = false;
             unsigned short id;
}; 
Run Code Online (Sandbox Code Playgroud)

此外,它RTCDataChannel.isReliable是一个只读属性.

如何将通道配置为可靠模式?

webrtc rtcdatachannel

6
推荐指数
1
解决办法
697
查看次数

使用 webRTC 在两个对等点之间创建和使用数据通道

我正在尝试使用 WebRTC 设置对等文件共享系统。我可以在每一侧打开一个数据通道,但我无法从一个用户向另一个用户发送消息。此外,如果一个对等方关闭通道,另一个对等方,则仅针对该用户触发 onclose 事件。

通过 webRTC 设置和使用数据通道的正确方法是什么?

你能告诉我我的代码有什么问题或缺失吗?

//create RTC peer objet.
var RTCPeerConnection = webkitRTCPeerConnection;
var RTCIceCandidate = window.RTCIceCandidate;
var RTCSessionDescription = window.RTCSessionDescription;

var iceServers = {
    iceServers: [{
        url: 'stun:stun.l.google.com:19302'
    }]
};
var p2p_connection = new RTCPeerConnection({
      iceServers: [
        { 'url': (IS_CHROME ? 'stun:stun.l.google.com:19302' : 'stun:23.21.150.121') }
  ]
});

// send offer (only executes in one browser)
function initiateConnection() {
    p2p_connection.createOffer(function (description) {
        p2p_connection.setLocalDescription(description);
        server_socket.emit('p2p request', description,my_username);
    });
};

// receive offer and send answer
server_socket.on('p2p request', …
Run Code Online (Sandbox Code Playgroud)

javascript real-time webrtc rtcdatachannel

5
推荐指数
1
解决办法
3578
查看次数

新的PeerConnectionFactory()在android上出错

我正在尝试在Android上实现WebRTC DataChannel.我想创建一个简单的peerconnection对象,它将打开DataChannel以使用WebRTC通过网络发送数据.我尝试创建PeerConnection对象时收到错误.我了解到我们使用工厂来创建peerconnection对象factory.createPeerConnection().

为此,我必须首先创建PeerConnectionFactory对象.在此之后,我可以使用它来创建PeerConnection对象.我得到错误Could not find method android.media.MediaCodec.setParameters,Fatal Signal 11 (SIGSEGV) at 0x00000000 (code=1)当我尝试创建PeerConnectionFactory对象时.我也试过以下代码PeerConnectionFactory.initializeAndroidGlobals(this, false, false, false);这就是我想要做的:

PeerConnectionFactory factory = new PeerConnectionFactory();

peer = new Peer();
Run Code Online (Sandbox Code Playgroud)

这是我的Peer对象的样子:

public class Peer implements SdpObserver, PeerConnection.Observer, DataChannel.Observer {

    private PeerConnection pc;
    private DataChannel dc;

    public Peer() {

      this.pc = factory.createPeerConnection(RTCConfig.getIceServer(), 
              RTCConfig.getMediaConstraints(), this);

      dc = this.pc.createDataChannel("sendDataChannel", new DataChannel.Init());

    }

    @Override
    public void onAddStream(MediaStream arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onDataChannel(DataChannel dataChannel) { …
Run Code Online (Sandbox Code Playgroud)

android webrtc rtcdatachannel

5
推荐指数
2
解决办法
5705
查看次数

为什么通过WebRTC发送的消息有时会以不同的顺序收到?

我将ordered set设置为true,但是如果在短时间内(<1秒)发送了许多(1000或更多)消息,则收到的消息不会以相同的顺序接收.

rtcPeerConnection.createDataChannel("app", {
   ordered: true,
   maxPacketLifeTime: 3000
});
Run Code Online (Sandbox Code Playgroud)

如果需要,我可以提供一个最小的例子来重现这种奇怪的行为.

我还使用bufferedAmountLowThreshold和相关事件来延迟发送缓冲量太大.我选择2000但我不知道最佳数字是多少.我在短时间内收到如此多邮件的原因是因为我不想溢出一次发送的最大数据量.所以我将数据分成800字节包并发送.我再次不知道1条消息的最大大小是多少.

const SEND_BUFFERED_AMOUNT_LOW_THRESHOLD = 2000; //Bytes
rtcSendDataChannel.bufferedAmountLowThreshold = SEND_BUFFERED_AMOUNT_LOW_THRESHOLD;
const MAX_MESSAGE_SIZE = 800;
Run Code Online (Sandbox Code Playgroud)

对于未分成太多消息的小数据,一切正常.仅对大文件随机发生错误.

arraybuffer webrtc rtcdatachannel

5
推荐指数
1
解决办法
350
查看次数

webrtc:无法通过 chrome 中的数据通道发送 arraybuffer

我想将流数据(作为 的序列ArrayBuffer)从 Chrome 扩展程序发送到 Chrome 应用程序,因为Chrome 消息 API(包括chrome.runtime.sendMessage, postMessage...)不支持ArrayBuffer并且 JS 数组性能较差,我必须尝试其他方法。最终,我发现 WebRTCRTCDataChannel对于我来说可能是一个很好的解决方案。

我已成功通过 a 发送字符串RTCDataChannel,但是当我尝试发送时,ArrayBuffer我得到:

code: 19
message: "Failed to execute 'send' on 'RTCDataChannel': Could not send data"
name: "NetworkError"
Run Code Online (Sandbox Code Playgroud)

看来这不是带宽限制问题,因为即使我发送了一个字节的数据,它也失败了。这是我的代码:

code: 19
message: "Failed to execute 'send' on 'RTCDataChannel': Could not send data"
name: "NetworkError"
Run Code Online (Sandbox Code Playgroud)

在 OSX 10.10.1、Chrome M40 (Stnble)、M42(Canary) 上测试;以及 Chromebook M40 上。

我在这里提交了一个 WebRTC 错误。

google-chrome google-chrome-extension webrtc google-chrome-app rtcdatachannel

4
推荐指数
1
解决办法
2976
查看次数

如何使用WebRTC在两个对等方之间协商数据通道?

WebRTC RTCPeerConnection接口有一个createDataChannel方法和一个ondatachannel事件处理程序.这些如何互动?如何创建可用于在两个对等体之间发送/接收数据的单个数据通道?

此外,RTCDataChannelInit构造函数有一个negotiated字段,默认情况下设置为false并表示它会导致频道在带内通知.如果设置为什么会发生什么true

sctp webrtc rtcdatachannel

4
推荐指数
1
解决办法
1147
查看次数

RTCDataChannel发送方法不发送数据

我对RTCDataChannel有一个奇怪的问题.

我正在研究WebRTC,我已经开始进行WebRTC音频/视频聊天了.现在我想使用RTCDataChannel为其添加文本聊天和文件共享.

我已经像这样创建了RTCDataChannel:

var dataChannelOptions = {
    reliable: true,
    maxRetransmitTime: "2000"
};

dataChannel = yourConnection.createDataChannel("testDataChannel", dataChannelOptions);

dataChannel.onerror = function (error) {
    console.log("dataChannel.OnError:", error);
};

dataChannel.onmessage = function (event) {
    console.log("dataChannel.OnMessage:", event);
};

dataChannel.onopen = function (event) {
    console.log("dataChannel.OnOpen", event);
    dataChannel.send("Hello World!");
};

dataChannel.onclose = function (event) {
    console.log("dataChannel.OnClose", event);
};
Run Code Online (Sandbox Code Playgroud)

我唯一接受的是从dataChannel.onopen的第一行登录.我没有从dataChannel.onmessage收到日志.

没有错误..

当我手动调用dataChannel.send时结果是一样的.

测试:
谷歌Chrome(50.0.2661.94)
Firefox(45.0.2)

任何人都可以帮忙吗?

javascript html5 webrtc rtcdatachannel

3
推荐指数
2
解决办法
1368
查看次数