本文出自论文Salsify: Low-Latency Network Video through Tighter Integration between a Video Codec and a Transport Protocol,对其论文内容进行了基本总结,这里提出了用于实时视频系统的Salsify,结合了视频编解码器和传输协议中的率控制算法,来避免引发丢包和自身流量的排队延迟。


Salsify是一个专门用于实时网络视频的架构,它紧密集成了一个视频编解码器和一个网络传输协议,允许它快速响应变化的网络环境,避免造成数据包丢失和排队延迟。Salsify基于网络容量的一个当前评估,来优化每帧的压缩长度和传输时间。Salsify的每帧优化策略依赖于一个纯功能视频编解码器,用它来探索每帧不同质量级别的可替代编码。Salsify实现了在可变网络路径上较低的视频延迟,以及更高的视频质量,其对比系统为:FaceTime, Hangouts, Skype, WebRTC。


文章目录

  • 一、简介
  • 二、相关工作
  • 三、设计与实现
  • 四、Salsify评估
  • 五、结论

一、简介

  1. 当前实时视频系统通常由两个组件所组成:传输协议和视频编解码器。传输协议负责传输压缩视频给接收者,处理确认和拥塞信号,然后预估网络路径上的平均数据速率,并把预估的数据速率反馈给编解码器模块。编解码器选择编码参数(帧率和质量设置),然后生成一个压缩视频流,其平均码率接近于所预测的网络容量,从而可以保证视频的完整传输,而不会产生卡顿或者掉帧现象。
  2. Salsify结合了传输协议的packet-by-packet拥塞控制和视频编解码器的frame-by-frame率控制,通过匹配网络变化容量和视频传输速率,来避免引发网络缓冲区溢出或排队延迟。Salsify的视频编解码器在不同的质量水平上探索每个视频帧的替代编码,来使压缩长度符合网络瞬时容量。当网络可以容纳视频帧时,则发送对应的视频帧。

二、相关工作

  1. Adaptive videoconferencing(自适应视频会议):Salsify将每个组件的率控制算法合并为一个,利用视频编解码器的功能特性,来使每个压缩帧的长度保持在传输方对网络容量的瞬时预估内。
  2. Joint source-channel video coding(融合源-信道视频编码):之前的工作集中于将源编码(视频压缩)与信道编码(前向纠错)结合起来,以便应用程序能够应对独立随机过程引起的丢包和延迟问题。Salsify在视频编解码器中融合了率控制算法和传输协议,来避免引发丢包和排队延迟。
  3. Scalable or layered video coding(可扩展或分层视频编码):在可扩展编码中,编码器产生多流压缩视频,它由一个基础层和多个增强层所组成,其中增强层用来提高较低层的质量,包括帧率、分辨率或者视觉质量。在实时视频应用中,当网络拥塞时,应用程序可以立刻丢弃增强层,而无需等待视频编解码器进行自适应过程。
  4. Loss recovery(丢包恢复):传统的RTP和WebRTC应用在发生丢包时,要不重传所丢失的包,要不重新编码一个视频帧的丢失slice。Salsify的功能性视频编解码器保留了旧状态的记忆,直到发送者丢弃它们。如果一个网络出现丢包现象,编码器可以开始以一种只依赖接收方已经承认的较旧状态的方式编码新的帧。

三、设计与实现

  1. 在WebRTC的开源实现框架中,视频编解码器以特定帧率从原始视频中读取帧并压缩它们,它以特定的平均比特率为目标。传输协议在大约1s的时间尺度上,更新编码器的帧率和目标比特率。WebRTC的拥塞响应通常是反应性的,如果视频编解码器产生的压缩帧超过网络容量,继续进行传输,即使会导致丢包或缓冲区溢出,随后再告诉编解码器暂停编码新的帧,直到不再拥塞。而Salsify架构允许在每帧被压缩前,传输协议与视频编解码器交流网络状态,从而使其传输可以匹配网络容量的变化状态,如果当前网络可以容纳压缩帧时则进行编码操作。

  2. Salsify的传输协议预估网络可以安全接收的字节数量,从而不至于丢包或者排队延迟,尽管在编码帧开始前该字节数量已知,但是预测编码器参数来使一个视频编码器匹配一个预先指定好的帧长度却具有一定的挑战性。Salsify尝试两组不同的编码参数以确定可用容量,该系统会首先检查压缩帧的编码大小,并选择其中一个合适的去发送,来匹配网络容量。编码该帧的状态被恢复,用作下一个编码帧的基础。

  3. 使用编解码器接口,我们可以利用不同质量参数配置来编码每帧和从所需状态开始解码。这允许Salsify以一定大小和质量来编码帧,从而满足网络容量限制,同时可以有效地从丢包中恢复。编解码器接口定义如下:
    d e c o d e ( s t a t e , f r a m e ) → ( s t a t e ′ , i m a g e ) e n c o d e ( s t a t e , i m a g e , q u a l i t y ) → f r a m e decode(state,frame)\rightarrow (state',image)\\ encode(state,image,quality)\rightarrow frame decode(state,frame)→(state′,image)encode(state,image,quality)→frame

  4. 编码来匹配网络容量:Salsify利用视频编码器的功能特征来优化每个私有帧的压缩长度,这个基于对网络容量的一个当前估计值。通过串行或并行运行两个编码器,来为每个帧探索两个压缩级别,初始化时使用相同的内部状态,但其质量设置参数有所不同。Salsify选择最匹配网络容量的结果帧,在知道压缩帧的确定大小之后尽量推迟发送哪个版本的决定。当两个不同版本的编码帧都超过网络容量时,Salsify通过跳帧的方式来适应当前网络状态。

  5. 丢包恢复:当发送方检测到丢包时,它将通过创建依赖于接收方已经确认状态的帧,来重新同步接收方的状态。该方法要求sender和receiver在内存中保留目标状态序列,仅当不需要的时候再删除。

  6. Salsify传输协议:每帧的头部包含着源状态和目标状态的hash值,receiver在内存中存储目标状态,以防sender需要使用此状态做丢包恢复。对网络状态的预估值在确认包中被传递给sender。由于在当前帧的最后一个fragment和下一个帧的第一个fragment之间存在间隔,会被误认为当前网络拥塞,因此sender会在每个fragment中包含一个grace period,告诉receiver两个fragment之间的间隔时间。在sender端,基于receiver发送的最近平均inter-arrival时间 τ i \tau_i τi​,来预估一个帧的期望大小值。首先,通过对上一个发送包和上一个接收包的索引值计算,sender预估得到in-flight的包数量 N i N_i Ni​。如从果sender如果想要保持端到端延迟少于d,则in-flight包数量不应当超过 d / τ i d/\tau_i d/τi​,因此目标大小为 ( d / τ i − N i ) (d/\tau_i-N_i) (d/τi​−Ni​)MTU-size fragments。如果连续跳帧4次,则sender直接发送较低质量版本的帧。
    τ i ← α ( T i − T i − 1 − g r a c e p e r i o d i ) + ( 1 − α ) τ i − 1 . \tau_i \leftarrow \alpha(T_i-T_{i-1}-grace_period_i)+(1-\alpha)\tau_{i-1}. τi​←α(Ti​−Ti−1​−gracep​eriodi​)+(1−α)τi−1​.

  7. Salsify传输协议的算法过程描述:

    (1)根据上面公式计算mean_interarrival_time;

    (2)根据发送包和接收包索引来计算num_packets_outstanding;

    (3)根据预先定义的端到端最低时延,计算得到当前网络状态最大可以接收的帧大小。

  8. Salsify编解码器算法过程描述:

    (1)获取source_state,如果发生丢包则进入丢包恢复模式,将已有的接收方编解码状态当成source_state,否则以上一个发送帧的目标状态作为source_state;

    (2)设置两组不同的编码参数表示低质量和高质量的编码方案,进行帧编码;

    (3)根据网络容量,即当前网络最大可以接收的帧大小,来选择合适的编码帧;

    (4)如果没有合适的编码帧,则进行跳帧,当连续跳帧4次时,则直接选择低质量的编码帧来发送。

四、Salsify评估

  1. 评估准则:SSIM用来评估视频质量,将原始视频和接收帧来进行比较,这里使用了Xiph Daala工具包。对于测量交互视频延迟,则计算提供一个帧到接收该帧的时间。

  2. 视频分析:为了计算与视频相关的度量准则,测试台记录发送端呈现每一帧的时间,从接收端捕获显示输出,并为到达的每一帧时间戳标记到同一个时钟。本文在视频的每一帧上添加两个二维码,分别代表着发送帧和接收帧的标记信号,每个二维码编码一个64位的随机数,并在整个视频过程中是唯一的,从而来表示相同的帧。

  3. 评估设计架构:它模拟了一个网络摄像头,向发送者提供原始视频画面,sender通过以太网传输视频帧给receiver。

  4. 对比方案:

  5. 将传输协议移除后,Salsify低估了网络容量,从而发送低质量低码率的视频帧。将编解码器移除后,使用传统的编解码器进行替代,其实验性能也有所下降,其原因有以下两种:(1)传输协议无法在传输时间内选择视频帧,如果网络容量发生变化Salsify可能发生延迟或者不能提高视频质量;(2)为任何编解码器选择合适的质量参数来满足目标大小是一个挑战。将传输协议和编解码器移除,而对网络平均数据速率进行评估,再每一秒更新视频编解码器的质量参数,其实验性能等同于Skype和WebRTC。

  6. 在不同网络环境下的性能比较:

  7. 当网络状态快速变化时,Salsify可以快速响应改变,Salsify的发送数据速率随着网路容量平稳下降,然后平稳恢复,同时Salsify视频播放也会快速恢复。

  8. 在一个固定数据速率同时间隔性一秒内丢包的网络环境下,我们比较了Salsify和WebRTC的反应性能。Salsify总是根据receiver端可获得的参考状态来编码最近的视频帧,而WebRTC的传输协议则在视频编码器开始编码新帧前来重传丢失的包,因此会造成视频延迟和帧率的巨大变化。

五、结论

  1. Salsify的loss-recovery策略要求sender和receiver在内存中同时保持一组解码器状态,便于在丢包发生时从已知状态中恢复。
  2. Salsify的功能性编解码器的好处在于它可以通过试错来生成压缩帧,从而使其长度可以匹配传输协议对网络瞬时容量的预估。
  3. Salsify结合了视频编解码器和传输协议中的率控制算法,来避免引发丢包和自身流量的排队延迟。
  4. 在一个end-to-end的评估中,Salsify达到了较低的end-to-end视频延迟和较高的质量,对比的已有系统包括:Skype, FaceTime, Hangouts, WebRTC视频会议(是否使用可扩展视频编码VP9-SVC)。

Salsify: 低延迟的网络视频框架设计--视频编解码器和传输协议的紧密集成相关推荐

  1. 非深度网络 Non-deep Network:低延迟平行网络 ParNet,仅 12 层媲美 ResNet

    Non-deep Network Ankit Goyal1,2   Alexey Bochkovskiy2   Jia Deng1   Vladlen Koltun2 1Princeton Unive ...

  2. android商务app视频,电子商务设计视频

    电子商务设计视频app是一个非常好用的电子商务设计师学习软件,电子商务设计视频app能够帮助大家快速的提高电子商务设计方便的知识,还有专业的老师解答,需要的朋友赶紧来下载电子商务设计视频app试试吧 ...

  3. Java 网络编程(二) 两类传输协议:TCP UDP

    两类传输协议:TCP,UDP TCP TCP是Transfer Control Protocol(传输控制协议)的简称,是一种面向连接的保证可靠传输的协议. 在TCP/IP协议中, IP层主要负责网络 ...

  4. 超低延迟实时流媒体传输技术

    正文字数:5401  阅读时长:8分钟 现在云游戏,云应用越来越火,所以超低延迟实时流媒体传输技术的需求应用场景会越来越多.腾讯专家工程师刘泓昊老师在LiveVideoStackCon 2020北京站 ...

  5. 跨平台低延迟的RTMP/RTSP直播播放器设计实现

    开发背景 2015年,当我们试图在市面上找一款专供直播播放使用的低延迟播放器,来配合测试我们的RTMP推送模块使用时,居然发现没有一款好用的,市面上的,如VLC或Vitamio,说白了都是基于FFMP ...

  6. 音视频直播如何实现低延迟

    大家在日常生活中接触到各类直播,例如游戏直播.乐秀.在线教育.发布会等等.无论哪种类型的直播,延时是直播过程中需要关注的一个重要的点. 直播实现低延迟,是对大部分直播产品的要求,低延迟也是提升直播产品 ...

  7. 视频直播技术_直播如何实现低延迟

    借<让子弹飞>中姜文的名言作为开场白:让子弹飞一会儿. 某名人吐槽说:还要飞一会儿哪?这子弹的延迟也忒大了. 该名人就是鄙人. 为什么低延迟很重要? 低延迟的子弹可以击杀敌军千米之外,低延 ...

  8. 互动场景下的低延迟编码技术

    本文由上海交通大学教授宋利在LiveVideoStackCon2020线上峰会的演讲内容整理而成,从分析视频传输系统延迟入手,详细介绍视频编码延迟的产生机制,总结优化编码延迟的技术手段和业界典型的低延 ...

  9. Opus:IETF低延迟音频编解码器:API和操作手册

    https://www.zybuluo.com/khan-lau/note/383775 Opus简介 Opus编解码器是专门设计用于互联网的交互式语音和音频传输.它是由IETF的编解码器工作组设计的 ...

最新文章

  1. android播放器:mediaplayer
  2. HDU4472 Count
  3. HPE 的 OpenSwitch 项目得到 Linux 基金会支持
  4. linux查看文件只会用vi?除了vi,这几个文件查看的命令,让你爱不释手!
  5. 车牌识别数据集_行人再识别数据集
  6. 使用maven工具无法进入debug
  7. 机器学习三剑客之Matplotlib
  8. weblogic部署war冲突解决记录
  9. java并发编程实战
  10. Android计算器效果截图,Android复杂计算器实现
  11. linux cpu使用率500%,Linux:CPU使用率100%排查方法
  12. 复化科特斯公式matlab_牛顿科特斯公式要点分析.ppt
  13. Java网页版仿QQ实现在线聊天功能
  14. 精通 Spring Boot 42 讲
  15. Ubuntu16.04(14.04) 安装网卡驱动教程
  16. 【网易云信】从0到1构建实时音视频引擎
  17. RAM汇编指令DMB、DSB、ISB、SEV等
  18. Python中的sin和cos函数
  19. 轻松捕捉85点策略:欧元/日元经典交易策略全公开
  20. 1x pcie 速度_利用起闲置的PCIe 1x空间:PCIe 1x的SATA扩展卡,内置2.5寸盘位

热门文章

  1. Kafka 麒麟先生_成都环球中心惊现2米长颈鹿(还为圈友带来了各种福利!福利!)...
  2. 硬盘数据突然消失怎么回事?硬盘数据突然消失怎么找回
  3. # 对象的属性把其他自定义类作为属性**Dog宠物狗**
  4. 4-20mA换算为实际值公式
  5. c语言错误warn4018,H265编码视频播放器EasyPlayer.JS控制台出现VideoJS:WARN警告信息是什么原因?...
  6. 肖 sir_就业课__016非技术面试题
  7. 用flutter 写一个电视应用
  8. 计算机组成原理——屏蔽字设置
  9. JavaScript高级超详细思维导图
  10. 在线客服兼容谷歌Chrome、苹果Safari、Opera浏览器的修改