【iOS】視頻引導(dǎo)頁視頻開始閃屏黑屏解決方案

查看資料和開發(fā)調(diào)試
首先我試用了MPMoviePlayerController/AVPlayer兩種控件都會(huì)出現(xiàn)閃屏情況,AVPlayer速度比MPMoviePlayerController快點(diǎn),但是你調(diào)換背景色后依然能看到一閃而過那個(gè)閃屏。在網(wǎng)上找了很多資料什么控件寫成全局變量或者屬性啊、提前加載好控件啊。。。親測(cè)無效。。。

我的解決思路
在進(jìn)行視頻播放時(shí),會(huì)預(yù)先解碼一些內(nèi)容,而此時(shí)如果我們的App使用CPU過多,I/O讀寫過多時(shí),這個(gè)過程可能要花費(fèi)一點(diǎn)時(shí)間,也就是閃屏那一點(diǎn)。
上面說的很對(duì),但是一直沒有找到解決方案。
看視頻時(shí)我們都能看到一種情況,視頻播放開始或者加載中都會(huì)有圖像顯示在播放器上,而此處我想的是在我的視頻播放器上面覆蓋一層imageview,用于顯示截取的視頻第一幀圖片,我想說到這里大家都明白了,很笨的方法,但是親測(cè)效果很好,下面說一下步驟吧。。

思路&代碼

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;// 應(yīng)該自動(dòng)播放
   
    [player setControlStyle:(MPMovieControlStyleNone)]; // 播放控制 : 不控制
  
    player.repeatMode = MPMovieRepeatModeOne;  // 循環(huán)播放
    [player prepareToPlay];
    [player.view setFrame:[UIScreen mainScreen].bounds];
   
    player.scalingMode = MPMovieScalingModeAspectFill; // 縮放模式, 寬度或高度最小的那個(gè)等于屏幕寬或高

    [[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];/ /監(jiān)聽當(dāng)視頻開始或快進(jìn)或者慢進(jìn)或者跳過某段播放 用于隱藏_topImgView
    [self updateSubViews];
}
- (void) startPlay{
        [player play];
}
- (void) hiddenTopImage{
_topImgView.hidden = YES;
}

寫的測(cè)試demo 隨便粘了一點(diǎn)關(guān)鍵代碼 思路就是這樣、親自去寫寫測(cè)測(cè)吧,如果有更好的解決方案,也希望能給我分享一下,謝謝?。?!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容