搭了一个 WebRTC 语音聊天室,效果惊人 - V2EX
2022-1-17 19:18:42 Author: v2ex.com(查看原文) 阅读量:456 收藏

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

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

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

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

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

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

  • Room
    • Text chat, can sent text or emoji
    • Room permission setting, like public/private type setting
    • Public rooms discovery, like hot room list or filter rooms by type/tag
  • User
    • Robot user, like game robot who can play or facilitate game
    • User real-time collaboration, like whiteboard
  • Infra
    • Backend service cluster, auto scaling, load balancing, etc.
    • Security enhancement, like coturn TLS setup, end-to-end encryption, etc.

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

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

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

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

mywaiting

1

mywaiting      9 小时 57 分钟前

这货是不是双方建立连接后,就直接点对点通信了?不用通过服务器中转负载肯定低

cat9life

2

cat9life      9 小时 53 分钟前

这个牛 x 能做 ppt 演示吗

bmpidev2019

3

bmpidev2019      9 小时 51 分钟前

@mywaiting 服务器是 SFU 的,并且 coturn 也开启了 turn ,在糟糕的情况下,所有 peer 都需要服务器中转才行,所以也不能直接说全部就直连了

santom

6

santom      9 小时 45 分钟前

之前 RTC 做过一阵大直播,这个延迟怎么样?

tanhui2333

7

tanhui2333      9 小时 41 分钟前

以前做过基于 kurento 的,确实还行。不过不是音视频流媒体行业的,深度搞起来有点吃力。

keith1126

9

keith1126      9 小时 37 分钟前

> 不比 zoom 与微信差

前半句应该有点夸张了……只能说网络状况良好的情况下,怎么实现都差不多。

5sheep

10

5sheep      9 小时 27 分钟前

这个 WebRTC 多年前就已经有很成熟的开源应用了。 楼主再次从头开始,是啥想法呢? 练技术?

bmpidev2019

11

bmpidev2019      9 小时 26 分钟前 via iPhone   ❤️ 1

@keith1126 和沙特阿拉伯那边聊了一小时多,其中也有国内深圳、珠海、云南、陕西的人进来,我持续测试了一天,因为我们工作也在用 zoom (在家办公,一挂一整天),我对比在同样的网络环境下,感觉就是比 zoom 要好一些,当然环境的问题很复杂,但测试的感受就是这样的

lloovve

12

lloovve      9 小时 25 分钟前 via iPhone

一对一能理解点对点通信,多个人的房间怎么点对点?

bmpidev2019

13

bmpidev2019      9 小时 23 分钟前 via iPhone

@5sheep 通过一个产品去持续练技术,就当技术实验田吧,当然 webRTC 也一直在发展,不能说已经成熟到不变的地步了,还有其他技术可以玩,甚至可以在技术上找一些好的场景,比如在线会议已经很成熟了,那这个产品只能走极端,比如在语音中找一些玩法、场景,找需求点(比如语言学习等场景),这些都是一些可尝试的点,并不是重复造轮子

okakuyang

15

okakuyang      8 小时 56 分钟前

这个肯定都是全部流量转发的,就国内网络环境不可能穿透成功的。

bmpidev2019

16

bmpidev2019      8 小时 51 分钟前 via iPhone

@okakuyang 如果是全部中转了,那按目前的采样率数据还挺小的,实时在线 20 多人,服务器网络流量每秒才 30-40KB (上行与下行都差不多这个范围)

LiuJiang

17

LiuJiang      8 小时 48 分钟前

webRTC 在国内安卓机上有很大的兼容性问题

legendORld

18

legendORld      8 小时 21 分钟前

刚才和同事试了一下,效果还行,就是不知道长时间会不会发热

Zeonjl

19

Zeonjl      8 小时 7 分钟前 via iPhone

国内直连就是牛!

cweijan

20

cweijan      8 小时 4 分钟前

去年搭建开源平台 jitsimeet, 和你这个一样, 不过它支持视频, 但是安装太繁琐了, 你这个看起来很轻量

Borden

24

Borden      6 小时 13 分钟前

这种东西,技术问题都不是问题~

Funnyang

25

Funnyang      6 小时 11 分钟前 via iPhone

可以支持视频通话么,微信会发热

Akagi201

26

Akagi201      6 小时 7 分钟前

感谢分享, 有兴趣研究下 webrtc.rs 吗? 期待 lz 实验. 之前做这行, 现在不做了. 还是有兴趣在.

avastms

27

avastms      6 小时 4 分钟前

语音的话确实,毕竟以前像 erlang 这种,目标都是语音业务,恨不得一台机器管一个市

ferock

28

ferock      5 小时 32 分钟前 via Android

支持 docker 部署吗

XTTX

29

XTTX      5 小时 24 分钟前

国内和国内两点中专延迟高吗? 声网这种语音 api, 更大的价值还在让云服务器更靠近终端用户,实现稳定和低延迟。不过他们的收费也是高得离谱。

XTTX

30

XTTX      5 小时 16 分钟前

还有,如果要加入更完整的 IM 功能,我建议是扒一扒类似 mattermost 的开源前端, 类似 slack 的功能它都有, 不过就是要用到 react 和 redux.

XTTX

31

XTTX      5 小时 13 分钟前

后台支持 singaling 和中转两种模式吗?

XTTX

32

XTTX      5 小时 7 分钟前

国内的话,STUN 服务器怎么解决?

Biwood

33

Biwood      4 小时 55 分钟前

流量还是得转发吧,能做到 P2P 直连吗

bmpidev2019

34

bmpidev2019      3 小时 24 分钟前 via iPhone   ❤️ 1

@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

35

XTTX      3 小时 1 分钟前

@bmpidev2019 #34 语音的话可以参考一下声网,即构这种实时语音的 sdk 提供商。 收费帮他们搭建服务,或者提供便宜的计时收费的语音包

darkengine

38

darkengine      2 小时 37 分钟前

https://free4.chat/StoneX

有人来聊吗

HXM

39

HXM      2 小时 2 分钟前

和在 LA 的同学试了一下,效果确实不错,好奇 SFU 服务器搭建在哪里?

另外要是支持语音降噪之类的功能就更好了 现在可以明显听到对方敲键盘的声音

Chism

40

Chism      1 小时 41 分钟前

直接搭建一个全球陌生人随机视频可行?

bmpidev2019

41

bmpidev2019      1 小时 11 分钟前 via iPhone

@qq316107934 ipv6 应该不支持吧,不知道底层的 pion 是否支持
@HXM 服务器在新加坡,降噪得靠耳机和麦了,浏览器做降噪的方案不知道有没有
@Chism 一对一聊天可以用这种模式,类似于游戏里组队 pk😂


文章来源: https://v2ex.com/t/828646#reply42
如有侵权请联系:admin#unsafe.sh