音视频问题汇总--播放器seekto功能优化

博客记录了在Android播放器中遇到的SeekTo问题,即视频播放时如何准确seek到上次离开的位置。讨论了关键帧概念,I帧、P帧、B帧的区别,并提供了三种解决方案,包括使用SEEK_CLOSEST模式、ffmpeg转换增加I帧以及通过暂停和重启MediaPlayer实现原地播放。最终选择了兼顾速度和异常情况的策略,得到客户的认可。
摘要由CSDN通过智能技术生成

最近工作中碰到一个问题,关于播放器播放一段视频的需求,因此查找了一些方案,在此记录一下。

背景介绍

客户在设备上把一段视频(好了,就是广告了)当作屏保进行播放,但是点击屏幕进入系统时时要退出屏保播放,进入我们的应用,然后再次进入屏保时继续进行视频播放,并且要从上次退出时播放的位置顺序播放向后循环播放。

这样一段需要,本身用Android自带的MediaPlayer或者MediaCodec进行即可播放,但是涉及到再次进入屏保应用时,还要seekto到上次播放的位置,这里就出现一个seekto不准的小问题,客户无法接受。接触音视频比较多的童鞋都知道,当要seekto到一个位置时,当前帧可能不是关键帧。所以要从该位置播放时就需要从该帧之后最近的一个关键帧开始,这时播放的位置可能不是客户想要的。假设上次播放退出时是00:00:57的位置,但是离这个位置最近是在00:00:59的位置,这时MediaPlayer播放的位置是从00:00:59开始的,客户说这个差距太大了,无法接受。那既然是恰饭人,只能想办法满足客户的需求了。那就从Seekto开始一次冒险之旅吧。

SeekTo介绍

Android播放器自己维护一个状态机,如下图:

如果不熟悉的,建议自行补救(ht

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值