音视频

Webrtc是目前主流的音视频解决方案,它提供了媒体能力,信令需要另外来扩展。webrtc官方提供的demo使用起来非常麻烦,我们基于野火IM的通信能力,构建了一套信令系统,非常方便的使用。我们提供的的音视频有两种模式,免费版使用P2P模式,可以支持4路视频通话,客户可以免费使用,但不提供源码;音视频高级版支持能多路表现更稳定。

0.0.1. 野火音视频的组成部分

野火音视频系统有如下几部分组成。

  1. 野火IM,作为信令传输通道,负责把信令在通话两端传递。与谷歌方案中的Signailing Server作用稍有不同,野火IM服务只作为透传信令到客户端,客户端SDK实现所有逻辑。
  2. EingineKit,封装了WebRTC信令,做成了一个简单易用的音视频库,用户只需要startCall,endCall来使用。免费版已经集成到Android/iOS Demo应用中了,高级版需要替换这个SDK。UI部分是开源的同时兼容这两个SDK。
  3. WebRTC库,直接使用谷歌提供编译好的软件包,android的版本是1.0.30039,iOS的版本是1.0.26195,PC使用的是Chromium v69.0.3497.128。
  4. Turn服务,需要部署开源turn服务器,不需要另外部署服务器。不需要另外搭建STUN服务,因为Turn服务自带STUN服务的功能。服务与其它任何服务都没有依赖,可以单独部署,需开放3478端口(TCP和UDP都需要开放)和所需要的UDP端口(默认需要开放所有UDP端口,也可以配置turn服务设定UDP端口范围)。音视频高级版不需要Turn服务。
  5. 媒体服务,仅音视频高级版需要。免费版不需要。

0.0.2. 使用方法

  1. 确保野火IM功能正常,确保通话双方能够收发消息

  2. 部署Turn服务器(音视频高级版不需要Turn服务,可以直接跳到第三步),建议部署coTurn,部署方法请使用百度查询。部署完毕后,使用这个链接检查turn服务是否部署成功。注意一定要是turn服务,不能是stun服务,一定要出现下图中红线标注的type图片

    当Type为"relay"且后面的地址为您的公网IP时,表明turn服务部署成功,否则为失败。

  3. 修改客户端配置 在客户端的config文件中,修改地址为您部署的turn服务器地址。如果是音视频高级版,可以删除掉对应内容。

    NSString *ICE_ADDRESS = @"turn:turn.liyufan.win:3478";
    NSString *ICE_USERNAME = @"wfchat";
    NSString *ICE_PASSWORD = @"wfchat";
    

    注意如果客户分属多区域,可以部署多个turn服务器来提高用户体验。音视频添加turn服务信息的接口可以调用多次,每次增加一个turn服务器。

  4. 替换音视频库 如果是高级版音视频,需要替换EngineKit库,替换方法在随SDK发布的说明上,免费版请忽略。

  5. 启动媒体服务。 如果是高级版音视频,需要启动媒体服务,启动方法在媒体服务发布的说明上,免费版不需要此服务。

0.0.3. 各个版本的对比

功能 免费版 高级版
实现方式 Mesh SFU
媒体服务 不需要 需要
媒体流是否经过服务器 部分 全部
流量带宽要求
同时支持视频路数 4 9
同时支持音频路数 9 20
录制 不支持 支持
价格 便宜 稍贵
是否依赖Turn服务
是否部署媒体服务
对IM服务依赖 社区版或专业版 专业版
是否支持会议

更多详细内容,请参考野火音视频简介

0.0.4. 各个版本见的互通性说明

  1. 野火IM官方发布的可执行文件,包含Android、iOS、PC和线上的web端,所使用的都是高级版音视频。
  2. Android、iOS端源码里面包含的是免费版音视频库。如果购买高级版需要野火发布高级版的库替换打包。
  3. PC、Web端项目中同时包含免费版和高级版音视频库,默认使用的是免费版。如果购买高级版需要自主替换。
  4. 高级版和免费版之间不互通。

0.0.5. 上线一定要自己部署Turn服务

野火IM提供了体验用的环境,环境配置为1C1G5M,仅能够供应体验使用,我们会不定期的更新密码,免费版上线商用时一定要切换到自己的Turn服务器。

0.0.6. 其它

  1. turn服务可以部署多个,在客户端多次调用addIceServer即可。当用户在全球多个区域分布式,可以在不同区域部署多个turn服务,提高体验。
  2. turn服务和媒体服务可以购买流量计费云服务器,流量计费的带宽足够大,而且按量计费价格也会很便宜。

0.0.7. 如何安装Turn服务

Turn服务不是野火IM的内容,就像mysql,redis之类的基础组件,需要客户自行安装的,这里也提供一个安装说明,仅供大家参考。点如何安装Turn服务了解详情。

0.0.8. 问题排查

  1. 部署TURN服务一定要用上文中的链接检查,得到的结果一定要有relay类型的候选,且地址为您的公网地址。另外不能有报错信息。
  2. 开通TURN服务的TCP3478端口,可以在浏览器中输入http://turn服务器地址:3478,正确情况下应该返回部分信息。
  3. 开通TURN使用的UDP端口,默认是所有UDP端口,也可以在turn服务配置中限定端口范围和3478端口(除了配置文件内指定的端口范围外,还需要开通3478的UDP端口),每一路视频通话至少需要4个端口,可以配置您期望的最高通话路数*4个端口。点这里检查UDP端口连通性
  4. 修改客户端的配置,注意格式,turn:域名或ip:3478,不要忘记头部的turn字段。
  5. 如果客户在内网,一定要确认内网防火墙是否开通了对turn服务的3478TCP端口及UDP端口的访问权限。
  6. 如果是高级版,注意IM是否使用的是绑定的域名。
  7. 如果是高级版,注意SDK是否替换正确。
  8. 如果是高级版,检查媒体服务是否运行中。
  9. 如果是高级版,请按照音视频高级版服务项目上的说明排查音视频服务是否正确。
  10. 如果wifi下能够通话,4G/5G下不行,那肯定就是turn服务的问题。
  11. 检查服务器带宽是否足够,要用iftop命令查询实时带宽状态,不用用云服务商提供的监控(那个是几分钟聚合的,不能反映瞬时的状态)。建议使用按流量计费的服务。

    如果是高级版,请忽略掉turn的检查。

0.0.9. 针对浏览器问题排查

  1. 完成上一步的前置问题排查
  2. 测试浏览器是否支持webrtc,测试地址)
  3. 默认只有通过localhost或https访问网页时,才可以使用webrtc功能。如果需要在http访问网页时,测试webrtc功能,请参考这儿

0.0.10. 带宽计算

多人音视频SDK是试用p2p模式的,会先尝试打洞直连,如果打洞失败则会通过turn服务中转。一般情况下有一方是流量时肯定无法打洞成功;双方都是wifi的情况下也有可能打洞失败(跟网络有关)。我们的经验是大概有50%是无法打洞直连的。通话的流量跟路数成正比,1对1通话就是2路,N人通话就是N*(N+1)路通话,每一路视频通话的流量上下行各100KB/s。语音通话每一路的流量在3KB/s左右,所以相比视频可以忽略不计。

所以,如果是100个1对1通话,那么有50个1对1通话是走turn服务,50个1对1通话是100路,流量为100*100KB/s = 10MB/s = 80mbps。turn服务可以部署多台,客户端配置多个turn服务地址即可。这个是估计的情况,上线后还要根据实际情况来调整。

以上是多人音视频的带宽估计,高级版全部走服务器中转,通话质量更高,但1对1通话没有直连,流量消耗更高,但在多人视频通话中有大小流,消耗带宽则相比Mesh架构显著降低,具体信息在高级版服务上有说明。

2018 © wildfirechat.net 京ICP备18060403号-1 all right reserved,powered by Gitbook该文件修订时间: 2022-11-10 15:27:42

results matching ""

    No results matching ""