一. 出现问题

  • 观看自己开播的直播间,经常出现卡顿,而且画面一卡6,7s,重新播放时会出现跳帧,卡顿频率也较高,导致该App可用性极低。

二. 分析

1. 直播架构分析

  • 根据log与抓包分析,其使用协议与后端架构如下:
  • 直播server
    • 国内:福建泉州(联通)、广东佛山、肇庆(电信)
    • 国外:如果ss登陆韩国,则访问韩国机房
  • 拉流CDN
    • 国内:潮州(联通)、揭阳(电信)
    • 国外:如果ss登陆韩国,则访问韩国机房
  • 推流协议
    • RTMP
  • 拉流协议
    • Http-flv
  • 观看端播放器
    • bilibili-ijkplayer

2. log分析

  • 跟进log,发现每当视频卡住和播放时日志如下:

    04-06 16:43:27.027 19089-25159/? D/IJKMEDIA﹕ ffp_toggle_buffering_l: start
    04-06 16:43:27.028 19089-25158/? D/AudioTrack﹕ pause() mState 0
    04-06 16:43:27.028 19089-25123/? D/IJKMEDIA﹕ FFP_MSG_BUFFERING_START:

    ...

    04-06 16:43:33.502 19089-25125/? D/IJKMEDIA﹕ ffp_toggle_buffering_l: end
    04-06 16:43:33.503 19089-25123/? D/IJKMEDIA﹕ FFP_MSG_BUFFERING_END:
    04-06 16:43:33.504 19089-25158/? D/AudioTrack﹕ start() mState 2

  • 部分ijk-player源码(ff_ffplay.c)


  • ijkplayer处理流程为
    • read_thread---> stream_component_open---> decoder_start---> video_thread--->ffplay_video_thread
    • log中,触发pause原因是:ffplay_video_thread在frame_decode时,如果不能从buffer中拿到新的frame,则触发pause,直到buffer满足播放要求后再start。
  • 分析结果
    • 按上面的代码,应用卡顿直接原因:本地buffer为空导致播放停止。但从主播端->观看端整个流程看,网络状况、服务器性能都可能导致/加剧问题。

3. TCP抓包分析

  • 由于App经常卡顿、且卡顿时间较长,为确定是否网络导致,在dump log同时,也抓了包:
  • 虽然有所卡顿,这段时间内数据包还是陆续有来的,卡6、7s不是很正常!根据上述代码,极有可能是App设置的IO buffer比较大,在网络环境较差情况下,触发start所需时间较长。

4. 其他分析

  • 在buffer方面,ijkplayer至少有2类buffer,一是上面提到的IO buffer,另外一类是显示buffer。
  • IO线程把数据读到后,再把数据喂给显示线程,上述2类buffer分别属于这2个线程。
  • 在使用App过程中,当log中输出D/AudioTrack﹕ start()后,画面马上更新(可能伴随跳帧),且无延迟,所以推测:
    • 该App显示buffer相当小
    • 有做额外的丢帧处理
  • 这估计是导致该应用播放频繁卡顿、且跳帧的原因!!!

三. 分析过程中的一些坑

1. Shawdowsocks

  • 本次FQ在OpenWrt上直接部署ss-local进行全局FQ,在抓包时候发现 推流 与 拉流 服务器皆为国内服务器,作为一个海外直播App,国外用户要FQ过来访问墙内服务器实在费解,遂在ss-server上ping相关域名获取ip,发现ss-server获取的ip是国外,按ss原理,DNS解析应在ss-server执行。后面经过排查,发现问题出在OpenWrt上,OpenWrt处理流程是:接到请求,DNS解析(此时,域名对应ip已经解析完毕),出口时走ss-local,到ss-server,访问之前DNS解析后的ip,所以之前是走了一圈国外再回国内,蛋疼!

Ijkplayer直播App卡顿问题分析相关推荐

  1. android系统性能优化(63)---Android APP 卡顿问题分析及解决方案

    Android APP 卡顿问题分析及解决方案 用户对卡顿的感知, 主要来源于界面的刷新. 而界面的性能主要是依赖于设备的UI渲染性能. 如果我们的UI设计过于复杂, 或是实现不够友好,计算绘制算法不 ...

  2. Android中app卡顿原因分析示例

    http://www.cnblogs.com/zhucai/p/weibo-graphics-performance-analyse.html 朱才 专注于Android图形动画 MIUI工程师 博客 ...

  3. Android APP 卡顿问题分析及解决方案

    用户对卡顿的感知, 主要来源于界面的刷新. 而界面的性能主要是依赖于设备的UI渲染性能. 如果我们的UI设计过于复杂, 或是实现不够友好,计算绘制算法不够优化, 设备又不给力, 界面就会像卡住了一样, ...

  4. android电视直播卡顿,电视盒子看直播卡顿原因分析以及教你解决方法!

    原标题:电视盒子看直播卡顿原因分析以及教你解决方法! 其实关于智能机顶盒.智能电视大家最想了解的就是想知道到底能不能流畅的看直播.看视频电影,这里我可以很负责的告诉大家:想要高清.完全不卡顿的看直播电 ...

  5. 关于ios 卡顿检测分析

    很多iOS 开发,开发过程中都会面临到解决App卡顿问题,从而也衍生出很多的方法去解决卡顿,这篇文章来描述下iOS卡顿产生的原因,以及如何进行iOS卡顿检测分析. 了解iOS卡顿原理 像素是如何显示到 ...

  6. 移动APP卡顿问题解决实践

    一.项目背景 本APP为面向用户的一款基于NFC的安全支付产品.本APP本作品将密码学原理.计算机技术.NFC通信技术和数字货币思想有机结合,在全面保障安全性的同时最大限度的提高了消费者的支付体验.相 ...

  7. Android卡顿优化分析

    本篇包含的主要内容如下所示: 1.卡顿优化分析方法与工具 2.自动化卡顿检测方案及优化 在某个 App 的时候,有时我们会看到某个 App 运行起来,即出现了卡现象,如何去定义发生了卡现象呢?马上来了 ...

  8. App卡顿的原因及解决方案

    卡顿现象对我们来说是一个很烦恼的问题,也会给用户使用过程中带来很直观的不良感受,主要是由代码.内存不足等问题引起的常规卡顿和ANR异常,我们可以使用"友盟+u-apm"这款工具进行 ...

  9. 电脑卡顿不流畅是什么原因_什么造成游戏直播画画卡顿、延迟?这三个原因了解一下...

    原标题:什么造成游戏直播画画卡顿.延迟?这三个原因了解一下 从事直播的朋友们相信都有所体会,直播时很容易出现画面卡顿.延迟的现象,这究竟是什么原因造成的呢?最可能是这几点! 1.服务器过载崩溃 说起服 ...

最新文章

  1. 认知智能再突破,阿里 18 篇论文入选 AI 顶会 KDD
  2. xml 里设置变量_[技巧] ApiPost操作设置
  3. 基于 DataLakeAnalytics 做跨地域的数据分析 1
  4. 两个多精度十进制数加法程序设计_Fortran程序设计基础
  5. 【翻译】.NET 5 Preview 1 发布
  6. Spring Cloud Eureka详解
  7. Fiori 实现在网页端调用摄像头扫描二维码进行识别
  8. 微信小程序生成海报工具Painter
  9. c语言数据类型ppt,C语言基本数据类型.ppt
  10. LPVOID和PVOID的区别是什么
  11. 新品上市|A股场内衍生品大盘点
  12. Jenkins ERROR: Server rejected the 1 private key(s)
  13. win10注册表的备份与恢复;对“未将所有数据都成功写入到注册表中。某些项是由系统或其他进程打开的,或者你没有足够的权限执行此操作”问题的理解
  14. app毕业设计开题报告基于Uniapp实现的美食餐厅订单点餐APP
  15. iPhone 小技巧/实用功能
  16. mysql按月份分组查询_mysql如何按月份分组查询
  17. python中文版下载安装-python
  18. 配置静态NAT和配置动态NAT
  19. 关于长期久坐网站开发程序员身体健康的5点建议
  20. 算法基础:4115:鸣人和佐助--广度优先搜索

热门文章

  1. 【蓝桥杯】搜索专题总结——真题讲解
  2. 阿里云栖大会 app加固小记
  3. #每天一篇论文 329/365 EyrISV2:一种用于移动设备上深度神经网络的柔性加速器(一)
  4. 小米手机关闭MIUI10自动更新
  5. dede:arclist 不能调用文章的副栏目或多个副栏目的解决方法 - 小猪加油
  6. 7-12 打印九九口诀表 (15分)
  7. 通话蓝牙耳机哪个牌子好?四款通话质量好的蓝牙耳机推荐
  8. 怎样将录音转换成文字,告别手抄
  9. Java的垃圾回收机制介绍
  10. c/c++面试题(一)