使用AVPlayer遇到的那些坑

使用AVPlayer遇到的那些坑

最近做了一个短视频相关的功,主要是列表页,页面里面都是mp4的视频,需求是同一时间内,只能有一个视频在播放,视频播放器内部的功能也很简单,包含展示播放时间和总时长、全屏功能、进度条拖拽、播放、暂停功能。想要自定义播放器,那肯定就是要用到AVPlayer了,简单的用法有太多教程可以看,这里就不再赘述,主要是来说说都遇到了哪些坑。

调用了[self.player play]时,就能保证视频正常播放么?

首先当status变为了AVPlayerStatusReadyToPlay后,我们就可以调用[self.player play]方法来播放视频了。但并不是调用了play方法之后就真的在播放了。在性能差的机器上表现的尤为明显,开始的时候会显示黑屏。原因是AVPlayer在进行播放的时候,会预先解码一些内容,但在这个时候系统就已经告诉我们可以播放了,其实并不是真正的在播放,可能黑屏之后一两秒之后,就会自动播放了。

如何精准的跳转到某一时刻?

在应用进入后台的时候,我们需要记录当前的播放进度,并且停止播放视频,等到用户回到我们的app之后,继续播放。这里就会遇到一个问题,在这种情况下,根据视频的总时长的不同,会有不同情况的不一致,差值在-5~5秒之间。也就是在回到应用继续播放时,不一定是在压入后台时候的那个时间点。同样在进度条拖拽到最右侧的时候,也会倒退回去几秒钟,如何处理呢?

其实主要的方法是使用系统API的问题,系统提供了定位到某一时刻的API如下:

[self.player seekToTime:self.lastPlayTime toleranceBefore: toleranceAfter: completionHandler:];

如果需要精准定位,那么把toleranceBefore:toleranceAfter:的参数都设置为kCMTimeZero即可。
所以在进入后台返回的时候就可以通过一下代码进行处理

    @try
    {
        DEF_WEAKSELF;
        [self.playerseekToTime:self.lastPlayTimetoleranceBefore:kCMTimeZerotolerance
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值