前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MPMoviePlayerController 播放记忆功能(setCurrentPlaybackTime)之前方案可行方案

MPMoviePlayerController 播放记忆功能(setCurrentPlaybackTime)之前方案可行方案

作者头像
陈雨尘
发布2018-06-07 15:16:52
5500
发布2018-06-07 15:16:52
举报
文章被收录于专栏:雨尘分享雨尘分享

最近项目反馈了一个问题,视频播放器播放记忆功能在有些情况下会失效,不能从之前的观看点继续播放,当时我给出的反馈是有时候如果网速不好缓冲不到记录点的,但是后来测试了下优酷等软件发现人家网速不好也能跳到对应的点,这!(不能老是拿网速安慰自己啊?) 既然人家能实现就说明是自己的问题了于是乎就开始了探索。

之前方案

代码语言:javascript
复制
-(void)play{
  if (self.oldTime != 0 ) {
     [self setCurrentPlaybackTime:self.oldTime];
   }
  [super play];
 }

之前处理的就是在点击开始播放的时候判断有没有记忆点,如果有就跳转到记忆点,然后在开始播放,但是问题就是当网速不是很好的情况下 setCurrentPlaybackTime: 这个有可能会跳转不到记忆点或者跳转需要一段时间的缓冲,在setCurrentPlaybackTime: 的动作还没有成功之后就 play ,就会出现播放是从0开始的,不能跳转到记忆点开始播放。当时想的是 setCurrentPlaybackTime: 怎么能找到这个方法的成功回调,在成功回调里在写开始播放,后来发现没有,又尝试了在播放器初始化完成之后(MPMoviePlayerReadyForDisplayDidChangeNotification)就执行setCurrentPlaybackTime:动作,后来发现也不行也会出现跳不到的情况

可行方案

虽然 在 MPMoviePlayerReadyForDisplayDidChangeNotification 里面写不行,但是却给了一种方案,就是在 MPMoviePlayerController 里这些通知回调里面处理也许可行,对相信你也猜到了 onMPMoviePlayerPlaybackStateDidChangeNotification 播放器状态发生改变的时候

代码语言:javascript
复制
 - (void)onMPMoviePlayerPlaybackStateDidChangeNotification
 {
if (self.playbackState == MPMoviePlaybackStatePlaying) {
       [self startDurationTimer];
    if (_oldTime > 0) {
        [super setCurrentPlaybackTime:_oldTime];
        _oldTime = 0;
    }
} else {
    [self stopDurationTimer];
   }
}

测试发现这样做是可行的,希望可以帮到有同样问题的你。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.04.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 之前方案
  • 可行方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档