本文转自:http://www.vccoo.com/v/ddf5f7

随着WebRTC标准的逐步推广,实时音视频通讯技术受到越来越多公司和技术人员的关注。对于交互式音视频应用而言,稳定、低延时、通话质量清晰可靠是其基本需求。在互联网环境下,音视频的通话质量与以下因素有关:一是编码码率、帧率和分辨率等编码因素;二是网络的接入类型和接入设备性能;三是对丢包、抖动、乱序以及网络拥塞的自适应调整能力,即QoS(Quality of Service,服务质量)。容联云通讯是国内最早且通讯能力最全的PaaS服务商,在推出音视频通话这一关键能力时,更加注重保证QoS(Quality of Service,服务质量),提升用户体验。本文主要介绍为保证QoS,在音视频传输和处理过程中采用的关键技术。

  交互式实时视频应用通常采用RTP协议进行音视频传输,RTP头部提供了诸如负载类型、时间戳、序列号和同步源等信息保证基本的音视频传输需求。但与TCP不同,RTP协议底层采用不可靠的UDP传输层协议,当网络过载或拥塞,无法实现对丢包、抖动、乱序以及网络拥塞的自适应调整。与音频相比,视频传输由于所占的带宽更大,更易受到网络环境变化的影响,因此以下将以视频为例分析Qos提升途径。

一、处理丢包

  对与实时视频来说,网络出现丢包将直接导致接收端画面出现马赛克和花屏。有多种策略可以解决,包括:基于NACK反馈的丢包重传,前向纠错FEC和参考帧选择RPS,这些策略通常与编解码端的容错技术(如:帧内刷新和错误隐藏)配合使用。

  基于NACK反馈的丢包重传方法:接收端循环检查接收缓冲,当发现丢包后使用RTCP NACK反馈报文将丢包信息反馈给发送端;发送端接收NACK反馈并解析后从发送缓存取出对应RTP包,并再次发送给接收端。该方法的缺点是增大了端到端的延迟,尤其在丢包大量发生时更为明显。

  前向纠错FEC:FEC机制是在发送端根据视频帧的重要性(参考帧或非参考帧)发送冗余的视频RTP包,在接收端如果检测到丢包则利用冗余包进行恢复,否则将冗余包丢弃。该方法的优点是视频无延迟,但发送冗余包占用了额外的带宽资源。

  更为可行的方案是是混合NACK/FEC模式,接收端根据帧大小和接收时延估计可用带宽,发送端根据可用带宽、丢包和RTT等反馈计算分配保护开销(protection overhead,包括FEC bitrate、NACK bitrate)和视频编码码率各占的比率。具体来说,FEC的保护级别(protection level)取决于往返时间RTT,当RTT较小时,丢包重传的延时不会导致明显的视频卡顿,因此可以相应减少FEC包的数量;当RTT较大时,时延对视频流畅度影响明显,因此要相应增加FEC包的数量。此外,可以使用多帧FEC和结合时域分层信息的FEC,二者都可以在减小保护开销的同时,提供更低的渲染抖动、更低的端到端延迟和更高的视频质量。

二、拥塞控制与自适应带宽调整

  拥塞控制技术的提出由来已久,TCP协议栈默认实现了对网络的拥塞控制以保证可靠传输。但在一些场合TCP并不适用,如:无线传输信道,高速长距传输网络、实时通讯应用等。为此,IETF RMCAT(RTP MediaCongestion Avoidance Techniques)工作组提出了一系列针对实时通讯应用的拥塞控制算法需求,包括:能有效控制端到端时延、能有效控制丢包、与其他应用的流共享链路带宽、能够与TCP长连接流公平竞争可用链路带宽等。Google、Cisco和Ericsson等公司相继提出了各自的适用于实时交互应用的拥塞控制算法,开源工程WebRTC的内部实现采用Google提出的算法:Google Congestion Control,简称GCC。

  GCC算法是一种混合了基于丢包和基于时延的方法,原理如下:

  • 发送端根据丢包调整目标带宽,具体来说:低丢包率(小于2%)时增加目标码率,高丢包率(大于10%)时减小目标码率,丢包率介于二者之间时目标码率保持不变;

  • 接收端根据时延估计最大带宽,由三个模块组成:排队时延估计、链路过载检测和最大带宽估计模块,三个模块间的关系为:当排队时延小于阈值(根据网络状态自适应调整)时,链路检测结果为underuse;当排队时延大于阈值时,链路检测结果为overuse;介于二者之间时,链路检测结果为normal;最大带宽估计模块的实现是一个表示当前链路状态(Increase、Hold、Decrease)的有限状态机,初始状态为Hold,根据链路检测结果进行状态迁移,并根据迁移后的链路状态和当前接收码率估计最大带宽remb。

  上述两个过程的结合之处:接收端计算的remb值通过RTCP REMB反馈到发送端,发送端最终的目标码率应不超过remb值。

三、关键帧请求

  关键帧也叫做即时刷新帧,简称IDR帧。对视频来说,IDR帧的解码无需参考之前的帧,因此在丢包C严重时可以通过发送关键帧请求进行画面的恢复。关键帧的请求方式分为三种:RTCP FIR反馈(Full intra frame request

)、RTCP PLI 反馈(Picture Loss Indictor)或SIP Info消息,具体使用哪种可通过协商确定。

四、其他

  除上述几种方法外,还可以通过视频预处理模块对视频内容进行分析,如:运动复杂程度、纹理复杂程度等,与拥塞控制模块一起进行自适应帧率和自适应分辨率的调整。

  综上所述,在互联网上为实时交互式音视频应用提供QoS保证仍是一项挑战,需要音视频编码器、传输、预处理等多模块的协作配合,或利用现有网络协议和设备的支持,才能提供给客户更多的选择和服务保证。

实时视频应用之QoS关键技术分析相关推荐

  1. 核心网upf作用_5G核心网关键技术分析

    5G核心网关键技术分析 陈莉 辽宁邮电规划设计院有限公司,辽宁 沈阳 110179 摘要:5G核心网相对于4G网络在架构.功能.业务能力提供方面有较大的革新,引入了新的关键技术如SBA.支持边缘计算. ...

  2. 服务机器人关键技术分析

    前言   回顾2014年刚进入服务机器人行业,我们公司接的第一个订单是10台送餐机器人,那时候我和搭档都是刚刚研究生毕业,我们以伙伴公司的名义招了一位嵌入式工程师和一位机械结构设计工程师.无知者无畏, ...

  3. TMS320F28x上RTOS移植关键技术分析

    TMS320F28x上RTOS移植关键技术分析 详细分析TI公司TMS320F28x系列DSP的启动过程:说明BootROM中程序的运行过程,介绍C编译器和DSP/BIOS的工作细节:探讨DSP的中断 ...

  4. 智能语音人机交互产业链及关键技术分析

    人机交互是一门计算机科学,主要研究关于设计.评价和实现供人们使用的交互计算系统以及相关现象的科学.人机交互的发展经历了以下几个阶段:手工作业阶段.作业控制语言与交互命令语言阶段.图形用户界面(GUI) ...

  5. 【转】嵌入式系统关键技术分析与开发应用

    嵌入式系统关键技术分析与开发应用 来自http://www.chinavideo.org/index.php?option=com_content&task=view&sectioni ...

  6. 中国移动:5G蜂窝IoT关键技术分析

    来源:5G 本文讨论了蜂窝物联网的技术现状,针对增强机器类通信和窄带物联网技术标准,提出了2种现网快速部署方案,并进一步指出了C-IoT面向5G的演进路径.该路径充分考虑了5G网络中网络功能虚拟化.软 ...

  7. 分布式网络爬虫关键技术分析与实现一网络爬虫相关知识介绍

    搜索引擎发展的历史过程与发展现状 1搜索引擎的发展的历史 1990年以前,没有任何人能搜索互联网.所有搜索引擎的祖先,是1990年由Montreal的McGill University学生Alan E ...

  8. 大豆技术面分析_大豆高产栽培关键技术分析,简单、明了轻松学会

    一. 大豆高产栽培和因素分析 1. 大豆高产栽培原理 一般情况下大豆高产栽培技术通过的是对大豆的生产过程的各个环节进行严格的管理,在技术升级管理中,需要注意的是进行技术方式的更新.在技术更新中,针对大 ...

  9. HDR / WCG 关键技术分析及标准化进展

    冯    宁,宋    利,解    蓉  ( 上海交通大学 图像通信与网络工程研究所,上海   200240)  摘要: 为了提升对 HDR 技术整体认知以及其发展情况的整体把握,本文介绍了 HDR ...

最新文章

  1. php _set魔术方法的用法,PHP魔术方法__GET、__SET使用实例
  2. istio回归「单体应用」对我们的启发
  3. react textarea 空格为什么不换行_你需要的 React + TypeScript 50 条规范和经验
  4. autotools入门笔记(一)
  5. Java DataOutputStream size()方法及示例
  6. 数据结构与算法之-----图(搜索算法)
  7. swift4视频课程 swift5入门教程 ios开发入门视频
  8. 基于Java毕业设计房产客户信息管理系统源码+系统+mysql+lw文档+部署软件
  9. Spark安装与配置(单机版)(保姆级教程)
  10. 微信小程序视频+微信视频号视频下载教程
  11. springboot 操作es 之elasticsearch-rest-high-level-client
  12. Effective java学习笔记
  13. 57个你没有听过的Google产品
  14. 算法(c++)——循环比赛日程安排问题
  15. Mina中的支付交易snark
  16. 2011天涯上令人心酸至极的微瞬间
  17. 【Scrum模式语言5】Scrum of Scrums
  18. 【Python自学笔记】学习Python控制键盘鼠标的库 pyautogui
  19. 如何使用Access创建一个简单MIS管理系统_Access
  20. mongoose 与 mylab 的使用 (1)

热门文章

  1. OBS 基础 16 如何在CMake中添加新的lib库、头文件等
  2. java实现两个数运算_用java做简单的计算器类,实现两个数字的加减乘除运算
  3. vs code修改代码后再次运行,报错:file“<stdin>“,line 1
  4. 同济大学计算机科学与技术系,同济大学计算机科学与技术系简介_跨考网
  5. 第六届山东省赛总结贴
  6. 第一章:2030.5、CSIP、Rule21简介 and 本项目内容介绍
  7. opencv的抠图程序
  8. python输出一年有多少天多少时分秒_python编程如何显示从1970年1月1日到今天多少天又多少小时...
  9. php农历生日计算,php实现的农历算法实例
  10. MCAL-GTM之时钟管理CMU