本文转载置顶:http://blog.ucloud.cn/archives/760

感谢作者无私的奉献精神!

上篇《关于直播,所有的技术细节都在这里了(2)《转载》》我们讲述了直播应用层协议及传输层协议的选择以及对直播体验影响的分析 。本篇中我们将介绍在传输直播流媒体过程中的内容缓存与传输策略优化细节原理。
基础知识:I帧、B帧、P帧

I帧表示关键帧。你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成。(因为包含完整画面)

P帧表示这一帧跟之前的一个关键帧(或P帧)的差别。解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

B帧是双向差别帧。B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况)。换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。

B帧压缩率高,但是编解码时会比较耗费CPU,而且在直播中可能会增加直播延时,因此在移动端上一般不使用B帧。

关键帧缓存策略

一个典型的视频帧序列为IBBPBBPBBP……

对于直播而言,为了减少直播的延时,通常在编码时不使用B帧。P帧B帧对于I帧都有直接或者间接的依赖关系,所以播放器要解码一个视频帧序列,并进行播放,必须首先解码出I帧,其后续的B帧和P帧才能进行解码,这样服务端如何进行关键帧的缓存,则对直播的延时以及其他方面有非常大的影响。

比较好的策略是服务端自动判断关键帧的间隔,按业务需求缓存帧序列,保证在缓存中存储至少两个或者以上的关键帧,以应对低延时、防卡顿、智能丢包等需求。

延迟与卡顿的折中

直播的延时与卡顿是分析直播业务质量时,非常关注的两项指标。互动直播的场景对延时非常敏感,新闻体育类直播则更加关注播放的流畅度。

然而,这两项指标从理论上来说,是一对矛盾的关系——需要更低的延时,则表明服务器端和播放端的缓冲区都必须更短,来自网络的异常抖动容易引起卡顿;业务可以接受较高的延时时,服务端和播放端都可以有较长的缓冲区,以应对来自网络的抖动,提供更流畅的直播体验。

当然,对于网络条件非常好的用户,这两项是可以同时保证的,这里主要是针对网络条件不是那么好的用户,如何解决延时与卡顿的问题。

这里通常有两种技术来平衡和优化这两个指标。

一是服务端提供灵活的配置策略,对于延时要求更敏感的,则在服务端在保证关键帧的情况下,对每个连接维持一个较小的缓冲队列;对于卡顿要求更高的直播,则适当增加缓冲队列的长度,保证播放的流畅。

二是服务端对所有连接的网络情况进行智能检测,当网络状况良好时,服务端会缩小该连接的缓冲队列的大小,降低延迟;而当网络状况较差时,特别是检测到抖动较为明显时,服务端对该连接增加缓冲队列长度,优先保证播放的流畅性。

丢包策略

什么时候需要丢包呢?

对于一个网络连接很好,延时也比较小的连接,丢包策略永远没有用武之地的。而网络连接比较差的用户,因为下载速度比较慢或者抖动比较大,这个用户的延时就会越来越高。

另外一种情况是,如果直播流关键帧间隔比较长,那么在保证首包是关键帧的情况下,观看这个节目的观众,延迟有可能会达到一个关键帧序列的长度。上述两种情况,都需要启用丢包策略,来调整播放的延时。

关于丢包,需要解决两个问题:

一是正确判断何时需要进行丢包;

二是如何丢包以使得对观众的播放体验影响最小。较好的做法是后端周期监控所有连接的缓冲队列的长度,这样队列长度与时间形成一个离散的函数关系,后端通过自研算法来分析这个离散函数,判断是否需要丢包。

一般的丢帧策略,就是直接丢弃一个完整的视频帧序列,这种策略看似简单,但对用户播放的影响体验非常大。而应该是后台采用逐步丢帧的策略,每个视频帧序列,丢最后的一到两帧,使得用户的感知最小,平滑的逐步缩小延时的效果。

以上就是UCloud直播云:内容缓存与传输策略优化细节原理。关于终端优化,请参阅即将发布的《关于直播,所有的技术细节都在这里了(四)》。

-----------------------------------------------------------------

本文转载:http://blog.ucloud.cn/archives/760

关于直播,所有的技术细节都在这里了(3)《转载》相关推荐

  1. 关于直播,所有的技术细节都在这里了(2)《转载》

    本文转载置顶:http://blog.ucloud.cn/archives/694 感谢作者无私的奉献精神! 上篇< 关于直播,所有的技术细节都在这里了(1)<转载> >我们讲 ...

  2. 直播系统开发技术细节分享

    直播的火爆成就了无数人的财富梦,而进入直播市场首先要解决的就是直播系统开发的问题,例如采集推流.编解码.服务器.页面播放等问题,本文就对编解码的一些技术细节进行汇总,使大家能够进一步了解直播系统开发. ...

  3. 直播平台软件开发都使用了什么协议呢?

    直播平台软件开发都使用了什么协议呢? 最近直播比较火,很多人都喜欢看直播,那一个直播系统里面都有哪些组成部分,都使用了什么协议呢? 直播平台软件开发中无论是直播还是点播,其实都是对于视频数据的传输.一 ...

  4. 弘辽科技:一元秒杀重回抖音直播间,一切都是流量“惹的祸”

    在今年略显平淡的618大促过去之后,李佳琦.薇娅与背后的MCN传出了或将IPO的消息.虽然两者很快否认要做张大奕第二的传闻,但不可否认的是,经过了一年多的野蛮生长后,直播电商领域已经开始趋于平淡,并且 ...

  5. 关于直播的技术细节都在这里

    (2016-05-26 17:59:34) 加速会注:本文由 著名直播平台都在使用的云计算公司 UCloud 流媒体研发团队撰写! 网络视频直播存在已有很长一段时间,随着移动上下行带宽提升及资费的下调 ...

  6. 关于直播,所有的技术细节都在这里了

    前言: 网络视频直播存在已有很长一段时间,随着移动上下行带宽提升及资费的下调, 视频直播被赋予了更多娱乐和社交的属性,人们享受随时随地进行直播和观看, 直播的打开时间和延迟变成了影响产品功能发展重要指 ...

  7. 动态分辨率是什么意思_b站么么直播最新动态里都有啥 b站什么意思

    他们已经为这个实验发出了250多部手机,但这可能只是一小部分. 无聊的时候做什么?这是一个永恒的.自相矛盾的命题. Bilibili决定用一个纯粹无聊的直播节目和其他几百万无聊的人来回答这个问题,看着 ...

  8. 新手怎么做直播卖货?都有哪些卖货成交话术技巧?

    都说2020年是直播电商全面爆发的一年,受疫情影响,全民直播的盛况更是空前绝后.不管怎样,现在,直播带货已明显地成为所有商家的共识. 直播带货虽火爆,但分化明显.头号主播有流量,有议价权,每场直播的销 ...

  9. 计算机网课用什么app,电脑录屏软件哪个好?游戏直播网课我都用它录制

    大家在电脑上直播网课或玩游戏的时候,想要将其过程给保存下来的时候,都是怎么操作的呢?小编遇到这种情况都是选择用电脑录屏的方法把他们给录制下来,从而便于自己想要反复观看,或者分享给别人的需求.而有些朋友 ...

最新文章

  1. “完全自主”的木兰编程语言回应:承认基于Python二次开发,向中科院致歉
  2. Thread中,join()方法
  3. angr学习笔记(3)
  4. MyBatis-Plus入门篇——CRUD
  5. linux shell学习问题部分记录
  6. 第一阶段个人总结04
  7. python 安卓库_python 库实战 - 安卓简易自动化框架
  8. EXCEL 根据超链接直接显示图片
  9. .NetCore分布式部署中的DataProtection密钥安全性
  10. Pixracer V1.0编译固件
  11. ip地址合不合法怎么看_怎样判断IP地址的非法性?
  12. JAVA经典算法大全
  13. Multi-Scale Context Aggregation By Dilated Convolutions
  14. SpringBoot导入导出你会用吗?(EasyPoi)
  15. 苹果关闭自动更新_IOS更新很烦?仅需一招永远关闭
  16. 【EXP】函数使用技巧
  17. 新手上路之第一次自驾游
  18. 机器学习(1)一文带你看懂显卡,显卡驱动,CUDA,CUDNN(内含举例)
  19. 浏览器缓存机制(强制缓存,协商缓存)
  20. 2021防爆电气考试题库

热门文章

  1. android wpa2 wifi,让Android WiFi支持中文
  2. 初学jQuery之选择器
  3. [AGC007 E]Shik and Travel
  4. Shadow Map 原理和改进 【转】
  5. C# SetCursorPos用法
  6. Linux 命令(131)—— usermod 命令
  7. Makefile 函数
  8. SSH 默认端口配置
  9. C++ 抛出异常与传递参数的区别
  10. C++ 名字空间详解