远程助手

它是一个1对1的提供远程协助的一个解决方案,具有一下特点:
1)实时远程桌面
2)实时语音交互
3)实时远程控制

发展历程

站在WebRTC的肩膀上

WebRTC是由W3C,IETF等组织定义的一套实时音视频通信标准和技术规范。也是google的一个开源项目,提供了实时音视频通信的核心技术,包括音视频采集,编解码,网络传输,显示等,支持跨平台提供了多个平台的版本,有很多极具价值的技术,解决了很多实际问题。基于这些,构建了我们的产品和服务。

主要浏览器对webrtc的支持情况和market share

WebRTC优缺点

SFU&MCU

从理论到实践,从Demo到产品

1.服务框架
2.端框架Android,Browser
3.挑战
4.质量保证
5.运维

1.服务框架

webserver:账号服务器,房间服务器,后台监控服务
信令服务器:信令通道采用websocket,用来交换sdp/ice options
房间服务器,信令服务器采用go语言实现,基于beego构建,它简化了数据库操作,同源策略等的处理
STUN/Turn服务器:coturn + TURN RESET API + bandwidth monitor
Nginx:load balance
昂贵的backbone
1对1不需要SFU/MCU
资源限制,优化手段有限

2.端框架Android,Browser

android端使用的java api,Browser端使用javascript api
RoomManager:与房间服务器通信,管理房间信息等
Websocket:信令通道,与信令服务器通信的,主要交换SDP/ICE options,在peerconnection建立之前可以用于传递一些辅助信息(夹带私货)
EventManager:按键,屏幕触控,鼠标等信息的获取,坐标转换,封装,以及注入等管理,事件通过datachannel传输
PeerConnection:webrtc的入口,负责p2p连接的建立,成功后,video channel, voice channel, data channel可用
AudioRecord/AudioTrack:android平台音频的输入和输出
MediaProjection+virtualdisplay:屏幕数据的抓取

3.挑战

3.1.实时音视频通信的调优,端到端的优化
3.2.webrtc代码的坑
3.3.客户端的适配

3.1.实时音视频通信的调优,端到端的优化

什么是好的实时音视频通信?主观上
1)视频,画面清晰正确,延迟低,无卡顿,带宽占用低
2)音频,声音清晰正确,无丢失,无噪音,无回声,延迟低,无卡顿,带宽占用低
主观上,音视频的评价标准很相似,但是涉及到的技术手段有共同点也有不同的地方,要分开来看

影响实时音视频质量的因素:
1)码率
视频,受编码压缩率,I帧频率,分辨率,帧率,编码码率等影响,编码码率影响QP
音频,受编码压缩率,采样率和位宽的影响,采样率和位宽会影响音质
2)编码算法
3)丢包,一般发生在网络很差的情况下,会采用丢包重传做补偿,音频对丢包更敏感
4)抖动,丢包重传会造成抖动问题,引入了jitter buffer解决这个问题
5)带宽,实际可用带宽取决于网络拥塞情况
6)延时,带宽一定的情况下,高码率会带来高延时,丢包重传也会带来延时,编码时使用B帧也会引入延时,jitter buffer设置不合理同样引入延时
7)回声消除,AEC
8)自动增益,AGC
9)噪音抑制,NS

解决这个问题,需要一套组合拳

设置最大上行带宽:
1)合理利用上行带宽
2)移动流量可控
3)转发服务器流量可控

H264 vs VP8:
1)在编码压缩率和编码质量上H264均优于VP8
2)色彩复杂度高界面VP8发生了失真
3)支持VP9,H265的平台较少

Video engine初始设置:
1)Codec
2)设置合适的I帧频率
(1).太大,码率变大,带宽负担增加
(2).太小,参考帧离的太远容易出现花屏且不能很快恢复
3)设置最佳分辨率,兼顾清晰度和带宽使用,450x800
4)编码使用Baseline profile避免B帧
5)设置帧率为15fps
6)调整jitter buffer
7)指定对应分辨率最佳编码码率/QP

H264各分辨率对应编码码率:

拥塞控制GCC:

1)带宽利用上不去?check delay based bitrate bps
2)设置最大编码码率
(1).降低不必要的带宽流消耗
(2).码率达到一定值后,继续增加作用不明显
3)设置最小码率,保证用户体验

too low bitrate, mess

远程助手用户场景下视频特点:
一动:用户在操作,滑动桌面或列表,在寻找目标
一不动:用户基本找到目标,不需要或很少需要滑动,画面变化很慢,主要是讲解观察
针对这两个特点引入了两个技术qulaity scaler和动态帧率,来根据实际需求平衡带宽占用

Quality scaler:

1)Quality scaler—scaled resolution—>Encoder
2)丢帧率高于阀值30%,降低分辨率,说明带宽紧张
3)隐含意思,丢帧率低于阀值,说明带宽还可以
4)QP高于高阀值37(h264),降低分辨率
5)QP低于低阀值24(h264),升高分辨率
6)隐含意思,QP介于高QP和低QP之间时,分辨率保持不变
7)隐含意思,QP升高是由于编码需要,比如运动画面,QP降低也是由于编码需要,比如静态画面
8)增强:
(1).设置分辨率scale上限
(2).设置分辨率scale下限
(3).平滑的scale梯度
带宽低时,继续降低带宽使用,带宽还可以时,保证运动画面的流畅度,保证静态画面的清晰度

动态帧率:

1)屏幕刷新率从1~60fps波动
2)0 < frame rate <15fps
3)界面变化快,刷新率高时,流畅度优先,增加帧率提升流畅度体验,带宽占比增大
4)界面变化慢,刷新率低时,清晰度优先,降低帧率,释放带宽占比

opus,高音质,低延迟:

1)6 kb /秒到510 kb / s的比特率
2)采样率从8 kHz(窄带)到48 kHz(全频)
3)帧大小从2.5毫秒到60毫秒
4)支持恒定比特率(CBR)和可变比特率(VBR)
5)从窄带到全频段的音频带宽
6)支持语音和音乐稳定性,内存使用,功耗等
7)支持单声道和立体声
8)可动态调节比特率,音频带宽和帧大小
9)良好的鲁棒性丢失率和数据包丢失隐藏(PLC)

采用16k采样率,保证音质,降低带宽使用:
1)原来采用48k或44.1k,android音频框架mix输出的采样率
2)low latency audio sample rate 真的low latency吗?
3)经测试,延时不在重新采样,在于码率,尤其是在低带宽的情况下
4)应用场景主要是通话交流,人声频率100hz~10kHz,人耳20hz~20khz

48khz vs 16khz
人声频率没有损失

回声消除:
1)回声是如何产生的

2)回声造成的声音问题

自动增益:
1)手机通话的正确姿势?

2)距离产生的不是美,是听不清你说啥

3.2.webrtc代码的坑

3.3.客户端的适配

Android
1)不同平台硬件编解码器
MTK,Samsung,Hisilicon,Qualcom
2)低端平台带来的性能问题
3)分辨率720p~2k
4)特殊场景动画需求导致的屏幕刷新不均匀引发的卡顿问题(视觉上)

浏览器:
1)用adapter.js不同浏览器版本webrtc接口实现不一样
2)getUserMedia权限问题
3)同源策略
4)https和http共存

4.质量保证

4.1.开发测试环境,线上环境,隔离
4.2.服务端压力测试,jmeter
4.3.实时音视频通信评估标准和实验环境
4.4.端测试用例
4.5场测,跨地区,跨运营商
4.6Android APP质量体系

4.3.实时音视频通信评估标准和实验环境

主观客观相结合的方法,制定了一套标准文档和配套方法:

实时音视频硬件实验环境的搭建是非常昂贵的,利用现有的一切资源
网损模拟,facebook ATC:

视频延时测量,双向延时:
1)60fps 录屏
2)ms=(n-m)/frame_rate*1000
屏幕快照 2018-08-09 下午2.57.36

视频延时测量,单向延时:
1)高速摄像机
2)精确到毫秒秒表
3)ms=00:01:19:155-00:01:18:938

音频延时测量:
音频半回路

其他测量方法:
1)视频平滑度,匀速自转的地球仪
2)帧率,帧间隔计算工具
3)video dump工具
4)audio dump工具

主要技术指标项:
横向和自身对比,纵向和竟品对比,客观评价优化效果

5.运维

5.1.日志系统

1).优化log系统
2).统一各服务器log时间到毫秒

5.2.后台管理,大数据

1).连接成功率
2).p2p打通率
3).连接时长分布
4).通话的体验,综合延迟,丢包率,带宽,码率等情况

5.3.用户反馈

1).增加反馈入口
2).周统计

WebRTC走向展望

1)WebRTC已经定版,后续主要发力优化,应用场景支持
2)新一代编码技术H265,AVS2,AV1,VP9等得到广泛支持
3)视频,图像增强技术,降低带宽
4)AR
5)AI,对优化策略参数进行决策

webrtc在远程助手应用的实践相关推荐

  1. esxi安装ghost win7_针对Win7远程桌面的攻击实践(完美)

    CVE-2019-0708 (BlueKeep)刚出来的时候就写了针对Win7远程桌面的攻击实践,结尾的时候就猜测rapid7应该是已经掌握CVE-2019-0708 (BlueKeep)的explo ...

  2. 其它综合-使用Putty远程连接管理Linux实践

    使用Putty远程连接管理Linux实践 1.获取putty 获取 putty有很多方法,以下是我为大家提供的下载地址: 个人网盘地址,提取码:tz83 官方下载地址 解释: 官方下载的是 zip 压 ...

  3. 第3章 远程连接管理Linux实践

    第3章 远程连接管理Linux实践 3.1 远程连接Linux系统管理 3.1.1 为什么要远程连接Linux系统 在很多机构的培训教学中,教员通常会直接在虚拟机界面或者虚拟机里的图形界面讲解知识,这 ...

  4. Pycharm远程连接服务器(实践笔记)

    Pycharm远程连接服务器(实践笔记) 1. 远程连接服务器 2.配置服务器上的环境 记录一下过程,防止自己隔一段时间又忘了- &只有pycharm专业版才能远程连接 搞错了步骤1和2的顺序 ...

  5. 技术宝典 | 基于标准 WebRTC 低延迟直播的开源实践

    导读:2020年,新冠疫情爆发并席卷全球,对包括中国在内的全球经济造成了巨大的冲击,同时深刻影响了社会生活.在这一背景下,以消费市场上轰轰烈烈的直播电商为引爆点,直播行业再次掀起热潮.在中国企业数字化 ...

  6. 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践

    概述 本文来自腾讯视频云终端技术总监rexchang(常青)技术分享,内容分别介绍了微信小程序视音视频和WebRTC的技术特征.差异等,并针对两者的技术差异分享和总结了微信小程序视音视频和WebRTC ...

  7. 技术分享:微信小程序音视频与WebRTC互通的技术思路和实践

    1.概述 本文内容分别介绍了微信小程序视音视频和WebRTC的技术特征.差异等,并针对两者的技术差异分享和总结了微信小程序视音视频和WebRTC互通的实现思路以及技术方案.希望能带给你启发. 分别介绍 ...

  8. 爱奇艺iOS真机远程APP测试技术实践

    背景 iOS多机远程控制技术目前业界初步也有了一些方案,可以让APP在远程iPhone上面安装操作,对于设备兼容性测试是一款很好的服务,但是就体验上还是存在UI截屏延迟,设备掉线,稳定性不高的问题,尤 ...

  9. Java 开发者得力助手,深入实践 Spring Boot

    2019独角兽企业重金招聘Python工程师标准>>> 简单易用的 Spring Boot,无疑是 Java 开发初学者的指路明灯,更是资深 Java 开发者的得力助手.快速开发是研 ...

最新文章

  1. nginx 配置https 并解决重定向后https协议变成了http的问题
  2. vim-go开发环境Tagbar插件和NERTree插件安装
  3. 07 | 链表(下):如何轻松写出正确的链表代码?
  4. 【OpenGL】OpenGL视图和模型变换中各变换发生顺序的思考
  5. Python快速调用Teambition接口
  6. 一个搜集大量网页特效的网站
  7. python多环境管理_Python多版本环境管理之pyenv
  8. php curl exec ch,PHP curl_exec函数的用法实例详解
  9. 产品列表页分类筛选、排序的算法实现(PHP)
  10. node.js 创建服务器_Node.js HTTP软件包–创建HTTP服务器
  11. python vba 区别_VBA和Python该学哪个?
  12. Android实现文字和图片混排(文字环绕图片)效果
  13. 吉林大学超星MOOC学习通高级语言程序设计 C++ 实验00 熟悉开发环境(2021级)
  14. Java程序员不得不会的124道面试题(含答案)
  15. ong拼音汉字_拼音ong的正确发音
  16. matlab三维作图知识点
  17. matlab可以算二重积分么,matlab 二重积分函数
  18. JavaScript 身份证格式验证
  19. 爪哇国新游记之十八----泛型栈类
  20. 【前后端分离】前台多表联查

热门文章

  1. 判断url是否包含协议并添加协议(判断url是否包含协议,url添加协议头)
  2. wget下载速度太慢,mwget多线程下载工具
  3. kali安装pip3
  4. python制作各种条形图
  5. 18.linux日志收集数据到hdfs上面
  6. Flask wtforms
  7. bestcoder #66
  8. 【Android】完善Android学习(二:API 2.3.4)
  9. Commons net实现 FTP上传下载
  10. Perl IDE之Perl Express和Eclipse+EPIC+PadWalker