19 | WebRTC能不能进行文本聊天呢?
该思维导图由 AI 生成,仅供参考
RTCDataChannel 介绍
- 深入了解
- 翻译
- 解释
- 总结
WebRTC不仅支持音视频通话,还能传输二进制数据,如文本聊天和文件传输。其数据通道(RTCDataChannel)可广泛应用于实时文字聊天、文件传输、远程桌面、游戏控制、P2P加速等场景。RTCDataChannel支持多种数据类型,如字符串、Blob、ArrayBuffer等。其传输协议为SCTP,可在可靠有序、不可靠无序、部分可靠模式下工作。创建RTCDataChannel对象需先创建RTCPeerConnection对象,再调用createDataChannel方法。配置RTCDataChannel对象时可指定消息传递是否有序、重传消息失败的最长时间等选项。RTCDataChannel的事件处理与WebSocket类似,包括打开、关闭、接收消息和出错。实时文字聊天可通过RTCDataChannel对象实现,可采用In-band协商和Out-of-band协商两种方式创建RTCDataChannel对象。文章还提供了具体例子,展示了如何通过RTCDataChannel对象实现实时文字聊天应用。RTCDataChannel的创建有两种方式,一种是默认的In-band协商方式,另一种是Out-of-band协商方式。在本文例子的实践部分,我们主要应用的是第一种方式。但一般情况下更推荐使用第二种方式,因为它更高效、更简洁。RTCDataChannel对象的创建要在媒体协商之前创建,否则WebRTC就会一直处于connecting状态,从而导致数据无法进行传输。RTCDataChannel对象是可以双向传输数据的,所以接收与发送使用一个RTCDataChannel对象即可,而不需要为发送和接收单独创建RTCDataChannel对象。SCTP协议是运行在UDP协议之上。
《从 0 打造音视频直播系统》,新⼈⾸单¥59
全部留言(11)
- 最新
- 精选
- Geek_c1c44a老师您好,请问zoom和直播技术相关吗?zoom可能使用什么协议呢?
作者回复: zoom 是 Zoom 公司开发的一款直播软件,它底层也用的 地UDP 协议,他的老板袁征以前是 Webex 的高管。 Webex 是第一家在美国上市的,专门做音视频会议的公司。创建于 1996年,2000年左右在美国上市,后 2007年被cisco 公司收购。Webex出走的人很多都创业做音视频相关的事情,像国内的 声网都是 Webex的人创建的。
2019-08-277 - 许童童SCTP 协议基于UDP,自行实现TCP相关的功能。
作者回复: 赞!
2019-08-276 - John这个问题好像应该问在这个章节: 如果做百人群聊的功能 不用中间服务器 只用webrtc技术和peerconnection 大家觉得普通带宽和手机能够承载么
作者回复: 一路 640*420 的视频咱们估算是 500kbps, 那么 100 人同时与一个人通信就需要 100*500kbps, 也就是说需要 50M的带宽。而这 100 人的 NAT 类型千奇百怪。你想想这样做靠谱吗?
2019-11-1625 - 三角形小于零"文本通过 RTCDataChannel 发送出去后,最终是经过 RTCPeerConnection 传送出去的" 之前提到过 RTCPeerConnection 可以理解为是一个功能超强的 socket,那么 DataChannel 的 SCTP 也是使用这个超强的 socket 来实现的吗? 如果需要 relay,那么 turn server 也会负责帮忙 relay 通信双方往 DataChannel 里发的数据吗?
作者回复: 没错,都是由RTCPeerConnection发出去的。对于底层传输来说,它不关心你上层是什么,都走同样的物理链接。
2020-11-223 - 宇宙之王看到您GitHub例子里面19_chat用了var pcConfig = { 'iceServers': [{ 'urls': 'turn:stun.al.learningrtc.cn:3478', 'credential': "mypasswd", 'username': "garrylea" }] }; 这段是不是没用,好像是您自己的服务器,我把它赋值空var pcConfig=null;也能正常运行。另外当开两个窗口的时候,有时会掉线一个,再连接服务器能连上,但是发送框就老是灰的了,就要两个都断掉重新再联了,这一般是什么原因,谢谢老师!
作者回复: 应该是有BUG
2020-09-191 - 峰老师,一个题外话,这么多可作后端的语言,c++、python、go、java、c#该如何选择了?
作者回复: 信令服务器或者说业务服务器对性能要高不要的话使用 go/java 比较好。流媒体服务器由于对性能要求特别高,所以要使用 C/C++ 开发
2019-08-281 - 木木SCTP是运行在UDP上的,本质上是对UDP的封装,在应用层实现了有序性与可靠性的配置。
作者回复: 赞
2019-08-271 - Bubblyvar options = { key : fs.readFileSync('./cert/1557605_www.learningrtc.cn.key'), cert: fs.readFileSync('./cert/1557605_www.learningrtc.cn.pem') } 老师,这里的key和pem都没有呀
作者回复: 这个需要你自己购买域名和证书,这个证书是我的,现在已经过期了。
2020-10-23 - cheese在create和join后,双方成功连接后,能否用Datachannel来传输信令呢?比如:关闭麦克风之类的
作者回复: 可以,但有很大的局限性,你可以自己想想
2020-04-09 - Geek_5a0689老师,我的server.js在我部署的腾讯云服务器上跑起来了,但是在我本机的html页面请求的时候,没有任何反应,看服务器上的日志也是没有任何的打印,是什么原因呢?我直接跑的git上面的代码都不可以
作者回复: 你购买了http 域名,申请了 https 证书吗?
2020-03-19