iOS MPMoviePlayerController播放視頻及添加監(jiān)聽事件

iOS提供了叫做MPMoviePlayerController? MPMoviePlayerViewController兩個(gè)類,可以輕松用來實(shí)現(xiàn)視頻播放。MPMoviePlayerViewController只能全屏播放視頻。

本文轉(zhuǎn)自,查看原文請(qǐng)戳這里


#import "MainViewController.h"#import@interface MainViewController ()

//視頻播放器

@property (strong, nonatomic) MPMoviePlayerController *player;

@property (strong, nonatomic) UIImageView *imageView;

@end

@implementation MainViewController

- (void)viewDidLoad

{

[super viewDidLoad];

//實(shí)例化視頻播放器

NSURL *url = [[NSBundle mainBundle]URLForResource:@"promo_full" withExtension:@"mp4"];

//視頻播放是流媒體的播放模式,所謂流媒體就是把視頻數(shù)據(jù)像流水一樣,變加載,變播放。

//? ? //提示:如果url中包含中文,需要添加百分號(hào)。

//? ? NSString *urlString = @"http:www.xxx.com/video/xxx.mp4";

//? ? NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

self.player = [[MPMoviePlayerController alloc]initWithContentURL:url];

//1設(shè)置播放器的大小

[self.player.view setFrame:CGRectMake(0, 0, 320, 180)]; //16:9是主流媒體的樣式

//2將播放器視圖添加到根視圖

[self.view addSubview:self.player.view];

//4播放

[self.player play];

//[self.player stop];

//通過通知中心,以觀察者模式監(jiān)聽視頻播放狀態(tài)

//1 監(jiān)聽播放狀態(tài)

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

//2 監(jiān)聽播放完成

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

//3視頻截圖

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(caputerImage:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:nil];

//3視頻截圖

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(caputerImage:) name:MPMoviePlayerThumbnailImageRequestDidFinishNotification object:nil];

//4退出全屏通知

[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(exitFullScreen) name:MPMoviePlayerDidExitFullscreenNotification object:nil];

//異步視頻截圖,可以在attimes指定一個(gè)或者多個(gè)時(shí)間。

[self.player requestThumbnailImagesAtTimes:@[@10.0f, @20.0f] timeOption:MPMovieTimeOptionNearestKeyFrame];

UIImageView *thumbnailImageView = [[UIImageView alloc]initWithFrame:CGRectMake(80, 200, 160, 90)];

self.imageView = thumbnailImageView;

[self.view addSubview:thumbnailImageView];

}

#pragma mark 退出全屏

- (void)exitFullScreen

{

NSLog(@"退出全屏");

}

#pragma mark -播放器事件監(jiān)聽

#pragma mark 視頻截圖 這個(gè)方法是異步方法

- (void)caputerImage:(NSNotification *)notification

{

NSLog(@"截圖 %@", notification);

UIImage *image = notification.userInfo[@"MPMoviePlayerThumbnailImageKey"];

[self.imageView setImage:image];

}

#pragma mark 播放器事件監(jiān)聽

#pragma mark 播放完成

- (void)finishedPlay

{

NSLog(@"播放完成");

}

#pragma mark 播放器視頻的監(jiān)聽

#pragma mark 播放狀態(tài)變化

/*

MPMoviePlaybackStateStopped,? //停止

MPMoviePlaybackStatePlaying,? //播放

MPMoviePlaybackStatePaused,? //暫停

MPMoviePlaybackStateInterrupted,? //中斷

MPMoviePlaybackStateSeekingForward, //快進(jìn)

MPMoviePlaybackStateSeekingBackward? //快退

*/

- (void)stateChange

{

switch (self.player.playbackState) {

case MPMoviePlaybackStatePaused:

NSLog(@"暫停");

break;

case MPMoviePlaybackStatePlaying:

//設(shè)置全屏播放

[self.player setFullscreen:YES animated:YES];

NSLog(@"播放");

break;

case MPMoviePlaybackStateStopped:

//注意:正常播放完成,是不會(huì)觸發(fā)MPMoviePlaybackStateStopped事件的。

//調(diào)用[self.player stop];方法可以觸發(fā)此事件。

NSLog(@"停止");

break;

default:

break;

}

}

@end

最后編輯于
?著作權(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)容