iOS四種源生視頻播放器框架比較(一)

蘋(píng)果提供的源生視頻播放器是非常強(qiáng)大的,功能都很齊全,基本都能滿(mǎn)足平時(shí)的開(kāi)發(fā)需求。

首先介紹一下在iOS9.0以后已經(jīng)被廢棄掉的類(lèi):MPMoviePlayerViewController和MPMoviePlayerController. 前者是一個(gè)view,后者是個(gè)Controller。區(qū)別就是MPMoviePlayerViewController不需要自定義視圖的大小和位置,可以直接彈出播放控制器,而MPMoviePlayerController需要設(shè)置自己視圖的大小和位置,并把它添加到父視圖上。

MPMoviePlayerController介紹和簡(jiǎn)單使用:支持MOV、MP4、M4V、3GP等常用格式的視頻,它可以進(jìn)行播放、暫停、停止、全屏的操作,使用簡(jiǎn)單方便。

代碼:// 加載網(wǎng)絡(luò)資源

NSString *urlString = [@"http://baobab.wdjcdn.com/14676170652191(23).mp4" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlString];

//創(chuàng)建控制器

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:url];

CGRect frame = CGRectMake(0, 80, self.view.bounds.size.width, self.view.bounds.size.height * 0.5);

player.view.frame = frame;

//設(shè)置播放器的控制面板風(fēng)格,可以根據(jù)需要自行設(shè)置

//? ? player.controlStyle = MPMovieControlStyleFullscreen;

// 縮放模式

player.scalingMode = MPMovieScalingModeAspectFill;

[self.view addSubview:player.view];

// 必須強(qiáng)引用不然會(huì)自然釋放,無(wú)法播放文件

self.player = player;

// 提前加載資源

[player prepareToPlay];

如果想要實(shí)現(xiàn)橫屏的話,添加一個(gè)按鈕實(shí)現(xiàn)以下方法:

//在動(dòng)畫(huà)中改變視圖的位置

[UIView animateWithDuration:0.3 animations:^{

//旋轉(zhuǎn)

self.player.view.transform = CGAffineTransformRotate(self.player.view.transform, M_PI_2);

//全屏

self.player.view.frame = [UIScreen mainScreen].bounds;

}];

該類(lèi)其他屬性介紹,推薦大家看一篇文章,里面有非常詳細(xì)的介紹:鏈接


MPMoviePlayerViewController的介紹和簡(jiǎn)單使用:它的使用更加簡(jiǎn)單,只需要幾步就能集成上去,但為了讓大家了解更加全面,向大家介紹一下,通過(guò)系統(tǒng)通知來(lái)控制播放器功能的簡(jiǎn)單實(shí)現(xiàn)。

代碼://設(shè)置資源文件路徑 //可以播放網(wǎng)絡(luò)資源,

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"minion_01.mp4" ofType:nil];

NSURL *url = [NSURL fileURLWithPath:filePath];

// 添加播放器

MPMoviePlayerViewController *VC = [[MPMoviePlayerViewController alloc] initWithContentURL:url];

[self.navigationController presentViewController:VC animated:YES completion:nil];

//添加全局屬性

self.playerVC= VC;

添加通知:

//添加通知監(jiān)聽(tīng)播放器的動(dòng)作

//監(jiān)聽(tīng)播放器狀態(tài)改變

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieDidChangeAction) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];

//監(jiān)聽(tīng)通知播放結(jié)束

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieDidFinishAction) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

//監(jiān)聽(tīng)視頻加載狀態(tài)改變

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadStateDidChangeAction) name:MPMoviePlayerLoadStateDidChangeNotification object:nil];


實(shí)現(xiàn)通知方法:

//播放器狀態(tài)改變事件會(huì)監(jiān)聽(tīng)播放器所有的狀態(tài)變化

- (void)movieDidChangeAction

{

NSLog(@"播放器事件改變");

switch (self.playerVC.moviePlayer.playbackState) {

? ? ? ? ? ? ? ? ?case MPMoviePlaybackStatePlaying:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"正在播放");

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? ?case MPMoviePlaybackStatePaused:

? ? ? ? ? ? ? ? ? ? ? ? ? ? NSLog(@"暫停播放");

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? ?case MPMoviePlaybackStateStopped:

? ? ? ? ? ? ? ? ? ? ? ? ? ?NSLog(@"停止播放");

? ? ? ? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ? case MPMoviePlaybackStateInterrupted:

? ? ? ? ? ? ? ? ? ? ? ? ? ?NSLog(@"播放中斷");

? ? ? ? ? ? ? ? ? ? ? ? ? ?break;

? ? ? ? ? ? ?case MPMoviePlaybackStateSeekingForward:

? ? ? ? ? ? ? ? ? ? ? ? ?NSLog(@"向前");

? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ?case MPMoviePlaybackStateSeekingBackward:

? ? ? ? ? ? ? ? ? ? ? NSLog(@"向后");

? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? default:

? ? ? ? ? ? ? ?break;

}

}

- (void)movieDidFinishAction{

? ?NSLog(@"視頻播放完畢"); ?

}

- (void)loadStateDidChangeAction{

if (self.playerVC.moviePlayer.loadState == MPMovieLoadStateUnknown) {

NSLog(@"播放下個(gè)視頻");

}

}

注意:不要忘記移除通知!

//移除通知

- (void)dealloc{

[[NSNotificationCenter defaultCenter] removeObserver:self];

}


提供iOS四種源生視頻播放器框架比較(二)的鏈接:點(diǎn)擊跳轉(zhuǎn)

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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