赞
踩
最近做了一个短视频相关的功,主要是列表页,页面里面都是mp4的视频,需求是同一时间内,只能有一个视频在播放,视频播放器内部的功能也很简单,包含展示播放时间和总时长、全屏功能、进度条拖拽、播放、暂停功能。想要自定义播放器,那肯定就是要用到AVPlayer了,简单的用法有太多教程可以看,这里就不再赘述,主要是来说说都遇到了哪些坑。
首先当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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。