搭了一个 WebRTC 语音聊天室,效果惊人

2022-01-17 09:15:10 +08:00
 bmpidev2019

搭建了一个基于 WebRTC 技术的语音聊天室。测试了下和一个沙特阿拉伯人聊了一个小时,出奇的稳定,语音质量也很好,和国内的人聊也都很稳定,不比 zoom 与微信差。

比 App 的优势好在无需注册,分享房间链接,用浏览器打开即可聊天,用完一切就消失了,隐私性好。

测试地址: https://free4.chat/

开源仓库地址: https://github.com/madawei2699/free4chat

此网站是后端基于 kraken,它本身又基于 Go 语言中 pion 这个 WebRTC 的库,前端基于 Mornin,我把搭建的操作流程都放入了项目中的 infra 目录中,如果你要自己搭建的话,可以参考。

不过目前的功能只是我想要的一部分,所以后续可能会添加一些功能,目前想到的有这些:

如果你对 webRTC, peer-to-peer(P2P), real-time collaboration(CRDT), distributed system 或 robot design 感兴趣,欢迎关注或参与进来。

说效果惊人是,测试了一天,语音通话质量出奇的好,因为一个房间大多不到十个人,语音通话质量不仅稳定而且不比 zoom 、腾讯会议、微信等差(个人及测试的人感觉)。

另外一个有意思的是服务器,后端服务包括 coturn 都部署到一台 1 核、1G 内存的 AWS 服务器上。目前测试的效果是服务器毫无压力,甚至可以降级到 512M 内存的机器。

最终昨天大概有近一千人访问,创建了上千个房间,服务器始终负载没怎么变化,可能这就是 P2P 的优势吧。

18815 次点击
所在节点    分享创造
82 条回复
FightPig
2022-01-17 11:14:20 +08:00
这个可以,正好学习下
bmpidev2019
2022-01-17 11:35:39 +08:00
@LiuJiang 安卓的新版本 chrome 应该还行
@legendORld 我 iPhone 聊了一整天,没怎么发热
@cweijan 这个安装花了我一整天时间,主要是有一些小坑,但 c++开发的那些库功能很齐全,搞起来可能很复杂,go 这个代码也挺简单的
LiuJiang
2022-01-17 11:41:57 +08:00
@bmpidev2019 国内大部分手机厂商默认的浏览器,都不是 Chrome
Borden
2022-01-17 13:02:48 +08:00
这种东西,技术问题都不是问题~
Funnyang
2022-01-17 13:05:32 +08:00
可以支持视频通话么,微信会发热
Akagi201
2022-01-17 13:09:43 +08:00
感谢分享, 有兴趣研究下 webrtc.rs 吗? 期待 lz 实验. 之前做这行, 现在不做了. 还是有兴趣在.
EPr2hh6LADQWqRVH
2022-01-17 13:12:37 +08:00
语音的话确实,毕竟以前像 erlang 这种,目标都是语音业务,恨不得一台机器管一个市
ferock
2022-01-17 13:43:48 +08:00
支持 docker 部署吗
XTTX
2022-01-17 13:52:42 +08:00
国内和国内两点中专延迟高吗? 声网这种语音 api, 更大的价值还在让云服务器更靠近终端用户,实现稳定和低延迟。不过他们的收费也是高得离谱。
XTTX
2022-01-17 14:00:46 +08:00
还有,如果要加入更完整的 IM 功能,我建议是扒一扒类似 mattermost 的开源前端, 类似 slack 的功能它都有, 不过就是要用到 react 和 redux.
XTTX
2022-01-17 14:03:35 +08:00
后台支持 singaling 和中转两种模式吗?
XTTX
2022-01-17 14:09:30 +08:00
国内的话,STUN 服务器怎么解决?
Biwood
2022-01-17 14:21:15 +08:00
流量还是得转发吧,能做到 P2P 直连吗
bmpidev2019
2022-01-17 15:51:55 +08:00
@Funnyang 不支持,主要是语音,未来可能加文字,全功能的应用用 App 就好了,这个工具主要是简单
@Akagi201 rust 比 go 太复杂了,玩不了
@avastms erlang 的确更合适,但是还是语言和生态的问题,没选择
@ferock 不支持 docker ,主要是端口通信的问题,服务器端需要很大一个 udp 和 tcp 端口范围用来和客户端建立 p2p ,docker 有点麻烦
@XTTX 目前 server 实现了 turn ( coturn ),signal 的功能,也包括用户 token 生成(访问 turn )。turn 本身就可以做 stun 的功能,turn 就是中转( relay )。功能不想做的太复杂,主要是基于语音找一些场景应用。
@Biwood p2p 直连在用户多的时候客户端负载太大了(指数关系),服务器目前是 sfu 架构,客户端直连服务器,服务器中转,这样 p2p 连接数只和用户数成线性
XTTX
2022-01-17 16:14:57 +08:00
@bmpidev2019 #34 语音的话可以参考一下声网,即构这种实时语音的 sdk 提供商。 收费帮他们搭建服务,或者提供便宜的计时收费的语音包
qq316107934
2022-01-17 16:23:33 +08:00
支持 ipv6 吗,支持的话估计都不用中转
darkengine
2022-01-17 16:35:24 +08:00
哦吼,这个有意思
darkengine
2022-01-17 16:39:04 +08:00
https://free4.chat/StoneX

有人来聊吗
HXM
2022-01-17 17:14:07 +08:00
和在 LA 的同学试了一下,效果确实不错,好奇 SFU 服务器搭建在哪里?

另外要是支持语音降噪之类的功能就更好了 现在可以明显听到对方敲键盘的声音
Chism
2022-01-17 17:35:13 +08:00
直接搭建一个全球陌生人随机视频可行?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/828646

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX