博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可能是全网最全的移动直播 trouble shooting 手册(9)—— 点播拖动不准
阅读量:5915 次
发布时间:2019-06-19

本文共 842 字,大约阅读时间需要 2 分钟。

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


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

  • 点播拖动不准
  • 直播发热问题
  • 其他问题(待续)

本文为 《直播疑难杂症排查》系列的第九篇文章,我们重点看看播放视频时拖动不准的问题。

问题现象

播放过程中,拖动进度条后,实际播放的位置跟松开拖动时的位置相差很远。

问题排查

由于直播流是实时产生和传输的,是不能拖动的,因此该问题主要出现在 「点播」 或者 「本地文件」 的播放。

1.基本概念

首先,我们要了解播放器拖动的基本原理:

视频是由一系列图像帧组成的,每一个帧都有对应的时间戳。拖动,就是告诉播放一个时间戳,由它直接跳转到指定的这一帧开始播放。

拖动到的时间点 = (进度条的 progress / 进度条最大值 100 )x 视频总时长

2.关键帧间隔太大

由于解码器必须从 I 帧开始解码,才不会出现花屏现象,因此,播放器通常会寻找离 seekTo 视频帧最近的一个关键帧,从该关键帧开始解码播放。

假设关键帧间隔(GOP)是 3s,那么关键帧的时间点排列如下:

0s, 3s, 6s, 9s

如果拖动到 4s 的位置,那么播放器就跳转到第 3s 的关键帧开始解码播放,因此,会产生一定的误差。

关键帧的间隔越大,那么这个误差也就越大。因此,为了更准确地支持拖动,建议不要把关键帧间隔设置得太大。

3.直播丢帧

丢帧的情况多发生在直播场景,由于主播端的网络抖动或者内存不足,导致不得不被迫丢掉一些视频帧,而为了保证客户端解码后不出现花屏,丢帧往往伴随着一整个 GOP 的丢弃。

当 GOP 丢失后,部分关键帧的间隔时间点就会变得更大了,从而导致拖动不准。

为了避免这种情况,建议推流端开启动态码率,在网络不好的时候,主动降低码率,快速发送掉缓冲区中累积的视频帧,从而减少丢帧的情况发生。


推荐阅读:

转载地址:http://ddwvx.baihongyu.com/

你可能感兴趣的文章
Linux 文件基本属性
查看>>
穷养富养知乎见解
查看>>
Shell script for logging cpu and memory usage of a Linux process
查看>>
maven pom文件详解
查看>>
WebView输入框提示
查看>>
初始Dubbo
查看>>
CWebBrowser2获取html的内容
查看>>
Sql server使用Merge关键字做插入或更新操作
查看>>
ios开发跳转
查看>>
JS如何获取iframe内html的body值
查看>>
SAP ECC CO 配置
查看>>
多线程 ThreadPool线程池
查看>>
JavaServer Faces 2.0 can not be installed解决方案
查看>>
PHP获取当前页面的URL
查看>>
mysql 查询数据库表结构
查看>>
PHP收藏
查看>>
imx6 android SD卡启动
查看>>
DataGridView基本操作
查看>>
李洪强漫谈iOS开发[C语言-042]-简单计算器
查看>>
邮件乱码
查看>>