原文来自七牛云,感谢原作者。

1、播放卡顿的表现

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

  • 频繁出现缓冲
  • 播放不够流畅,画面一卡一卡的

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

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

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

  • 网络带宽不足
  • 播放设备性能不足
  • 视频流时间戳问题

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

原因一:网络带宽不足

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

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

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

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

如何判断主播网络不好

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

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

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

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

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

如何判断观众端网络不好

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

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

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

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

如何判断 CDN 线路不好

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

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

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

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

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

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

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

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

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

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

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

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

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

《直播疑难杂症排查》:播放卡顿相关推荐

  1. 七牛云直播-Android端播放卡顿问题处理

    背景: 七牛直播云主要涉及推流SDK.业务控制SDK.播放SDK.转发平台:而在播放端经常会遇到卡断不能播放的问题,此时可能有两种情况,第一,推流端停止推流,即主播下线:第二,播放端网络慢的原因:所以 ...

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

    本文是 <直播疑难杂症排查>系列的第二篇文章,我们主要分析下如何排查播放卡顿问题. 1. 播放卡顿的表现 播放卡顿的表现总结下来包括但不限于以下这些: 频繁出现缓冲 播放不够流畅,画面一卡 ...

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

    ##播放卡顿的表现 播放卡顿的表现总结下来包括但不限于以下这些: 频繁出现缓冲 播放不够流畅,画面一卡一卡的 ##常见播放卡顿问题排查 从代码层面来看,什么是卡顿?其实是指播放器渲染的帧率太低,比如: ...

  4. [转载]如何解决直播中的播放杂音、噪音、回声问题 | 直播疑难杂症排查

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

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

    本文为 <直播疑难杂症排查>系列的第八篇文章,我们重点看看直播过程中出现的杂音.噪音和回声等问题. 相比于视频而言,音频要敏感得多,视频画面有噪点.马赛克都还是可以勉强被接受,而声音一旦有 ...

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

    第一篇文章我们从播放开始,因为观看直播最重要的一个环节就是打开播放器,很多问题的直接反馈也是来自观众端. 导致播放失败的原因有很多种,不一定是播放器本身的问题,不过通过播放器,我们很容易反过来排查服务 ...

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

    1. 播放失败的表现 播放失败的表现总结下来包括但不限于以下这些: - 界面上一直显示 "加载中",或者提示播放失败的错误 - 播放画面卡死不动,但 UI 按钮可以点击 - 有声音 ...

  8. 直播APP开发公司、直播源码出售《直播疑难杂症排查系列》之 :播放失败

    播放失败的表现 播放失败的表现总结下来包括但不限于以下这些: 界面上一直显示「加载中」,或者提示播放失败的错误: 播放画面卡死不动,但 UI 按钮可以点击: 有声音没有画面,有画面没有声音. 这里并不 ...

  9. 《直播疑难杂症排查》之三:首开慢

    本系列会涵盖的内容包括但不限于如下一些主题: 播放失败 播放卡顿 首开慢 延时高 音画不同步 马赛克严重 播放黑屏.花屏.绿屏 播放杂音.噪音.回声 点播拖动不准 直播发热问题 其他问题(待续) 本文 ...

最新文章

  1. python打包成exe闪退_脚本程序打包后,黑框一闪而过,程序不能运行
  2. 联想激发青年公益创业彰显“责任”意识
  3. “==”和“equals”
  4. 开源项目barcodelib-C#条形码图像生成库
  5. Kali Linux 秘籍 第二章 定制 Kali Linux
  6. 消息称iPhone 14、14 Max仍采用A15处理器
  7. android框架连接mysql_三层架构 android访问MSSQL数据库 程序 (服务器端)
  8. vim使用指北 ---- Global Replacement
  9. jmeter录制脚本的两种方式
  10. Traceview命令
  11. getParameterValues中文乱码
  12. php文件如何转为ppt,pdf文件转换成ppt文件 pdf如何转为ppt
  13. python图像质量评价_OpenCV--Python 图像质量评价.docx
  14. 如何防止你的网站被攻击?
  15. ble HCI 数据格式
  16. 通过rustlings源码了解rust如何从命令行参数里面获取值的方式
  17. leetcode_54. 螺旋矩阵
  18. 信息安全的前景如何?就业渠道有哪些?
  19. 【大学生必备神器网站】免费论文下载、免费2T网盘、各类免费课程、在线高数引擎...收藏了4年的宝藏学习网站最全の整理推荐!
  20. 软件工程项目作业之网上书店项目

热门文章

  1. 小米 A/B 实验场景基于 Apache Doris 的查询提速优化实践
  2. 运行在docker里的nginx添加虚拟目录并设置默认页面
  3. java集合类(collection)
  4. 头歌实践-Java集合类之Set的HashSet之常用方法的使用
  5. Python 遍历绝对路径下的文件树搜索*.后缀打印文件绝对路径
  6. 哈尔,那个失心的少年
  7. 祝大家2018事业有事,大吉大利!
  8. 修改密码springboot+layui
  9. a73*2+a53*2指的是什么_蚂蚁庄园今日答案 买空调时,推销员经常提到的1匹、2匹等,指的是空调的...
  10. python面向对象实例王者荣耀_Python3 类与对象之王者荣耀对战小游戏