WebRTC系列-RTCDataChannel发送非音视频数据

这篇具有很好参考价值的文章主要介绍了WebRTC系列-RTCDataChannel发送非音视频数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


即时通讯中我们除了媒体数据的发送需求外,有时候需要发送非媒体数据;WebRTC提供了一种发送非音视频数据的方式就是打他RTCDataChannel,在之前的版本里是使用rtp来传输数据,在最新的版本里已经采用sctp协议来发送数据;这篇文章主要介绍js端的实现;

1. RTCDataChannel基本介绍

RTCDataChannel 接口是WebRTC API的一个功能,可以在两个设备间建立一个对等的通道(ice穿透通道),然后就可以通过该通道发送和接收任意数据。
RTCDataChannel 可以通过RTCPeerconnection 创建,接口函数定义如下:

   createDataChannel(label: string, dataChannelDict?: RTCDataChannelInit): RTCDataChannel;

其中label是一个标识表示两边的通道是一个,dataChannelDict是一个可选参数用来配置datachannal的一个设置项目,定义如下:

{
    id?: number;
    maxPacketLifeTime?: number;
    maxRetransmits?: number;
    negotiated?: boolean;
    ordered?: boolean;
    protocol?: string;
 }

这些参数一般不用设置,也能使用,如果特殊要求需要设置,这里介绍一下参数的含义:

  • ordered 表示通过 RTCDataChannel 的发送的信息的到达顺序需要和发送顺序一致(true), 或者到达顺序不需要和发送顺序一致 (false).也就是是否保证包的顺序性; 属性的默认值是: true.
  • maxPacketLifeTime 最大存活时间,在不可靠模式下尝试传输消息的最大毫秒数,也就是一个包持续尝试发送的超时时间,默认是null;
  • maxRetransmits 消息尝试重新发送的次数,这个和maxPacketLifeTime只能同时设置一个,默认值是null;
  • protocol datachanal 使用的字协议名称,默认是 空字符串;
  • negotiated false的时候其中一方调用createDataChannel创建通道,另一方在peerConnection的onDataChannal事件中处理另外一方的datachannal,如果是true那么两端都可以使用createDataChannel来创建数据通道,使用ID来标识数据通道;默认是false;
  • id 通道的唯一标识ID ,如果不设置会默认设置一个作为标识;
    接下来,看下实际项目中的使用;

2. RTCDataChannel实战

2.1 negotiated=false 创建及事件处理

在之前的demo中新增两个变量:

let sendDC = null;
let recvDC = null;

sendDC是发送方的ID通过peer的create方法生成:

 sendDC = peerconnetion.createDataChannel('my channal');
    sendDC.onopen = function () {
        console.log("sendDC datachannel open");
    };
  
    sendDC.onclose = function () {
        console.log("sendDC datachannel close");
    };

通过设置两个监听用于接收数据通道的状态变化;
recvDC是在对方创建成功后,用于接收远端的消息的,通过peerconnection的ondatachannel可以获取到:

peerconnetion.ondatachannel = (ev)=>{
        recvDC = ev.channel;
        recvDC.onmessage = function (event) {
            console.log(" recvDC received: " + event.data);
        };
    
        recvDC.onopen = function () {
            console.log("recvDC datachannel open");
        };
      
        recvDC.onclose = function () {
            console.log("recvDC datachannel close");
        };
    };

上述代码中同senDC一样监听的打开和关闭的方法;同时需要监听收消息的方法,用来处理对方发送过来的数据;

2.2 negotiated= true 创建及事件处理

同上一节不同的是这里本地和远端的dataChannal都可以使用createDataChanal来创建;创建及监听的设置如下:

const opt = {
        negotiated: true,
        id : 0
    };
    sendDC = peerconnetion.createDataChannel('my channal',opt);
    sendDC.onopen = function () {
        console.log("sendDC datachannel open");
    };
  
    sendDC.onclose = function () {
        console.log("sendDC datachannel close");
    };
    sendDC.onmessage = function (event) {
            console.log(" recvDC received: " + event.data);
        };

运行后在收消息里断点,如下:
WebRTC系列-RTCDataChannel发送非音视频数据

2.3 发送消息

RTCDataChannel支持发送文本,二进制数据等内容的数据,其接口定义如下:

    send(data: string): void;
    send(data: Blob): void;
    send(data: ArrayBuffer): void;
    send(data: ArrayBufferView): void;

在demo中为了便于测试先发送文本数据,如: sendDC.send('你好 我是 ' + selfid);;这样就将数据发送出去,在两外一端的recvDC的onmessage中就能收到消息;
如果需要关闭数据通道直接调用close方法就可以关闭,如下:

sendDC.close();
recvDC.close();
sendDC = null;
recvDC = null;

datachannal的基本使用就是以上的接口;文章来源地址https://www.toymoban.com/news/detail-414627.html

到了这里,关于WebRTC系列-RTCDataChannel发送非音视频数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • WebRTC音视频通话-WebRTC本地视频通话使用ossrs服务搭建

    WebRTC音视频通话-WebRTC本地视频通话使用ossrs服务搭建

    iOS开发-ossrs服务WebRTC本地视频通话服务搭建 之前开发中使用到了ossrs,这里记录一下ossrs支持的WebRTC本地服务搭建。 ossrs是什么呢? SRS(Simple Realtime Server)是一个简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT等多种实时流媒体协议。 官网地址:https://ossrs.net/lt

    2024年02月12日
    浏览(10)
  • webRTC一对一音视频对话

    环境 阿里云操作系统: ubuntu 18.4 amd         注意:安全组一定添加对应的入口端口 nodejs -v 18.19.0 npm -v 10.2.3 需要安装的库 package.json 服务器端         webRTC一定要使用https服务器,如果没有ssl证书,可以使用自制证书         1.创建HTTPS服务器                 使用soc

    2024年01月19日
    浏览(18)
  • mediasoup webrtc音视频会议搭建

    mediasoup webrtc音视频会议搭建

    拉下源码: https://github.com/versatica/mediasoup-demo 源码里有以下目录其中,app网页的界面终端,broadcasters是广播,也就是他支持我们用ffmpeg推流上去给所有的成员广播,server是流媒体服务器。 源码包含了,https服务器用于浏览器获取界面,信令服务器用于房间管理,和流媒体服务

    2024年02月05日
    浏览(11)
  • WebRTC音视频会议底层支撑技术

    WebRTC音视频会议底层支撑技术

    WebRTC允许应用使用P2P通信。WebRTC是一个广泛的话题,在本文中,我们将重点讨以下问题。 为什么Web RTC 如此受欢迎? 在P2P连接过程中会发生什么 信号传递 NATs和ICE STUN TURN服务器 VP9视频编解码器 WebRTC APIs 安全 1.为什么Web RTC 如此受欢迎? 开放源代码 它为浏览器提供了端到端

    2024年02月11日
    浏览(9)
  • WebRTC实战-第二章-使用WebRTC实现音视频通话

    WebRTC实战-第二章-使用WebRTC实现音视频通话

    、 什么是WebRTC|WebRTC入门到精通必看|快速学会音视频通话原理|WebRTC超全资料分享FFmpeg/rtmp/hls/rtsp/SRS WebRTC **WebRTC详细指南** http://www.vue5.com/webrtc/webrtc.html WEBRTC三种类型(Mesh、MCU 和 SFU)的多方通信架构 WebRTC API包括媒体捕获,音频和视频编码和解码,传输层和会话管理 。 假设

    2023年04月12日
    浏览(7)
  • WebRTC音视频通话-RTC直播本地视频及相册视频文件

    WebRTC音视频通话-RTC直播本地视频及相册视频文件

    WebRTC音视频通话-RTC直播本地视频及相册视频文件 WebRTC音视频通话-RTC直播本地视频文件效果图如下 WebRTC音视频通话-RTC直播本地视频文件时候,用到了AVPlayer、CADisplayLink。 AVPlayer是什么? AVPlayer是基于AVFoundation框架的一个类,很接近底层,灵活性强,可以自定义视频播放样式

    2024年02月13日
    浏览(17)
  • WebRTC | 音视频直播客户端框架

    WebRTC | 音视频直播客户端框架

            端到端通信互动技术可分解为以下几个技术难点:客户端技术、服务器技术、全球设备网络适配技术和通信互动质量监控与展示技术。         音视频直播可分成两条技术路线:一条是以音视频会议为代表的实时互动直播;另一条是以娱乐直播为代表的流媒体

    2024年02月14日
    浏览(13)
  • WebRTC音视频通话-WebRTC推拉流过程中日志log输出

    WebRTC音视频通话-WebRTC推拉流过程中日志log输出

    WebRTC音视频通话-WebRTC推拉流过程中日志log输出 之前实现iOS端调用ossrs服务实现推拉流流程。 推流:https://blog.csdn.net/gloryFlow/article/details/132262724 拉流:https://blog.csdn.net/gloryFlow/article/details/132417602 在推拉流过程中的WebRTC的相关日志log输出可以看到一些相关描述信息。在WebRTC日志

    2024年02月10日
    浏览(18)
  • WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS

    WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS

    WebRTC音视频通话-实现GPUImage视频美颜滤镜效果 在WebRTC音视频通话的GPUImage美颜效果图如下 可以看下 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话,可以查看:https://blog.csdn.net/gloryFlow/article/details/132262724 之前WebR

    2024年02月12日
    浏览(9)
  • WebRTC技术文档 -- 1.音视频直播(笔记)

    WebRTC技术文档 -- 1.音视频直播(笔记)

    1.1 两条技术路线 1.1.1 以音视频会议为代表的实时互动直播 互动直播主要解决音视频远程交流问题,实时性较强,时延一般低于500ms。 1.1.2 以娱乐直播为代表的流媒体分发 娱乐直播主要解决音视频大规模分发问题,实时性较差,时延一般在3s以上。 1.2 直播技术 WebRTC用于实时

    2024年02月22日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包