查看資料和開發(fā)調(diào)試
首先我試用了MPMoviePlayerController/AVPlayer兩種控件都會出現(xiàn)閃屏情況啤誊,AVPlayer速度比MPMoviePlayerController快點螟碎,但是你調(diào)換背景色后依然能看到一閃而過那個閃屏该溯。在網(wǎng)上找了很多資料什么控件寫成全局變量或者屬性啊层坠、提前加載好控件啊适肠。公罕。梳杏。親測無效棺聊。伞租。。
我的解決思路
在進行視頻播放時限佩,會預(yù)先解碼一些內(nèi)容葵诈,而此時如果我們的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;// 應(yīng)該自動播放
[player setControlStyle:(MPMovieControlStyleNone)]; // 播放控制 : 不控制
player.repeatMode = MPMovieRepeatModeOne; // 循環(huán)播放
[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];/ /監(jiān)聽當(dāng)視頻開始或快進或者慢進或者跳過某段播放 用于隱藏_topImgView
[self updateSubViews];
}
- (void) startPlay{
[player play];
}
- (void) hiddenTopImage{
_topImgView.hidden = YES;
}
寫的測試demo 隨便粘了一點關(guān)鍵代碼 思路就是這樣、親自去寫寫測測吧所森,如果有更好的解決方案囱持,也希望能給我分享一下,謝謝;兰谩7鬃薄!