搭建了一个基于 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 的优势吧。
1
mywaiting 2022-01-17 09:19:43 +08:00
这货是不是双方建立连接后,就直接点对点通信了?不用通过服务器中转负载肯定低
|
2
cat9life 2022-01-17 09:23:03 +08:00
这个牛 x 能做 ppt 演示吗
|
3
bmpidev2019 OP @mywaiting 服务器是 SFU 的,并且 coturn 也开启了 turn ,在糟糕的情况下,所有 peer 都需要服务器中转才行,所以也不能直接说全部就直连了
|
4
bmpidev2019 OP @cat9life 目前只有语音,你说的这种在线会议就可以,有很多开源的框架可以弄
|
5
sunwei0325 2022-01-17 09:29:47 +08:00
@cat9life https://meet.jit.si/ 这个可以共享屏幕
|
6
santom 2022-01-17 09:31:37 +08:00
之前 RTC 做过一阵大直播,这个延迟怎么样?
|
7
tanhui2333 2022-01-17 09:35:45 +08:00
以前做过基于 kurento 的,确实还行。不过不是音视频流媒体行业的,深度搞起来有点吃力。
|
8
cat9life 2022-01-17 09:38:44 +08:00
@sunwei0325 谢谢
|
9
keith1126 2022-01-17 09:39:11 +08:00
> 不比 zoom 与微信差
前半句应该有点夸张了……只能说网络状况良好的情况下,怎么实现都差不多。 |
10
5sheep 2022-01-17 09:48:48 +08:00
这个 WebRTC 多年前就已经有很成熟的开源应用了。 楼主再次从头开始,是啥想法呢? 练技术?
|
11
bmpidev2019 OP @keith1126 和沙特阿拉伯那边聊了一小时多,其中也有国内深圳、珠海、云南、陕西的人进来,我持续测试了一天,因为我们工作也在用 zoom (在家办公,一挂一整天),我对比在同样的网络环境下,感觉就是比 zoom 要好一些,当然环境的问题很复杂,但测试的感受就是这样的
|
12
lloovve 2022-01-17 09:51:18 +08:00 via iPhone
一对一能理解点对点通信,多个人的房间怎么点对点?
|
13
bmpidev2019 OP @5sheep 通过一个产品去持续练技术,就当技术实验田吧,当然 webRTC 也一直在发展,不能说已经成熟到不变的地步了,还有其他技术可以玩,甚至可以在技术上找一些好的场景,比如在线会议已经很成熟了,那这个产品只能走极端,比如在语音中找一些玩法、场景,找需求点(比如语言学习等场景),这些都是一些可尝试的点,并不是重复造轮子
|
14
bmpidev2019 OP @lloovve SFU 并不是用户与用户的连接,而是这种模式 https://excalidraw.com/#json=2AAmNFc0WMiDurA5ejiB4,Hjs5fMMQh5ollETmhfgWWw
|
15
okakuyang 2022-01-17 10:20:02 +08:00
这个肯定都是全部流量转发的,就国内网络环境不可能穿透成功的。
|
16
bmpidev2019 OP @okakuyang 如果是全部中转了,那按目前的采样率数据还挺小的,实时在线 20 多人,服务器网络流量每秒才 30-40KB (上行与下行都差不多这个范围)
|
17
LiuJiang 2022-01-17 10:28:30 +08:00
webRTC 在国内安卓机上有很大的兼容性问题
|
18
legendORld 2022-01-17 10:55:08 +08:00
刚才和同事试了一下,效果还行,就是不知道长时间会不会发热
|
19
Zeonjl 2022-01-17 11:08:50 +08:00 via iPhone
国内直连就是牛!
|
20
cweijan 2022-01-17 11:11:57 +08:00
去年搭建开源平台 jitsimeet, 和你这个一样, 不过它支持视频, 但是安装太繁琐了, 你这个看起来很轻量
|
21
FightPig 2022-01-17 11:14:20 +08:00
这个可以,正好学习下
|
22
bmpidev2019 OP @LiuJiang 安卓的新版本 chrome 应该还行
@legendORld 我 iPhone 聊了一整天,没怎么发热 @cweijan 这个安装花了我一整天时间,主要是有一些小坑,但 c++开发的那些库功能很齐全,搞起来可能很复杂,go 这个代码也挺简单的 |
23
LiuJiang 2022-01-17 11:41:57 +08:00
@bmpidev2019 国内大部分手机厂商默认的浏览器,都不是 Chrome
|
24
Borden 2022-01-17 13:02:48 +08:00
这种东西,技术问题都不是问题~
|
25
Funnyang 2022-01-17 13:05:32 +08:00 via iPhone
可以支持视频通话么,微信会发热
|
27
EPr2hh6LADQWqRVH 2022-01-17 13:12:37 +08:00
语音的话确实,毕竟以前像 erlang 这种,目标都是语音业务,恨不得一台机器管一个市
|
28
ferock 2022-01-17 13:43:48 +08:00 via Android
支持 docker 部署吗
|
29
XTTX 2022-01-17 13:52:42 +08:00
国内和国内两点中专延迟高吗? 声网这种语音 api, 更大的价值还在让云服务器更靠近终端用户,实现稳定和低延迟。不过他们的收费也是高得离谱。
|
30
XTTX 2022-01-17 14:00:46 +08:00
还有,如果要加入更完整的 IM 功能,我建议是扒一扒类似 mattermost 的开源前端, 类似 slack 的功能它都有, 不过就是要用到 react 和 redux.
|
31
XTTX 2022-01-17 14:03:35 +08:00
后台支持 singaling 和中转两种模式吗?
|
32
XTTX 2022-01-17 14:09:30 +08:00
国内的话,STUN 服务器怎么解决?
|
33
Biwood 2022-01-17 14:21:15 +08:00
流量还是得转发吧,能做到 P2P 直连吗
|
34
bmpidev2019 OP @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 连接数只和用户数成线性 |
35
XTTX 2022-01-17 16:14:57 +08:00
@bmpidev2019 #34 语音的话可以参考一下声网,即构这种实时语音的 sdk 提供商。 收费帮他们搭建服务,或者提供便宜的计时收费的语音包
|
36
qq316107934 2022-01-17 16:23:33 +08:00
支持 ipv6 吗,支持的话估计都不用中转
|
37
darkengine 2022-01-17 16:35:24 +08:00
哦吼,这个有意思
|
38
darkengine 2022-01-17 16:39:04 +08:00
https://free4.chat/StoneX
有人来聊吗 |
39
HXM 2022-01-17 17:14:07 +08:00
和在 LA 的同学试了一下,效果确实不错,好奇 SFU 服务器搭建在哪里?
另外要是支持语音降噪之类的功能就更好了 现在可以明显听到对方敲键盘的声音 |
40
Chism 2022-01-17 17:35:13 +08:00
直接搭建一个全球陌生人随机视频可行?
|
41
bmpidev2019 OP @qq316107934 ipv6 应该不支持吧,不知道底层的 pion 是否支持
@HXM 服务器在新加坡,降噪得靠耳机和麦了,浏览器做降噪的方案不知道有没有 @Chism 一对一聊天可以用这种模式,类似于游戏里组队 pk😂 |
42
ugpass 2022-01-17 18:33:29 +08:00
关注下~
|
43
04huang 2022-01-17 20:32:50 +08:00
能否出一个更加具体的搭建教程。。TLS/SSL 那部分不是太明白 [不太想用 CDN] ,后面倒是没啥问题。。
|
44
silerLee 2022-01-17 20:43:10 +08:00
简洁又好看. 很有意思的东西
|
45
over140 2022-01-17 21:26:36 +08:00 1
不错,这个 Mornin 也是我们团队和 Fox 团队一起弄的,欢迎大佬来 Mixin 搞开发~~~
|
46
bmpidev2019 OP @over140 大佬现身了,我只是用你们开源的搭建了这个网站,感谢你们的开源精神👍期望之后能给你们贡献代码😄
|
47
hanguofu 2022-01-17 23:51:22 +08:00 via Android
谢谢分享!期待加上 Room 的功能。
|
48
Bastionbee 2022-01-18 00:13:42 +08:00
刚刚试了一下,在 se2 上用 Safari 中打开,可以进行后台语言,发热量很小,延迟比微信低
|
49
mayli 2022-01-18 04:28:12 +08:00 via Android
我记得 webtrc 有个 demo 就是这个?
https://webrtc.github.io/samples/src/content/peerconnection/audio/ |
50
N032138 2022-01-18 09:00:40 +08:00
期待一个能使用的 docker 镜像
|
51
XTTX 2022-01-18 10:35:56 +08:00
terraform+ ansible + docker 可以做成商用版,付费自动帮忙部署。 只要语音成本低,应该有市场的。我以前了解过一些语音 sdk 商, 价格 1000 分钟, 4 到 7 块。 双向收费,3 人通讯要收两份钱。
|
52
bmpidev2019 OP @XTTX 没想到这都可以商业化,实际上这个技术挺成熟的,费用也没那么高,不知道为啥收费这么贵,我这服务器全部费用也才 5 美刀一个月,能支持 100 多个人实时通话应该没问题
|
53
bmpidev2019 OP @XTTX 一开始我就准备用 IaC 部署的,后来因为觉得没必要,就一台服务器手工部署半天搞定(熟练估计半小时搞定),所以只是记录了操作指南
|
54
XTTX 2022-01-18 12:33:41 +08:00
@bmpidev2019 #52 国内能用上实时语音的不是游戏就是社交类 app 或者 saas, 估计 sdk 厂商都觉得这类客户钱多,可以挤。
声网去年因为提供 Clubhouse 语音 sdk, 股价一度到了 100+美金。 他们需要到处部署节点,让节点离终端消费者更近。收费高,但是这样还是连续亏损。 他们收购环信,IM sdk 商。 我以前完全不懂技术的时候,觉得即时通讯+实时语音是多么高深的技术。 可能外行人也这么觉得,所以愿意高额支付 sdk. 我几年前想搞一个 IM 产品,所以对这些 sdk 商有一点了解。 他们的 IM 消息是按条计算的, 因为法律要求, 需要在服务器上存留一定时间。 除了按使用量收费,我觉得一次性付费部署还是有市场的,因为很多初创项目根本支付不了那么高昂的费用,也不需要极致的延迟。 ======================================== “从财报来看,该公司收入成本在增加。2021 年第三季度,声网收入成本为 1570 万美元,比去年同期的 1160 万美元增长了 35.5 %,主要原因是随着公司扩大业务规模,带宽和协同部署成本增加,以及服务器和网络设备的折旧。此外,2021 年第三季度,声网在 2021 年第三季度的运营费用为 5040 万美元,较上年同期的 2320 万美元增长 116.9%。” |
55
bmpidev2019 OP @XTTX 语音要存储的确会导致成本飙升,还有审核的问题,我这个站很简单不需要考虑这些,也没有存储,如果做 sdk 肯定有很多别的要求,但只是做实时语音通讯技术倒不复杂(底层还是挺复杂的,但技术已经发展了十多年来,现在比较成熟)
|
56
XTTX 2022-01-18 13:49:43 +08:00
@bmpidev2019 #55 语音不需要需要存储,文本的消息需要存一个星期吧。 隔行如隔山,我几年前还花了几千块“咨询”一个所谓的专家,问这块技术门槛高不高。他说高得很,建议用付费 sdk. 就没了。。。。
真是谢谢你。 等我把前端搞完,好好研究一下。 |
57
bmpidev2019 OP @XTTX 有没有研究过相关法律法规?服务器在国外的话需要遵循哪些条款?
|
58
lqzhgood 2022-01-18 14:18:52 +08:00
问问群聊的 p2p 怎么实现的? 单人的数据全部发给其他人么?
|
59
bmpidev2019 OP @lqzhgood 你查查 sfu
|
60
XTTX 2022-01-18 15:34:37 +08:00 1
@bmpidev2019 #57 国内公司需要 ICP 证,国外管不了。 香港也不用。 以前研究过, 有专门办理这种证的中介,几千到万元不等。 办公司才需要这些证。
|
61
steptodream 2022-01-19 08:57:46 +08:00
要是支持视频就好了,可以拿来改改给公司用。
|
62
WLW 2022-01-19 09:13:13 +08:00
@steptodream 同关注支持视频的会议室,有找到好用的,麻烦顺带通知一声,谢谢!~
|
63
bmpidev2019 OP |
64
WLW 2022-01-19 09:34:03 +08:00
@bmpidev2019 最初级的能视频对话就好,权限方面指定账号才能创建 room ,
不用分享桌面(或简单粗暴的摄像头拍另一个屏幕 ^.^ ) ,不用录屏(或同上,哈哈)。 这不是疫情吗,外贸客户不能过来,很多就需要视频对话验货了, 然后老外习惯用的平台,大部分被墙,或者注册账号麻烦。 方便的话,给点关键字,我先搜搜看 |
65
bmpidev2019 OP @WLW 随便找个视频会议在线的网站就可以
|
66
k9982874 2022-01-20 08:57:23 +08:00
没被盯上之前都很流畅,一但被盯上就是各种卡顿失联。
|
67
PrtScScrLk 2022-01-21 10:42:29 +08:00
老哥你这个服务器性能监控用的是什么,界面还挺好看的。
|
68
bmpidev2019 OP @PrtScScrLk servercat
|
69
dany813 2022-01-23 21:00:09 +08:00
很强啊
|
70
rapiz 2022-01-28 15:36:43 +08:00
我读了一下 SFU 的描述,这个意思不是所有流量都经服务器中转吗?只是编码和解码在客户端做。希望 OP 解惑
|
71
bmpidev2019 OP @rapiz 我的理解是相当于每个 peer 都和服务器建立 peer 连接了,服务器会对房间里的 peer 的音频 track 做转发。如果不用 sfu ,光是 p2p 这种,客户端每次需要发送 n-1 条音频给其他 peer ,但现在只需要发给服务器一次就可以了
|
72
RickyC 2022-02-07 14:39:10 +08:00
好像真的很惊人的样子。
|
73
wsseo 2022-02-07 15:48:18 +08:00
|
74
GitContract 2022-02-08 15:16:42 +08:00
lz 拉个群呗
|
75
nathanw 2022-02-19 09:13:43 +08:00
超过百人的会议,webrtc 貌似不如 zoom
|
76
liuxyon 2022-02-19 09:14:04 +08:00 via Android
上个支持 ipv6 的吧?另外如果网络本身延迟大,例如 200-400 多 ms 情况下 效果是怎么样的?
|
77
bmpidev2019 OP @nathanw 和架构还有服务器硬件有关系,比如专用的 MCU 这种硬件,目前 free4.chat 是 sfu 架构,服务器性能要强的话,单机支持百人规模会议也可以,但再多客户端可能扛不住(百人规模客户端是 1 路上行+99 路下行,客户端网络负载高,这种需要高性能的 MCU 这种硬件方案了),zoom 毕竟是企业级服务,有好的软件+硬件方案自然效果更好一些
|
78
bmpidev2019 OP @liuxyon 支持 ipv6 有啥用呢?目前底层用的库 pion 好像都不支持 ipv6 啊,网络延迟高这情况我还没测试
|
79
daimaosix 2022-03-09 16:32:15 +08:00
@bmpidev2019 大佬,我始终没看明白你仓库的配置文档怎么回事,按照你流程走的,看着也不复杂,跑起来访问 7000 端口显示:{"error":"not found"}
|
80
Ironboy 2022-09-24 19:47:36 +08:00
想要火起来的话,可以结合一些场景,像比如像 Clubhouse 做成的语音社交应用。或者像做成 Omeglel 国际网友语言学习平台。希望对 op 有帮助!
|
81
bmpidev2019 OP @Ironboy 只是学习搭建的,如果要正常运行挺耗费服务器资源的,成本不低,bug 语言学习这个场景挺不错的,我也正有这个计划,多加一些基于语言视频的一些场景化的功能。
|
82
7897894 2023-08-05 21:43:28 +08:00
大佬 有部署教程吗
|