博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小程序实现双人视频通话流程
阅读量:5961 次
发布时间:2019-06-19

本文共 1606 字,大约阅读时间需要 5 分钟。

基于 <live-pusher> 和 <live-player> 所构建的双人视频通话功能。
技术指标
  • 通讯延迟:300ms - 800ms
  • 底层协议:基于 UDP 协议构建,并遵循 RTMP 标准对音视频数据进行切分和封装,支持丢包恢复和网络自适应。
  • 安全加密:每次连接都独立启用一对全新的非对称加密密钥,整个通讯过程无法监听和篡改。
  • 支持录制:如果需要可以在云端进行录制,适用于在线客服、金融开户等商用音视频解决方案,支持私有化部署。
内部原理
通讯的双方 各自创建一个 RTC 模式的 <live-pusher> 和 <live-player> ,然后URL 给对方。
 
流程
  • step1:首先A 跟业务服务器沟通,获取 push-url-A 和低延时的 play-url-A,服务器分配 URL 的方法参考 。
  • step2:A 创建一个 RTC 模式的 标签,指定 url 为 step1 中获得的 push-url-A,并通过 bindstatechange 属性绑定一个 javascript 函数(比如叫 onPushEvent)。
  • step3:A 这边需要一些时间启动推流,推流开始以后, <live-pusher>会通过 onPushEvent 的 PUSH_EVT_PUSH_BEGIN(1002)事件通知给 A, 此时 A 可以向 B 发起通话请求,请求中可以携带 play-url-A。
  • step4:B 需要等待 UI 界面上的确认,如果 B 确认接通,接下来要做的就是创建一个 RTC 模式的 <live-player> ,并指定 src 为 play-url-A。
  • step5:B 此时还要跟业务服务器沟通,获取 push-url-B 和低延时的 play-url-B,并创建一个 RTC 模式的   标签,指定 url 为 push-url-B,并通过 bindstatechange 属性绑定一个 javascript 函数(比如叫 onPushEvent)。
  • step6:B 此时需要一些时间启动推流,推流开始以后, <live-pusher> 会通过 onPushEvent 的 PUSH_EVT_PUSH_BEGIN(1002)事件通知给 B,之后 B 可以向 A 响应通话请求,请求中可以携带 play-url-B。
  • step7: A 此时要做的就是创建一个 RTC 模式的<live-player> ,并指定 src 为 play-url-B。
 
 
在真实的场景中,我们需要面对的业务逻辑远比简单的把 A 和 B 连接起来要复杂。
  • 房间管理
以金融开户和保险定损为例,如果 A 端使用的是小程序,那么真正的 B 端一般情况下会是企业的客服职员(通常都是一个人),所以这里就牵扯到要给用户分配客服的逻辑。同时,如果目前所有的客服都是忙碌的,那就需要有排队等待的逻辑。
 
所以,真实场景下的逻辑是这样的: 客服 MM 在进入工作岗位后即创建好一个属于自己的“房间”,这个房间有三种状态:BUSY(占线)、IDLE(空闲) 以及 CLOSE(关闭)。处于 BUSY 状态的房间表示对应的客服正在跟用户进行沟通, IDLE 表示可以分配给新进来的呼叫,CLOSE 则表示客服 MM 已经下班了。
  • 消息系统
在 A 和 B 之间搭建 IM 消息系统也是必不可少的,一方面,如果 A 和 B 中某一方网络发生异常,那么文本消息可以用极低的带宽维持最基本的消息通讯;另一方面,消息系统对于事件的传递要比音视频通道更加可靠。
 
现代实时音视频系统一般都有数据通道和信令通道两个传输通道,这样设计的原因是音视频通道并不适合用于传输信令,比如 B 端的 通知音视频数据没有了,可能原因是 A 已经挂断,但也有可能是 A 的网络出现了长时间的波动。而基于消息系统的“挂断事件”则不需要考虑这种不确定性问题。
 

转载地址:http://tbjax.baihongyu.com/

你可能感兴趣的文章
小蚂蚁学习数据结构(14)——二叉树的创建
查看>>
【CXF】- Spring 整合 webservice CXF
查看>>
XDCTF成长记录
查看>>
registered the JDBC driver [com.mysql.jdbc.Driver]
查看>>
如何有效删除Redis中比较大的Hash Key
查看>>
Linux系统中的文本处理工具
查看>>
IDE---Python IDE之Eric5在window下的安装
查看>>
python---LineReceiver实现记录服务器
查看>>
Mybatis调用Oracle中的存储过程和function
查看>>
telnet :No route to host
查看>>
基本安装lnmp环境
查看>>
yum源资料汇总
查看>>
7、MTC与MTV,http请求介绍
查看>>
logstash消费阿里云kafka消息
查看>>
第四节课作业
查看>>
angularJS 限制字符串输出长度
查看>>
顺序表的实现---动态
查看>>
Apache POI (JAVA处理Office文档的类库)
查看>>
默认角色CONNECT 和RESOURCE角色具有哪些权限
查看>>
有关npm rum的3个简洁技巧
查看>>