前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebRTC 教程 (4)

WebRTC 教程 (4)

作者头像
用户1324186
发布2022-05-24 18:22:26
1.5K0
发布2022-05-24 18:22:26
举报
文章被收录于专栏:媒矿工厂

来源:Engineering Semester 内容整理:李昊勇 这篇文章主要介绍了 WebRTC 聊天室设计和搭建,主要包括信令服务器及客户端网页设计。

WebRTC 教程(1)

WebRTC 教程(2)

WebRTC 教程 (3)

目录

  • WebRTC 聊天室:设计
  • WebRTC 聊天室:信令服务器
  • WebRTC 聊天室:客户端部署

WebRTC 聊天室:设计

讲者首先介绍了要搭建 WebRTC 聊天室所需要的编程语言。对于客户端,当然应该部署在浏览器上,就选用 HTML 和 CSS 作为前端开发工具,如果想要更进一步的 UI 框架就可以选择 BootStrap,前端逻辑就可以使用 JavaScript。

对于剩下的服务端而言,信令服务器,根据前面提到的,我们可以使用 Node.JS 来作为服务端应用。

对于聊天室的一些功能,列举如下:

  • 用户可以登录;
  • 可以保持在线用户名单;
  • 用户可以请求聊天;
  • 所有用户都就绪后,就开始创建聊天室;
  • 用户可以退出聊天室;
  • 仅一对一聊天;
  • 仅文本和表情;
  • 用户可以退出。

讲者接着介绍了对于搭建聊天室,会需要用到哪些 WebRTC 功能或 API:

  • 只要用户登录并请求聊天室,就会有一个 RTCPeerConnection;
  • 对于数据传输,用户需要创建 RTCDataChannel;
  • 用户需要通过信令服务器交换 sdp 请求和答复,以及 ICE 信息。

讲者设计了一个聊天室的简要流程框图:

其中可以看到,NodeJS WebSocket 正在监听用户请求并返还回应,这个 NodeJS 服务器的主要责任是支持 WebRTC 信令。

WebRTC 聊天室:信令服务器

讲者首先介绍了信令服务器的代码:

服务端会接收来自客户端的请求并返回答复。如果用户刷新了页面或是关闭了页面,服务器就会移除用户,如果该用户还希望继续使用应用则需要重新登陆一次。首先创建一个 WebSocket 从客户端监听请求。在线用户列表使用 map 来储存。客户端可以通过 WebSocket 来连接服务端,json 信息用于登录或登出。服务端首先要检查客户端的信息是 json 还是一个普通的信息,来判断是登录信息还是只是一个发送的信息内容。一旦连接建立好,客户端就需要把带有用户登录信息的 json 发送给服务端,服务端就会回复成功或失败。之后服务端就会记录在用户在线名单上,最后把在线用户名单发送给所有的在线用户。

如果一个用户请求聊天室,服务端首先检查用户是否存在登录,然后就需要检查另一个用户的用户状态,并返回成功或失败。基于此服务端会令用户发送请求给另一个用户。此后,用户会根据情况选择是否接收并返还答复,服务器再将答复转发给用户。答复类型包含如下:

  • 如果用户的答复类型为"busy",则服务器认为用户拒绝了请求。
  • 如果答复类型为"answer",则服务器认为用户准备好加入聊天室。
  • 如果用户答复类型为"candidate",服务器会接收用户发的 ICE 内容并转发给另一用户。
  • 如果用户答复类型为"ready",则服务器认为用户准备好了,服务器会向每个用户发送聊天室准备好的信息。在用户进入聊天室后,就会被服务器标记为"busy",也就不能请求或答复聊天。
  • 如果答复类型为"leave",服务器就会了解此用户请求退出聊天室。
  • 如果答复类型为"quit",则服务器会认为此用户已退出并更新用户名单。

WebRTC 聊天室:客户端部署

讲者首先展示了这个客户端 demo,在两个页面中可以各使用一个用户名登录,之后可以选择用户并向其发送通话请求,另一方可以选择收到或拒绝,在通话时,可以点击右上角 leave 来退出聊天。

讲者会使用 HTML 和 JavaScript 来开发客户端应用。首先讲者介绍了 HTML 来写应用页面,写一个 HTML 页面,使用不同的分区来实现登录页面和通话页面。

讲者写了一个 html 文件并命名为 index.html,在页面中加入了 head 和 body 部分,可以在 head 部分导入所需要的包。在 body 部分,使用了三个分区来分别设计登录页面,用户页面和用户聊天页面。可以通过使用 JavaScript 来控制这些分区的显示。

然后讲者展示了 Javascript 完成的这个页面的逻辑设计:

在客户端,需要连接到信令服务器。当用户名输入完毕后,用户名就需要发送到服务器确认,如果登录成功,服务器会发送返回"server_login",而如果服务器返回了"false",则说明相同的用户名已经被使用,需要换一个名字。

如果一个用户登录了,则服务器需要向所有用户同步该用户的上线信息。如果一个用户点击了另一个用户,则需要向服务器发送建立聊天的请求"wang_to_call",如果对端用户在线且有空,则会显示出请求聊天的页面,并建立 RTC 连接。为了建立 ICE 连接,首先需要添加 STUN 和 TURN 服务器名。之后就可以通过 RTCPeerConnection API 创建 WebRTC 连接。接下来通过 Create_DataChannel API 函数创建 RTCDataChannel,你可以根据需求来设置你的 DataChannel 参数。DataChannel 建立完毕后,还需要为其设置回调函数,如报错,收到信息,打开和关闭 channel 等。之后根据客户端请求建立 SDP 请求,最后创建 WebRTC 答复。最后在两个用户都发送了"ready"答复后,就可以开始创建聊天室,并将两个用户的状态都设置为"busy"。

http://mpvideo.qpic.cn/0bc3viaaqaaa24aix737ybrfbkwdbcvaacaa.f10002.mp4?dis_k=c20388669d891c0bf758b20720b98ec0&dis_t=1653387715&vid=wxv_2397994833299996672&format_id=10002&support_redirect=0&mmversion=false

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 媒矿工厂 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WebRTC 聊天室:设计
  • WebRTC 聊天室:信令服务器
  • WebRTC 聊天室:客户端部署
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档