图片 10

直播商场的热销招致录制卡顿 流畅性难以服从

作为《LOL》女主播中当之无愧的“电竞一姐”,Miss大小姐拥有庞大的粉丝群体,其身价更是基本可以比肩当红的一线明星,今年年初,Miss虎牙直播间订阅量超过了400万。之前,因为Miss在直播中由于太累睡着了,虽然只休息了20分钟,但网友们对Miss睡姿似乎很感兴趣,同时观看人数直飚30万。

摘要:
这一次的世界杯,与以往世界杯最大的区别在于,有很多互联网用户观看直播,而不是在电视上。在互联网观看直播,互联网的网络条件不一样,观众会看不同码率的视频。所以主要分享下阿里云在直播中怎么做码率控制。

七牛直播云在 2016 年 6
月发布之后,帮助广大客户解决过形形色色的问题,如直播卡顿、马赛克、花屏、黑屏、杂音、音画不同步等等等等,这其中,有一些是网络原因,有一些是开发者的使用姿势问题,有一些是参数配置错误,当然,也有一些是
SDK 本身的问题。

图片 1

在本月的重庆云栖大会飞天技术汇专场中,阿里云高级算法专家黄海宇分享了题为《超大规模直播码率控制》的议题,从生产的链路角度来说世界杯怎么让观众看到更加清晰的视频。

总结下来,如果开发者能够对直播领域的一些基础知识有更深入的了解,掌握一些基本的排障手段,很多问题是能够很快自行解决的,甚至也能够更好地防患于未然。

这个时候最怕什么?当然是直播视频卡频而错了一个精彩镜头,只能看着满屏幕的666和233却不知道刚刚发生了什么。

图片 2

因此,继《直播技术详解》系列文章之后,我们推出了这个新的系列《直播疑难杂症排查》,我们会把协助客户解决直播问题的经验逐步分享出来,同时也会穿插一些音视频开发的基础知识和优化经验,希望能够帮助到直播领域的开发者们。

图片 3

这一次的世界杯,与以往世界杯最大的区别在于,有很多互联网用户观看直播,而不是在电视上。在互联网观看直播,互联网的网络条件不一样,观众会看不同码率的视频。所以主要分享下阿里云在直播中怎么做码率控制。


从本质上来看,直播是一个高技术门槛的行业,它对响应速度和传输效率的要求看似简单,其实技术难度极高。特别是随着用户规模的增长,技术难度更是直线上升。满足上千人的直播需求或许不难,但如果要满足上万人,十万人级别的需求,就是一个很高的技术门槛了。

分享分三个部分,首先讨论一下为什么要关注码率控制、其次是宏观上怎么做码率控制,最后是介绍下微观上怎么做码率控制。

本系列会涵盖的内容包括但不限于如下一些主题:

从代码层面来看,卡顿其实是指播放器渲染的帧率太低,比如:1s 显示 3~5
帧,或者渲染完一帧后,过很久才渲染下一帧。而卡顿并不是什么新鲜事,几乎每一个平台都有,也几乎每一名直播用户都会遇到,重点是在目前看来,行业普遍缺乏有效的卡顿解决手段。

我们先看一下个直播的一个简单的过程。

  • 播放失败
  • 直播卡顿
  • 首开慢
  • 延时高
  • 音画不同步
  • 马赛克严重
  • 播放黑屏、花屏、绿屏
  • 播放杂音、噪音、回声
  • 点播拖动不准
  • 直播发热问题
  • 其他问题(待续)

归根结底,直播平台播放的流畅性主要受四方面因素影响,分别是推流端、视频源、CDN、播放端。其中播放端是直播卡顿的直接表现环节,但减少和消除卡顿,需要从全链路多环节着手。

图片 4

本文是
《直播疑难杂症排查》系列的第二篇文章,我们主要分析下如何排查播放卡顿问题。

图片 5

世界杯通常会拿到一个非常高清的直播源,它的码率非常大,不太适合在互联网上直接传输。所以整条链路中会有一个视频内容的再生产的过程,这个再生产的过程最重要的就是视频的转码,将这个转成不同分辨率的几个档位。比如说我们看视频有流畅的、标清、高清、超清的视频,这些都是为了让不同网络的用户可以流畅的观看视频。在进行转码以后,视频流会经过CDN放大,很多用户会进行观看。


在推流端,需要有一套Qos策略,可以实时监控直播网络状况,当网络带宽变差时,推流端会迅速地逐级降低视频的帧率,码率,分辨率,保证推流视频的流畅。当网络恢复良好时,在确保流畅的前提下,推流端会逐渐提升视频的帧率,码率,分辨率,提升直播视频的清晰度,

其中,码率控制是发生在转码这个环节,就是把高清视频进行解码再进行重新编码,视频的转码是一个有损的压缩的过程,把原来的视频进行处理,将里面的细节进行忽略,这样能够以一个更低的带宽去满足用户播放流畅的需求。

播放卡顿的表现

播放卡顿的表现总结下来包括但不限于以下这些:

  • 频繁出现缓冲

  • 播放不够流畅,画面一卡一卡的

在网络出现抖动后,能够快速调整编码码率,达到稳定效果。并且配合实时网络质量检测,尽可能保持编码码率和网络速率吻合,并稳步提升至高位码率。藉此,便可以保证直播流畅的情况下,尽量实现高清效果。在CDN端,需要考量具备多线的BGP带宽,更多节点的CDN厂商为视频点播和直播提供加速,带来更流畅的视频观看体验。

图片 6

常见播放卡顿问题排查

从代码层面来看,什么是卡顿?其实是指播放器渲染的帧率太低,比如:1s 显示
3~5 帧,或者渲染完一帧后,过很久才渲染下一帧。

因此,我们需要排查,是什么原因导致了播放器无法流畅地渲染数据,通常可能有如下几大类:

  • 网络带宽不足

  • 播放设备性能不足

  • 视频流时间戳问题

下面我们一一来分析下具体的原因。

最后,主播推送了高清的视频到网络上以后,播放端不一定都能无卡顿播放。直播转码可以实现多码率适配,提供播放端的流畅体验。H.265商用编解码方案可以在同清晰度情况下降低50%的码率,减小卡顿风险的同时降低成本。

第一,码率控制对清晰度有影响。我们通常的概念是清晰度越高码率越高,要求用户的下行的带宽更高。

原因一:网络带宽不足

一个完整的直播应用,简单来说数据流是这样的:主播 -> CDN -> 观众

因此,直播出现卡顿,三个端都可能是问题的源头:

  1. 主播端的网络不好,导致推流上行不稳定
  2. 服务端的线路质量不好,导致分发不稳定
  3. 观众端的网络不好,导致拉流下行不稳定

那么,我们如何确切地判断是哪一个环节出了问题导致的播放卡顿呢 ?

如何判断主播网络不好

主播端网络不好,直接影响到的就是千千万万的观众,因此,如果发现所有的观众都出现频繁卡顿,那么多半就是主播端的问题了。

  1. 带宽测试
    用带宽测试工具 测试下主播的带宽,如果主播的上行带宽明显小于推流的码率,那么肯定会出现推流帧率不稳定。

  2. 统计回调
    一般的推流 SDK 都会统计主播推流的实时视频帧率,如果预设的帧率是 20
    fps,但是实际的帧率低得很多,比如 5
    fps,排除手机性能低的原因的话,多半也是网络带宽不足引起的。

  3. CDN 厂商给出的后台统计
    比如,七牛直播云就给我们的每一个客户提供了如下的后台 Portal
    界面,可以用于监控每一个主播的实时推流情况:

    图片 7

从这个图来看,该主播的推流上行其实还是蛮稳定的,一直在 20 fps 左右。

如何判断观众端网络不好

观众是整个直播的终端环节,一般如果不是大面积的观众出现卡顿,那么很可能是这个观众自身的网络问题,可以考虑切换到别的
WiFi 网络,或者 4G
下播放试试,我们还可以通过如下手段,具体确认下是网络的原因。

  1. 带宽测试
    跟主播端类似,我们依然可以用带宽测试工具,测试下观众端的带宽,如果该观众的带宽明显低于主播的推流码率,那么肯定会出现卡顿。

  2. 网络质量测试
    可以在观众端的网络下,ping
    一下播放域名,看看当前丢包率是多少,一般好的网络,ping 值的丢包率是
    0%。

图片 8

当然,还有一些更加专业的网络性能测试工具,如
iperf,这里就不展开详细的介绍了。

  1. 如何判断 CDN 线路不好
    如果排除了主播端上行网络原因以及观众端下行的网络原因,那么,剩下的就很可能是
    CDN 线路质量原因了。

关于 CDN 线路质量,一方面可以通过联系 CDN
厂商来排查,另一方面,也可以通过播放端的打点上报,统计出各家 CDN
的线路质量(比如:首开,卡顿率),分地区做一些线路的调整和优化。

七牛实时流网络
(LiveNet)会根据网络流量、各节点的连接、负载状况及到用户网络的响应时间等综合信息,实时地将用户的请求调度到最佳服务节点上,同时可计算出最佳服务节点与视频源节点的最佳网络路径,使用户可以更快速的获取到视频内容,提高视频服务的响应速度和用户体验。

直播市场的火爆,带来了超乎预期的市场机会,同时也带来了技术的挑战,诸如卡顿这样的小问题,也有可能让一个直播平台最终走向没落,一味扩容服务器,增加带宽,不仅不能彻底解决问题,反而造成成本激增,背负上更重的运营压力。所以,选择解决方案要擦亮眼睛,全链路多环节着手解决卡频问题。

图片 9

原因二:播放设备性能不足

越高清的码率,对解码的要求也越高,很多手机性能不足以支撑 720P 甚至 1080P
的视频解码,特别是很多低端的 Android
手机,因此导致实际解码播放的帧率远小于视频码流的实际帧率,从而产生卡顿。

解决这个问题的思路主要有如下几个方面:

  • 尽可能选择使用硬解,充分利用 GPU 加速
  • 如果有多种码流,尽可能在低端机上选择非高清码流
  • 增大缓冲区,有助于缓解解码不稳定带来的卡顿

第二,码率控制影响用户流畅度的影响,用户播放的网络各不相同,当用户的带宽大于视频码率时,才够流畅播放。

原因三:视频流时间戳问题

这个问题也遇到的比较多,特别是客户自己写的推流 SDK
或者码流经过一些转码处理后,没有处理好音视频时间戳从而产生的问题。播放器一般是严格根据码流中的音视频的时间戳来做音画同步的,因此,如果码流中的音视频时间戳出现错误,肯定会影响到播放画面的渲染时机。

例如,曾经遇到一个流的时间戳信息如下:

图片 10

可以看到,它的视频时间戳出现了「回退」,而播放器一般 master
主时钟是单调递增的,当后来的视频帧小于了当前的主时钟,播放器就会做丢帧处理,从而导致播放的视频帧率远低于实际码流中的视频帧率,从而产生卡顿现象。

这个问题的排查,大家可以修改 ffplay
源码,把读取到的每一帧音频、视频的时间戳打印出来看看,这里我给出对
ffplay 的修改 commit 记录,大家可以参考一下:

第三,码率控制的影响是成本的影响,在整个世界杯直播的过程中,最大的费用在CDN带宽上,CDN的总带宽消耗为不同的码率以及这种码率并发在线人数的乘积之和。

小结

关于播放卡顿的问题排查大致就介绍到这里了,下篇我们将对首开慢这个话题进行探讨。如果你对七牛直播云感兴趣,欢迎点击  了解详情。


本文作者:卢俊@七牛云。如果有你感兴趣的问题,但是不在上述列表中,也可以来信 lujun.hust@gmail.com 交流,欢迎关注新浪微博
@卢_俊 或者 微信公众号 @Jhuster 获取最新的文章和资讯。

所以我们的问题是用户的网络是有限的,我们如何在有限的网络下最好的控制码率,提供给用户最清晰的视频。