【iOS】视频引导页视频开始闪屏黑屏解决方案

查看资料和开发调试
首先我试用了MPMoviePlayerController/AVPlayer两种控件都会出现闪屏情况,AVPlayer速度比MPMoviePlayerController快点,但是你调换背景色后依然能看到一闪而过那个闪屏。在网上找了很多资料什么控件写成全局变量或者属性啊、提前加载好控件啊。。。亲测无效。。。

我的解决思路
在进行视频播放时,会预先解码一些内容,而此时如果我们的App使用CPU过多,I/O读写过多时,这个过程可能要花费一点时间,也就是闪屏那一点。
上面说的很对,但是一直没有找到解决方案。
看视频时我们都能看到一种情况,视频播放开始或者加载中都会有图像显示在播放器上,而此处我想的是在我的视频播放器上面覆盖一层imageview,用于显示截取的视频第一帧图片,我想说到这里大家都明白了,很笨的方法,但是亲测效果很好,下面说一下步骤吧。。

思路&代码

image覆盖层

- (UIImageView *)topImgView
{
    if (!_topImgView) {
        
        _topImgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, ScreenHeight)];

        _topImgView.contentMode = UIViewContentModeScaleToFill;
        _topImgView.hidden = NO;
        _topImgView.opaque = YES;
    }
    return  _topImgView;
}

palyer初始化

- (void)setupPlayer{
  NSURL * movieURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"hello" ofType:@"mp4"]];
    player = [[MPMoviePlayerController alloc] initWithContentURL: movieURL];
    
    UIImage  *thumbnail = [player thumbnailImageAtTime:0.1 timeOption:MPMovieTimeOptionNearestKeyFrame];//截取视频第一帧图片
    self.topImgView.image = thumbnail;
    
    player.shouldAutoplay = NO;// 应该自动播放
   
    [player setControlStyle:(MPMovieControlStyleNone)]; // 播放控制 : 不控制
  
    player.repeatMode = MPMovieRepeatModeOne;  // 循环播放
    [player prepareToPlay];
    [player.view setFrame:[UIScreen mainScreen].bounds];
   
    player.scalingMode = MPMovieScalingModeAspectFill; // 缩放模式, 宽度或高度最小的那个等于屏幕宽或高

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(startPlay) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];//Posted when the network load state changes.用于开始播放

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hiddenTopImage) name:AVPlayerItemTimeJumpedNotification object:nil];/ /监听当视频开始或快进或者慢进或者跳过某段播放 用于隐藏_topImgView
    [self updateSubViews];
}
- (void) startPlay{
        [player play];
}
- (void) hiddenTopImage{
_topImgView.hidden = YES;
}

写的测试demo 随便粘了一点关键代码 思路就是这样、亲自去写写测测吧,如果有更好的解决方案,也希望能给我分享一下,谢谢!!!

你可能感兴趣的:(【iOS】视频引导页视频开始闪屏黑屏解决方案)