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

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

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

MPMoviePlayerController介紹和簡單使用:支持MOV、MP4、M4V、3GP等常用格式的視頻,它可以進(jì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)引用不然會自然釋放,無法播放文件

self.player = player;

// 提前加載資源

[player prepareToPlay];

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

//在動畫中改變視圖的位置

[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;

}];

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


MPMoviePlayerViewController的介紹和簡單使用:它的使用更加簡單,只需要幾步就能集成上去,但為了讓大家了解更加全面,向大家介紹一下,通過系統(tǒng)通知來控制播放器功能的簡單實現(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)聽播放器的動作

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

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

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

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

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

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


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

//播放器狀態(tài)改變事件會監(jiān)聽播放器所有的狀態(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(@"播放下個視頻");

}

}

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

//移除通知

- (void)dealloc{

[[NSNotificationCenter defaultCenter] removeObserver:self];

}


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

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

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

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