音视频
Webrtc是目前主流的音视频解决方案,它提供了媒体能力,信令需要另外来扩展。webrtc官方提供的demo使用起来非常麻烦,我们基于野火IM的通信能力,构建了一套信令系统,非常方便的使用。我们提供的的音视频有三种模式,免费版只支持1对1通话,客户可以免费使用,但不提供源码;多人版音视频可以支持多人进行通话;音视频高级版支持能多路表现更稳定。
0.0.1. 野火音视频的组成部分
野火音视频系统有如下几部分组成。
- 野火IM,作为信令传输通道,负责把信令在通话两端传递。与谷歌方案中的
Signailing Server
作用稍有不同,野火IM服务只作为透传信令到客户端,客户端SDK实现所有逻辑。 - EingineKit,封装了WebRTC信令,做成了一个简单易用的音视频库,用户只需要startCall,endCall来使用。免费版已经集成到Android/iOS Demo应用中了,多人版和高级版需要替换这个SDK。UI部分是开源的同时兼容这三个SDK。
- WebRTC库,直接使用谷歌提供编译好的软件包,android的版本是1.0.30039,iOS的版本是1.0.26195,PC使用的是Chromium v69.0.3497.128。
- Turn服务,需要部署开源turn服务器,不需要另外部署服务器。不需要另外搭建STUN服务,因为Turn服务自带STUN服务的功能。服务与其它任何服务都没有依赖,可以单独部署,需开放3478端口(TCP和UDP都需要开放)和所需要的UDP端口(默认需要开放所有UDP端口,也可以配置turn服务设定UDP端口范围)。音视频高级版不需要Turn服务。
- 媒体服务,仅音视频高级版需要。免费版和多人版都不需要。
0.0.2. 使用方法
确保野火IM功能正常,确保通话双方能够收发消息
部署Turn服务器(音视频高级版不需要Turn服务,可以直接跳到第三步),建议部署coTurn,部署方法请使用百度查询。部署完毕后,使用这个链接检查turn服务是否部署成功。注意一定要是turn服务,不能是stun服务,一定要出现下图中红线标注的type。
当Type为"relay"且后面的地址为您的公网IP时,表明turn服务部署成功,否则为失败。
修改客户端配置 在客户端的config文件中,修改地址为您部署的turn服务器地址。如果是音视频高级版,可以删除掉对应内容。
NSString *ICE_ADDRESS = @"turn:turn.liyufan.win:3478"; NSString *ICE_USERNAME = @"wfchat"; NSString *ICE_PASSWORD = @"wfchat";
注意如果客户分属多区域,可以部署多个turn服务器来提高用户体验。音视频添加turn服务信息的接口可以调用多次,每次增加一个turn服务器。
替换音视频库 如果是多人版音视频或者高级版音视频,需要替换EngineKit库,替换方法在随SDK发布的说明上,免费版请忽略。
启动媒体服务。 如果是高级版音视频,需要启动媒体服务,启动方法在媒体服务发布的说明上,免费版和多人版不需要此服务。
0.0.3. 各个版本的对比
功能 | 免费版 | 多人版 | 高级版 |
---|---|---|---|
实现方式 | P2P | Mesh | SFU |
媒体服务 | 不需要 | 不需要 | 需要 |
媒体流是否经过服务器 | 部分 | 部分 | 全部 |
流量带宽要求 | 低 | 低 | 高 |
同时支持视频路数 | 1 | 4 | 9 |
同时支持音频路数 | 1 | 9 | 20 |
录制 | 不支持 | 不支持 | 支持 |
价格 | 免费 | 便宜 | 稍贵 |
是否以来Turn服务 | 是 | 是 | 否 |
对IM服务依赖 | 社区版或专业版 | 社区版或专业版 | 专业版 |
更多详细内容,请参考野火音视频简介。
0.0.4. 各个版本见的互通性说明
- 野火IM官方发布的可执行文件,包含Android、iOS、PC和线上的web端,所使用的是高级版多人音视频
- Android、iOS端源码里面包含的是免费版的单人音视频库
- PC、Web端源码里面同时包含多人版和高级版音视频库,默认使用的是多人版
- 免费版和多人版,单人通话时,可以互通
- 高级版和免费版之间不互通
- 高级版和多人版之间不互通
0.0.5. 上线一定要自己部署Turn服务
野火IM提供了体验用的环境,环境配置为1C1G1M,仅能够供应体验使用,单人版和多人版上线商用时一定要切换到自己的Turn服务器。
0.0.6. 其它
- 多人音视频授权绑定的是IM的域名,不是绑定的turn服务域名,所以可以使用任意turn服务器地址。
- turn服务可以部署多个,在客户端多次调用addIceServer即可。当用户在全球多个区域分布式,可以在不同区域部署多个turn服务,提高体验。
- turn服务和媒体服务可以购买流量计费云服务器,流量计费的带宽足够大,而且按量计费价格也会很便宜。
0.0.7. 如何安装Turn服务
Turn服务不是野火IM的内容,就像mysql,redis之类的基础组件,需要客户自行安装的,这里也提供一个安装说明,仅供大家参考。点如何安装Turn服务了解详情。
0.0.8. 问题排查
- 部署TURN服务一定要用上文中的链接检查,得到的结果一定要有
relay
类型的候选,且地址为您的公网地址。 - 开通TURN服务的TCP3478端口,可以在浏览器中输入
http://turn服务器地址:3478
,正确情况下应该返回部分信息。 - 开通TURN使用的UDP端口,默认是所有UDP端口,也可以在turn服务配置中限定端口范围和3478端口(除了配置文件内指定的端口范围外,还需要开通3478的UDP端口),每一路视频通话至少需要4个端口,可以配置您期望的最高通话路数*4个端口。点这里检查UDP端口连通性
- 修改客户端的配置,注意格式,
turn:域名或ip:3478
,不要忘记头部的turn
字段。 - 如果客户在内网,一定要确认内网防火墙是否开通了对turn服务的3478TCP端口及UDP端口的访问权限。
- 如果是多人音视频或高级版,注意IM是否使用的是绑定的域名。
- 如果是多人音视频或高级版,注意SDK是否替换正确。
- 如果是高级版,检查媒体服务是否运行中。
- 如果是高级版,请按照音视频高级版服务项目上的说明排查音视频服务是否正确。
- 如果wifi下能够通话,4G/5G下不行,那肯定就是turn服务的问题。
- 检查服务器带宽是否足够,要用
iftop
命令查询实时带宽状态,不用用云服务商提供的监控(那个是几分钟聚合的,不能反映瞬时的状态)。建议使用按流量计费的服务。如果是高级版,请忽略掉turn的检查。
针对浏览器问题排查
- 完成上一步的前置问题排查
- 测试浏览器是否支持webrtc,测试地址)
- 默认只有通过localhost或https访问网页时,才可以使用webrtc功能。如果需要在http访问网页时,测试webrtc功能,请参考这儿