前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EasyRTC 通话报错 `Failed to execute 'send' on 'RTCDataChannel'

EasyRTC 通话报错 `Failed to execute 'send' on 'RTCDataChannel'

原创
作者头像
TSINGSEE青犀视频
修改2021-07-19 18:02:59
8160
修改2021-07-19 18:02:59
举报
文章被收录于专栏:TSINGSEE青犀视频TSINGSEE青犀视频

WebRTC的存在给在线视频会议系统带来了新的模式,TSINGSEE青犀视频开发的网页视频会议系统EasyRTC综合了webrtc和rtmp/rtsp方案的优点,支持一对一、一对多等视频会议互动通话,满足语音社交、在线教育和培训、视频会议和远程医疗等场景,新的EasyRTC项目也即将和大家见面。

在测试 EasyRTC 新版的点对点通话功能时,出现报错:Failed to execute ‘send’ on ‘RTCDataChannel’: RTCDataChannel.readyState is not ‘open’,并且不能将消息成功的发给对方。

查看代码如下:

代码语言:javascript
复制
//实例化发送通道
sendChannel = localConnection.createDataChannel('webrtc-datachannel');
//onopen事件监听
sendChannel.onopen = this.onSendChannelStateChange;
//onclose事件监听
sendChannel.onclose = this.onSendChannelStateChange;

以上代码并未发现错误,因此怀疑是调用顺序的问题导致。再次查看代码,发现在发送 offer 信息之后,创建了对应的数据传输通道,问题点大概出现在此处。

为了解决该问题,我们将代码顺序调整如下:

代码语言:javascript
复制
//实例化发送通道
    sendChannel = localConnection.createDataChannel('webrtc-datachannel');
    //onopen事件监听
    sendChannel.onopen = this.onSendChannelStateChange;
    //onclose事件监听
    sendChannel.onclose = this.onSendChannelStateChange;

    try {
      console.log('localConnection创建提议Offer开始');
      //创建提议Offer
      const offer = await localConnection.createOffer();
      //创建Offer成功
      await this.onCreateOfferSuccess(offer);
    } catch (e) {
      //创建Offer失败
      this.onCreateSessionDescriptionError(e);
}

修改完毕后,可以正常发送信息。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
智慧会务
腾讯云智慧会务(Tencent Cloud Conference) 是一款为活动管理赋能一站式办展能力的自研产品,结合腾讯生态能力使活动管理组织在线化、数字化、高效化。当前已在展会、商业会议、教育、旅游等垂直领域行业形成成熟的方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档