搜索
首页后端开发Python教程如何使用 Webrtc、Websocket 和 Django 构建随机视频聊天 Web 应用程序。

在我大学二年级时,我和我的朋友常常花几个小时在 Omegle 上,与来自世界各地的随机人聊天。这总是充满乐趣和惊喜——你永远不知道下一个会遇到谁。当 Omegle 关闭后,留下了一片空白。我们怀念那些随机连接的兴奋感,就在那时我想,“为什么不构建我自己的版本呢?”

在这篇博客中,我将详细介绍使用 WebRTC 和 WebSocket 设计和构建此类平台的过程,重点介绍我面临的挑战以及如何克服这些挑战。读完本博客后,您不仅会了解它的工作原理,还会为开始构建自己的实时通信应用程序奠定坚实的基础

我目前正在开发一个名为 Noto Chats 的项目,其中包括随机视频聊天功能以及其他几个令人兴奋的功能。该系统已经过彻底测试并且可以无缝运行。

这是 ramdomvideo 聊天应用程序的代码链接 https://github.com/Arsh910/RandomVideo-Chat-app

技术堆栈

前端:用于构建交互式用户界面的 ReactJS。
后端:用于处理 WebSocket 连接的 Django Channels。
信令协议:用于建立 WebRTC 连接的 WebSocket。
媒体流:用于点对点视频和音频通信的 WebRTC。

设计

How to Build a Random Video Chat Web app withWebrtc ,Websocket and Django.
双方都会尝试建立连接,先建立的将继续

设计的组成部分:

如果您不熟悉 WebRTC 的工作原理,请观看我学习的这个视频。以下是组件的简要概述

1。客户端 1 和客户端 2
这些代表尝试连接的两个用户。每个客户端负责创建报价、将其发送到服务器并响应他们收到的报价。

类比:将客户 1 和客户 2 视为两个想要进行对话的人。他们还不认识,但很想交谈。各自主动伸手等待对方回应。

2。服务器
服务器充当媒人的角色。它不处理实际的对话,而是通过在客户之间传递报价和答案并帮助交换连接详细信息来促进介绍。

类比:想象一个共同的朋友在聚会上介绍两个人。朋友没有加入他们的谈话,但要确保他们知道彼此的姓名和电话号码才能开始交谈。

3。对等连接
PeerConnection 是在两个客户端之间建立直接链接的机制。它管理媒体(音频/视频)交换并确保连接建立后保持稳定。就像上图中的peer1和peer 2一样。

类比:PeerConnection 就像两栋房子之间的安全、私人隧道。隧道建成后,里面的人可以在没有其他人看到的情况下传递纸条、交谈,甚至寄包裹。

4。 ICE 候选人
ICE(交互式连接建立)候选者是直接连接的构建块。这些是 PeerConnection 尝试用来建立最佳连接的路由和网络路径。

类比:ICE候选者就像地图,显示了连接两栋房子的多条道路。连接找到最佳道路(最短、最平滑)并使用它来确保快速可靠的路线。

5。提议和答复
连接过程从一个客户端(调用者)创建报价并通过服务器将其发送到另一个客户端开始。第二个客户端(接收者)创建一个答案并将其发回。此交换建立了连接。

类比:想象一个人发送一封信说:“我们做朋友吧!”另一个人回答:“当然,我也想要!”一旦他们同意,友谊就开始了。

6。曲目(音频/视频流)
轨道是指建立连接后在客户端之间共享的媒体流(音频和视频)。

类比:曲目就像来自两个摄像机和麦克风的实时反馈。每个人都可以实时看到和听到对方正在分享的内容,就像实时视频通话一样。

7。信令流程
信令过程涉及通过服务器交换报价、答案和 ICE 候选者。这可确保两个客户端都拥有建立直接对等连接所需的信息。

类比:信令过程就像邮政系统在两个想要联系的人之间传递消息。邮递员(服务器)确保信件(报价、答复)到达正确的收件人,以便对话可以开始。

双重角色挑战

要理解设计,首先要抓住一个关键挑战。

在传统的电话通话中,连接过程涉及一个人充当呼叫者,另一个人充当接收者。然而,在这样的聊天应用程序中,情况就不同了。在这里,每个用户都在发起连接并等待其他人接受它。这意味着每个人都必须同时充当呼叫者和接收者,创建一个两个角色融合以实现无缝连接的系统。

这就是为什么我使用两个对等连接,peer1 和peer2。

一些重要的功能:

OnIceCandidateFunc
处理 ICE 候选交换以建立点对点连接。当从 STUN 服务器收到 Ice 候选时,它会将 ICE 候选发送到服务器。

OnTrackFunc
处理从对等方接收的媒体轨道(音频/视频)。当对等方传输曲目时激活。在接收者的界面上显示媒体。

handle_ice
处理从其他客户收到的冰候选人。它添加收到的ice候选并将它们添加到对等连接中。

获取随机用户
该函数从在线用户列表中随机选择一个用户,不包括当前用户。如果列表为空,则会抛出错误。这确保了聊天的公平随机配对。

发送比赛
此函数向服务器发送选定随机用户的连接请求。它构造一个 WebSocket 消息,通知服务器连接的意图。

检查匹配
此函数验证服务器的响应是否确认成功匹配。它检查其他人选择了该用户。它检查该用户是否选择了其他用户。它检查calling_clicked标志是否为true(重要的是其他用户也单击了呼叫)。

如果满足所有条件,则返回true;否则,返回 false。此步骤可确保在继续之前正确验证连接。

了解匹配过程的示例

How to Build a Random Video Chat Web app withWebrtc ,Websocket and Django.
双方都会发送和接收,先接收的一方被占领

Webrtc连接流程

对等 1 和对等 2
为了建立连接,两个对等点(对等点 1 和对等点 2)扮演不同的角色:

Peer 1:负责创建报价并接收答案。
对等 2:处理报价、生成答案并将其发回。
连接过程
以下是匹配后连接过程的展开方式:

1 正在初始化对等点 1:
Peer 1 在两个客户端上创建(例如客户端 1 和客户端 2)。
Peer 1 附加了两个关键事件:
OnTrackFunc:管理来自其他对等点的传入音频/视频流。
OnIceCandidateFunc:每当从 STUN 服务器收到新候选时,将 ICE 候选发送到服务器。

2 创建并发送报价:
Peer 1 生成一个报价,该报价被设置为其 localDescription。
此优惠由两个客户端发送给匹配的用户(通过信令服务器)。
3 与同行 2 处理报价:

收到报价后,双方都会创建 Peer 2。
与 Peer 1 类似,Peer 2 通过 OnTrackFunc 和 OnIceCandidateFunc 事件进行初始化。
收到的报价被设置为 Peer 2 的远程描述。

4 生成并发送答案:
Peer 2 生成一个答案,该答案被设置为其 localDescription。
这个答案由双方发送回另一个客户端(通过服务器)。

5 完成连接:
一旦收到答案,它就会被设置为对等点 1 的远程描述。
两个客户端现在都拥有建立直接连接所需的信息。

How to Build a Random Video Chat Web app withWebrtc ,Websocket and Django.
双方都会发送和接收

6 处理 ICE 候选人:
当 ICE 候选者交换时,OnIceCandidateFunc 被触发。
使用handle_ice函数处理收到的ICE候选者,该函数根据连接设置将它们添加到适当的对等点(对等点1或对等点2)。

7 设置媒体流:
当接收到媒体轨道(音频/视频)时,会触发 OnTrackFunc 事件。
这可确保远程视频和音频流在两个客户端上显示。

How to Build a Random Video Chat Web app withWebrtc ,Websocket and Django.
双方都会发送和接收

由于用户选择的随机性和处理延迟,连接过程不会在双方同时发生。首先完成设置的客户端将成为“调用者”,而另一个则充当“接收者”。

WebRTC 连接成功建立后,双方用户都可以享受无缝的视频聊天体验。

结束通话

正确结束 WebRTC 调用对于避免未来连接期间出现问题至关重要,例如资源泄漏或重新连接时出现错误。以下是正确处理呼叫终止的详细指南:

1 删除 ICE 候选者:
ICE 候选人用于在同行之间建立联系。
在结束通话之前,请清除所有存储的 ICE 候选项,以确保它们不会干扰将来的连接。

2 通知其他客户:
通知另一位客户通话即将结束。
这可以通过信令服务器来完成,以优雅地终止双方的连接。

3 从对等连接中删除曲目:
删除与对等连接关联的所有媒体轨道(音频/视频)以释放资源。
这可以防止通话结束后继续播放媒体流。

4 重置通话状态:
将变量 Calling_clicked 设置为 null(或应用程序中的等效值)。
这可确保应用程序知道没有正在进行的活动呼叫。
将 Peer 1 和 Peer 2 重置为空。
这会释放为对等连接分配的内存,并避免意外重用旧对象。
将remoteStream 设置为null。
这可确保从应用程序界面清除远程音频/视频流。

How to Build a Random Video Chat Web app withWebrtc ,Websocket and Django.
只有一侧,因为只有一个客户端发起结束

总结

构建随机视频聊天应用程序与使用它一样令人兴奋!这个过程伴随着相当多的挑战和学习机会,但看到你的创作变成现实的满足感是真正值得的。

作为一名计算机科学专业三年级学生,我将我的热情和好奇心倾注到了这个项目中。虽然我已尽最大努力确保一切顺利进行,但总有改进的空间。如果您发现任何缺陷或有建议让这个项目变得更好,请随时与我联系 - 我很乐意学习您的见解!

所以,拿起你的键盘,深入研究代码,谁知道呢 - 你可能会创造在线交流中的下一个重大事件。

编码愉快! ?

以上是如何使用 Webrtc、Websocket 和 Django 构建随机视频聊天 Web 应用程序。的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何使用Python查找文本文件的ZIPF分布如何使用Python查找文本文件的ZIPF分布Mar 05, 2025 am 09:58 AM

本教程演示如何使用Python处理Zipf定律这一统计概念,并展示Python在处理该定律时读取和排序大型文本文件的效率。 您可能想知道Zipf分布这个术语是什么意思。要理解这个术语,我们首先需要定义Zipf定律。别担心,我会尽量简化说明。 Zipf定律 Zipf定律简单来说就是:在一个大型自然语言语料库中,最频繁出现的词的出现频率大约是第二频繁词的两倍,是第三频繁词的三倍,是第四频繁词的四倍,以此类推。 让我们来看一个例子。如果您查看美国英语的Brown语料库,您会注意到最频繁出现的词是“th

如何在Python中下载文件如何在Python中下载文件Mar 01, 2025 am 10:03 AM

Python 提供多种从互联网下载文件的方法,可以使用 urllib 包或 requests 库通过 HTTP 进行下载。本教程将介绍如何使用这些库通过 Python 从 URL 下载文件。 requests 库 requests 是 Python 中最流行的库之一。它允许发送 HTTP/1.1 请求,无需手动将查询字符串添加到 URL 或对 POST 数据进行表单编码。 requests 库可以执行许多功能,包括: 添加表单数据 添加多部分文件 访问 Python 的响应数据 发出请求 首

我如何使用美丽的汤来解析HTML?我如何使用美丽的汤来解析HTML?Mar 10, 2025 pm 06:54 PM

本文解释了如何使用美丽的汤库来解析html。 它详细介绍了常见方法,例如find(),find_all(),select()和get_text(),以用于数据提取,处理不同的HTML结构和错误以及替代方案(SEL)

python中的图像过滤python中的图像过滤Mar 03, 2025 am 09:44 AM

处理嘈杂的图像是一个常见的问题,尤其是手机或低分辨率摄像头照片。 本教程使用OpenCV探索Python中的图像过滤技术来解决此问题。 图像过滤:功能强大的工具 图像过滤器

如何使用Python使用PDF文档如何使用Python使用PDF文档Mar 02, 2025 am 09:54 AM

PDF 文件因其跨平台兼容性而广受欢迎,内容和布局在不同操作系统、阅读设备和软件上保持一致。然而,与 Python 处理纯文本文件不同,PDF 文件是二进制文件,结构更复杂,包含字体、颜色和图像等元素。 幸运的是,借助 Python 的外部模块,处理 PDF 文件并非难事。本文将使用 PyPDF2 模块演示如何打开 PDF 文件、打印页面和提取文本。关于 PDF 文件的创建和编辑,请参考我的另一篇教程。 准备工作 核心在于使用外部模块 PyPDF2。首先,使用 pip 安装它: pip 是 P

如何在django应用程序中使用redis缓存如何在django应用程序中使用redis缓存Mar 02, 2025 am 10:10 AM

本教程演示了如何利用Redis缓存以提高Python应用程序的性能,特别是在Django框架内。 我们将介绍REDIS安装,Django配置和性能比较,以突出显示BENE

引入自然语言工具包(NLTK)引入自然语言工具包(NLTK)Mar 01, 2025 am 10:05 AM

自然语言处理(NLP)是人类语言的自动或半自动处理。 NLP与语言学密切相关,并与认知科学,心理学,生理学和数学的研究有联系。在计算机科学

如何使用TensorFlow或Pytorch进行深度学习?如何使用TensorFlow或Pytorch进行深度学习?Mar 10, 2025 pm 06:52 PM

本文比较了Tensorflow和Pytorch的深度学习。 它详细介绍了所涉及的步骤:数据准备,模型构建,培训,评估和部署。 框架之间的关键差异,特别是关于计算刻度的

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具