直播疑难杂症排查(2) — 播放卡顿

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

1. 播放卡顿的表现

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

- 频繁出现缓冲

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

2. 常见播放卡顿问题排查

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

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

- 网络带宽不足

- 播放设备性能不足

- 视频流时间戳问题

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

2.1 网络带宽不足

一个完整的直播应用,简单来说数据流是下面这样的:

主播 -> CDN -> 观众

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

- 主播端的网络不好,导致推流上行不稳定

- 服务端的线路质量不好,导致分发不稳定

- 观众端的网络不好,导致拉流下行不稳定

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

2.1.1 如何判断主播网络不好

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

(1)带宽测试

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

(2)统计回调

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

(3)CDN 厂商给出的后台统计

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

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

2.1.2 如何判断观众端网络不好

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

(1)带宽测试

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

(2)网络质量测试

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

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

2.1.3 如何判断 CDN 线路不好

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

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

2.2 播放设备性能不足

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

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

- 尽可能选择使用硬解,充分利用 GPU 加速

- 如果有多种码流,尽可能在低端机上选择非高清码流

- 增大缓冲区,有助于缓解解码不稳定带来的卡顿

2.3 视频流时间戳问题

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

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

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

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

https://github.com/Jhuster/pili-ffmpeg/commit/4d0476faba5016b291c2eed2c0a2cd6fe303bd50

3. 小结

关于播放卡顿的问题排查大致就介绍道这里了,有任何疑问欢迎来信 [email protected] 交流,另外,欢迎关注我的新浪微博 @卢_俊 或者 微信公众号 @Jhuster 获取最新的文章和资讯。

时间: 2024-10-14 03:16:55

直播疑难杂症排查(2) — 播放卡顿的相关文章

《直播疑难杂症排查》之二:播放卡顿

七牛直播云在 2016 年 6 月发布之后,帮助广大客户解决过形形色色的问题,如直播卡顿.马赛克.花屏.黑屏.杂音.音画不同步等等等等,这其中,有一些是网络原因,有一些是开发者的使用姿势问题,有一些是参数配置错误,当然,也有一些是 SDK 本身的问题. 总结下来,如果开发者能够对直播领域的一些基础知识有更深入的了解,掌握一些基本的排障手段,很多问题是能够很快自行解决的,甚至也能够更好地防患于未然. 因此,继<直播技术详解>系列文章之后,我们推出了这个新的系列<直播疑难杂症排查>,我

直播疑难杂症排查(8)— 播放杂音、噪音、回声问题

本文为 <直播疑难杂症排查>系列的第八篇文章,我们重点看看直播过程中出现的杂音.噪音和回声等问题. 相比于视频而言,音频要敏感得多,视频画面有噪点.马赛克都还是可以勉强被接受,而声音一旦有任何瑕疵,人耳都会特别容易感觉到,而且难以忍受. 1.  问题现象 常见的音频问题现象描述如下: - 电流音,爆音,滋滋声或者嘟嘟声 - 声音断断续续,听不清楚 - 回声,能听到自己说话的声音 2. 问题排查 2.1 参数配置问题 上面也有提到,音频是一个特别敏感的东西,涉及到许多参数配置,一旦配置不太匹配,

直播疑难杂症排查(1)— 播放失败

本文是<直播疑难杂症排查>系列的第一篇文章,我们从播放开始,因为观看直播最重要的一个环节就是打开播放器,很多问题的直接反馈也是来自观众端. 导致播放失败的原因,有很多种,不一定是播放器本身的问题,不过通过播放器,我们很容易反过来排查服务端或者推流端的问题.下面我们会从播放失败的表现.播放问题排查工具.常见问题分析等多个方面展开讨论. 1. 播放失败的表现 播放失败的表现总结下来包括但不限于以下这些: - 界面上一直显示 "加载中",或者提示播放失败的错误 - 播放画面卡死不

《直播疑难杂症排查系列》之一 :播放失败

直播疑难杂症排查 - 序 <直播疑难杂症排查系列>会涵盖的内容包括但不限于如下一些主题: 播放失败 直播卡顿 首开慢 延时高 音画不同步 马赛克严重 播放黑屏.花屏.绿屏 播放杂音.噪音.回声 点播拖动不准 直播发热问题 其他问题(待续) 第一篇文章我们从播放开始,因为观看直播最重要的一个环节就是打开播放器,很多问题的直接反馈也是来自观众端. 导致播放失败的原因有很多种,不一定是播放器本身的问题,不过通过播放器,我们很容易反过来排查服务端或者推流端的问题.下面我们会从播放失败的表现.播放问题排

直播疑难杂症排查(5)— 音画不同步

本文是<直播疑难杂症排查>系列的第五篇文章,我们重点来看看直播中常见的音画不同步问题. 1. 音画不同步的表现 很容易判断,就是画面和声音不匹配. 2. 音画同步的基础概念 首先我们要明白一个概念,虽然人的肉眼,很容易辨别音画是否同步的,但是机器则不然,对于播放器而言,它判断一帧视频和一帧音频是否要在同一个时间渲染和播放,依靠的完全是该数据携带的时间戳信息. 如果内容的生产端给音视频数据打的时间戳本身就有问题的话,播放器也往往无能为力了,因此,音画不同步问题,更多的时候,应该从生产端去排查原因

直播疑难杂症排查(3)— 首开慢

本文是 <直播疑难杂症排查>系列的第三篇文章,我们来看看直播过程中,最重要的一个性能指标:首开. 1. 首开慢的表现 点击播放后,需要好几秒才能显示播放画面. 2. 常见首开慢问题排查 2.1 点击播放后才从服务器取播放地址 播放视频,第一件事就是要拿到播放地址,大多数直播 App,主播的播放地址是由 App 向服务端发 HTTP GET 请求才能拿到的,因此,什么时候去 "拿" 这个播放地址,显得至关重要,常见的做法有如下两种: - App 拉取正在视频列表的时候 - 用

直播疑难杂症排查(6)— 马赛克严重

本文是 <直播疑难杂症排查>系列的第六篇文章,我们重点来看看直播中常见的马赛克问题. 1. 马赛克问题的表现 马赛克主要是指画面中出现多处类似小方块的图像,导致画面的局部或者整体看不清楚的情况. 2. 马赛克严重的问题排查 2.1 视频编码参数配置原因 视频的画质,是由它的编码质量决定的,压缩得越 "厉害",画质损失就越多,马赛克就越严重. - 哪些关键因素决定了编码器的压缩质量呢 ? 编码器最重要的五个参数:画质级别.码率.帧率.GOP 大小.码控方式 画质级别:H.26

如何解决直播过程中的直播功耗高问题 | 直播疑难杂症排查

继<直播技术详解>系列文章之后,我们推出了这个新的系列<直播疑难杂症排查>,把解决直播问题的经验逐步分享出来,同时也会穿插一些音视频开发的基础知识和优化经验,希望能够帮助到直播领域的开发者们. 本系列会涵盖的内容包括但不限于如下一些主题: 播放失败 直播卡顿 首开慢 延时高 音画不同步 马赛克严重 播放黑屏.花屏.绿屏 播放杂音.噪音.回声 点播拖动不准 直播发热问题 其他问题(待续) 问题现象 直播过程中手机发热严重,耗电快. 问题排查 导致手机功耗高,发热严重的根本因素,无外乎

《直播疑难杂症排查》之五: 音画不同步

七牛直播云在 2016 年 6 月发布之后,帮助广大客户如熊猫TV.龙珠直播等解决过形形色色的问题.如直播卡顿.马赛克.花屏.黑屏.杂音.音画不同步等等等等,这其中,有一些是网络原因,有一些是开发者的使用姿势问题,有一些是参数配置错误,当然,也有一些是 SDK 本身的问题.总结下来,如果开发者能够对直播领域的一些基础知识有更深入的了解,掌握一些基本的排障手段,很多问题是能够很快自行解决的,甚至也能够更好地防患于未然. 因此,继<直播技术详解>系列文章之后,我们推出了这个新的系列<直播疑难