音视频

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

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服务的功能。服务与其它任何服务都没有依赖,可以单独部署,需开放TCP3478端口和所需要的UDP端口(默认需要开放所有UDP端口,也可以配置turn服务设定UDP端口范围).
  5. 媒体服务,仅音视频高级版需要。免费版和多人版都不需要。

0.0.2. 使用方法

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

  2. 部署Turn服务器,建议部署coTurn,部署方法请使用百度查询。部署完毕后,使用这个链接检查turn服务是否部署成功。注意一定要是turn服务,不能是stun服务,一定要出现下图中红线标注的type图片

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

  1. 修改客户端配置 在客户端的config文件中,修改地址为您部署的turn服务器地址
NSString *IM_SERVER_HOST = @"192.168.1.101";

NSString *APP_SERVER_HOST = @"192.168.1.101";
int APP_SERVER_PORT = 8888;

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

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

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

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

0.0.3. 各个版本的对比

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

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

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

野火IM提供了体验用的环境,环境配置为1C1G1M,仅能够供应体验使用,上线商用时一定要切换到自己的Turn服务器。

0.0.5. 其它

  1. 多人音视频授权绑定的是IM的域名,不是绑定的turn服务域名,所以可以使用任意turn服务器地址。
  2. turn服务可以部署多个,在客户端多次调用addIceServer即可。当用户在全球多个区域分布式,可以在不同区域部署多个turn服务,提高体验。
  3. turn服务和媒体服务可以购买流量计费云服务器,流量计费的带宽足够大,而且按量计费价格也会很便宜。

0.0.6. 如何安装Turn服务

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

0.0.7. 问题排查

  1. 部署TURN服务一定要用上文中的链接检查,得到的结果一定要有relay类型的候选,且地址为您的公网地址。
  2. 一定要开通TCP3478端口及TURN使用的UDP端口,默认是所有UDP端口,也可以在turn服务配置中限定端口范围,但要保证至少一万个。
  3. 修改客户端的配置,注意格式,turn:域名或ip:3478,不要忘记头部的turn字段。
  4. 如果客户在内网,一定要确认内网防火墙是否开通了对turn服务的3478端口及UDP端口的访问权限。
  5. 如果是多人音视频或高级版,注意是否使用的是绑定的域名。
  6. 如果是多人音视频或高级版,注意SDK是否替换正确。
  7. 如果是高级版,检查媒体服务是否运行成功。
  8. 如果wifi下能够通话,4G/5G下不行,那肯定就是turn服务的问题。
  9. 检查服务器带宽是否足够,要用iftop命令查询实时带宽状态,不用用云服务商提供的监控(那个是几分钟聚合的,不能反映瞬时的状态)。建议使用按流量计费的服务。
针对浏览器问题排查
  1. 完成上一步的前置问题排查
  2. 测试浏览器是否支持webrtc,测试地址
  3. 默认只有通过localhost或https访问网页时,才可以使用webrtc功能。如果需要在http访问网页时,测试webrtc功能,请参考这儿
2018 © wildfirechat.cn 京ICP备18060403号-1 all right reserved,powered by Gitbook该文件修订时间: 2020-10-21 21:01:27

results matching ""

    No results matching ""