前言
MP_EXTERN_CLASS_AVAILABLE(3_2) NS_DEPRECATED_IOS(3_2, 9_0, "Use AVPlayerViewController in AVKit.") @interface MPMoviePlayerViewController : UIViewController @available(iOS, introduced=3.2, deprecated=9.0, message="Use AVPlayerViewController in AVKit.") public class MPMoviePlayerViewController : UIViewController MP_EXTERN_CLASS_AVAILABLE(2_0) NS_DEPRECATED_IOS(2_0, 9_0, "Use AVPlayerViewController in AVKit.") @interface MPMoviePlayerController : NSObject@available(iOS, introduced=2.0, deprecated=9.0, message="Use AVPlayerViewController in AVKit.") public class MPMoviePlayerController : NSObject, MPMediaPlayback
- 视频播放:
- 添加库文件:MediaPlayer.framework
- 包含头文件:#import <MediaPlayer/MediaPlayer.h>
1、本地/网络视频播放
1.1 使用 MPMoviePlayerViewController 播放
Objective-C
// 添加库文件:MediaPlayer.framework // 包含头文件:#import
// 声明媒体播放控件 @property(nonatomic, retain)MPMoviePlayerViewController *mpMoviePlayerVC; // 加载文件路径,加载本地视频 NSURL *mediaUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"步步高手机" ofType:@"mp4"]]; // 加载文件路径,加载网络视频 NSURL *mediaUrl = [NSURL URLWithString:@"http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4"]; // 实例化媒体播放控件 mpMoviePlayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:mediaUrl]; // 弹出播放页面,开始播放 [self presentMoviePlayerViewControllerAnimated: mpMoviePlayerVC]; Swift
// 添加库文件:MediaPlayer.framework // 包含头文件:import MediaPlayer // 声明媒体播放控件 var mpMoviePlayerVC:MPMoviePlayerViewController! // 加载文件路径,加载本地视频 let mediaUrl:NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("步步高手机", ofType: "mp4")!) // 加载文件路径,加载网络视频 let mediaUrl:NSURL = NSURL(string: "http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4")! // 实例化媒体播放控件 mpMoviePlayerVC = MPMoviePlayerViewController(contentURL: mediaUrl) // 弹出播放页面,开始播放 self.presentMoviePlayerViewControllerAnimated(mpMoviePlayerVC)
1.2 使用 MPMoviePlayerController 播放
Objective-C
// 添加库文件:MediaPlayer.framework // 包含头文件:#import
// 声明媒体播放控件 @property(nonatomic, retain)MPMoviePlayerController *mpMoviePlayer; // 加载文件路径,加载本地视频 NSURL *mediaUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"步步高手机" ofType:@"mp4"]]; // 加载文件路径,加载网络视频 NSURL *mediaUrl = [NSURL URLWithString:@"http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4"]; // 实例化媒体播放控件 mpMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaUrl]; // 添加播放页面,开始播放 [self.view addSubview:mpMoviePlayer.view]; // 设置是否全屏播放,必须设置,必须放在添加页面之后设置,为 NO 时,必须设置 mpMoviePlayer.view.frame mpMoviePlayer.fullscreen = YES; Swift
// 添加库文件:MediaPlayer.framework // 包含头文件:import MediaPlayer // 声明媒体播放控件 var mpMoviePlayer:MPMoviePlayerController! // 加载文件路径,加载本地视频 let mediaUrl:NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("步步高手机", ofType: "mp4")!) // 加载文件路径,加载网络视频 let mediaUrl:NSURL = NSURL(string: "http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4")! // 实例化媒体播放控件 mpMoviePlayer = MPMoviePlayerController(contentURL: mediaUrl) // 添加播放页面,开始播放 self.view.addSubview(mpMoviePlayer.view) // 设置是否全屏播放,必须设置,必须放在添加页面之后设置,为 NO 时,必须设置 mpMoviePlayer.view.frame mpMoviePlayer.fullscreen = true
2、本地/网络视频播放设置
2.1 使用 MPMoviePlayerViewController 播放
Objective-C
// 显示播放页面 /* 弹出播放页面,开始播放 */ [self presentMoviePlayerViewControllerAnimated: mpMoviePlayerVC]; // 开始播放 [mpMoviePlayerVC.moviePlayer play]; // 暂停播放 [mpMoviePlayerVC.moviePlayer pause]; // 停止播放 /* 停止播放会自动退出播放界面 */ [mpMoviePlayerVC.moviePlayer stop]; // 退出播放 /* 退出播放界面,停止播放 */ [self dismissMoviePlayerViewControllerAnimated];
Swift
// 显示播放页面 /* 弹出播放页面,开始播放 */ self.presentMoviePlayerViewControllerAnimated(mpMoviePlayerVC) // 开始播放 mpMoviePlayerVC.moviePlayer.play() // 暂停播放 mpMoviePlayerVC.moviePlayer.pause() // 停止播放 /* 停止播放会自动退出播放界面 */ mpMoviePlayerVC.moviePlayer.stop() // 退出播放 /* 退出播放界面,停止播放 */ self.dismissMoviePlayerViewControllerAnimated()
2.2 使用 MPMoviePlayerController 播放
Objective-C
// 判断媒体是否正在通过 AirPlay 播放 BOOL airPlayVideoActive = mpMoviePlayer.isAirPlayVideoActive; // 判断是否准备好显示 BOOL readyForDisplay = mpMoviePlayer.readyForDisplay; // 获取播放控制器所在的视图 /* The view in which the media and playback controls are displayed */ UIView *playbackView = mpMoviePlayer.view; // 获取媒体播放背景视图 /* A view for customization which is always displayed behind movie content */ UIView *backgroundView = mpMoviePlayer.backgroundView; // 获取播放状态 /* MPMoviePlaybackStateStopped, 停止 MPMoviePlaybackStatePlaying, 播放 MPMoviePlaybackStatePaused, 暂停 MPMoviePlaybackStateInterrupted, 中断 MPMoviePlaybackStateSeekingForward, 快进 MPMoviePlaybackStateSeekingBackward 快退 Returns the current playback state of the movie player */ MPMoviePlaybackState playbackState = mpMoviePlayer.playbackState; // 获取网络加载状态 /* MPMovieLoadStateUnknown = 0, 状态未知 MPMovieLoadStatePlayable = 1 << 0, 可播放 MPMovieLoadStatePlaythroughOK = 1 << 1, Playback will be automatically started in this state when shouldAutoplay is YES MPMovieLoadStateStalled = 1 << 2, Playback will be automatically paused in this state, if started Returns the network load state of the movie player */ MPMovieLoadState loadState = mpMoviePlayer.loadState; // 获取媒体类型 /* MPMovieMediaTypeMaskNone = 0, MPMovieMediaTypeMaskVideo = 1 << 0, MPMovieMediaTypeMaskAudio = 1 << 1 The types of media in the movie, or MPMovieMediaTypeNone if not known */ MPMovieMediaTypeMask movieMediaType = mpMoviePlayer.movieMediaTypes; // 获取媒体原始尺寸 /* The natural size of the movie, or CGSizeZero if not known/applicable */ CGSize naturalSize = mpMoviePlayer.naturalSize; // 获取媒体播放时长 /* The duration of the movie, or 0.0 if not known */ NSTimeInterval duration = mpMoviePlayer.duration; // 获取当前可播放的时长 /* for progressively downloaded network content */ NSTimeInterval playableDuration = mpMoviePlayer.playableDuration; // 设置播放页面大小 mpMoviePlayer.view.frame = CGRectMake(10, 30, self.view.bounds.size.width - 20, 200); // 缓冲视频 /* 即使不写,系统也会自动调用该方法 */ [mpMoviePlayer prepareToPlay]; // 显示播放页面 /* 添加播放页面,开始播放 */ [self.view addSubview:mpMoviePlayer.view]; // 开始播放 [mpMoviePlayer play]; // 暂停播放 [mpMoviePlayer pause]; // 停止播放 [mpMoviePlayer stop]; // 设置全屏 [mpMoviePlayer setFullscreen:YES animated:YES]; // 快进 [mpMoviePlayer beginSeekingForward]; // 快退 [mpMoviePlayer beginSeekingBackward]; // 停止快进或快退 [mpMoviePlayer endSeeking]; // 设置是否全屏播放 /* 必须设置,必须放在添加页面之后设置,设置为 NO 时,必须设置 mpMoviePlayer.view.frame 的大小 */ mpMoviePlayer.fullscreen = NO; // 设置是否自动开始播放 /* 默认为 YES */ mpMoviePlayer.shouldAutoplay = NO; // 设置是否允许通过 AirPlay 播放 /* Defaults to YES on iOS 5.0 and later */ mpMoviePlayer.allowsAirPlay = NO; // 设置当前播放时间 mpMoviePlayer.currentPlaybackTime = 10; // 设置当前播放速度 /* 默认为 1.0 (normal speed),设为 0.0 时暂停播放 */ mpMoviePlayer.currentPlaybackRate = 1.0; // 设置开始播放时间 /* The start time of movie playback. Defaults to NaN, indicating the natural start time of the movie */ mpMoviePlayer.initialPlaybackTime = 10; // 设置停止播放时间 /* The end time of movie playback. Defaults to NaN, which indicates natural end time of the movie */ mpMoviePlayer.endPlaybackTime = 20; // 设置播放控制器类型 /* MPMovieControlStyleNone, 没有控制器, No controls MPMovieControlStyleEmbedded, 嵌入式,默认,Controls for an embedded view 可将播放窗口全屏化 MPMovieControlStyleFullscreen, 全屏式, Controls for fullscreen playback MPMovieControlStyleDefault = MPMovieControlStyleEmbedded */ mpMoviePlayer.controlStyle = MPMovieControlStyleEmbedded; // 设置重复播放模式 /* MPMovieRepeatModeNone, 不重复,默认 MPMovieRepeatModeOne 重复播放 */ mpMoviePlayer.repeatMode = MPMovieRepeatModeNone; // 设置画面缩放模式 /* MPMovieScalingModeNone, 不做任何缩放 MPMovieScalingModeAspectFit, 适应屏幕大小,保持宽高比,默认 MPMovieScalingModeAspectFill, 充满屏幕,保持宽高比 MPMovieScalingModeFill 充满屏幕,不保持宽高比 */ mpMoviePlayer.scalingMode = MPMovieScalingModeAspectFit; // 设置媒体资源类型 /* The playback type of the movie. Defaults to MPMovieSourceTypeUnknown. Specifying a playback type before playing the movie can result in faster load times. MPMovieSourceTypeUnknown, MPMovieSourceTypeFile, Local or progressively downloaded network content MPMovieSourceTypeStreaming Live or on-demand streaming content */ mpMoviePlayer.movieSourceType = MPMovieSourceTypeFile;
Swift
// 判断媒体是否正在通过 AirPlay 播放 let airPlayVideoActive:Bool = mpMoviePlayer.airPlayVideoActive // 判断是否准备好显示 let readyForDisplay:Bool = mpMoviePlayer.readyForDisplay // 获取播放控制器所在的视图 /* The view in which the media and playback controls are displayed */ let playbackView:UIView = mpMoviePlayer.view // 获取媒体播放背景视图 /* A view for customization which is always displayed behind movie content */ let backgroundView:UIView = mpMoviePlayer.backgroundView // 获取播放状态 /* Stopped, 停止 Playing, 播放 Paused, 暂停 Interrupted, 中断 SeekingForward, 快进 SeekingBackward 快退 Returns the current playback state of the movie player */ let playbackState:MPMoviePlaybackState = mpMoviePlayer.playbackState // 获取网络加载状态 /* Unknown = 0, 状态未知 Playable = 1 << 0, 可播放 PlaythroughOK = 1 << 1, Playback will be automatically started in this state when shouldAutoplay is YES Stalled = 1 << 2, Playback will be automatically paused in this state, if started Returns the network load state of the movie player */ let loadState:MPMovieLoadState = mpMoviePlayer.loadState // 获取媒体类型 /* MaskNone = 0, MaskVideo = 1 << 0, MaskAudio = 1 << 1 The types of media in the movie, or MPMovieMediaTypeNone if not known */ let movieMediaType:MPMovieMediaTypeMask = mpMoviePlayer.movieMediaTypes // 获取媒体原始尺寸 /* The natural size of the movie, or CGSizeZero if not known/applicable */ let naturalSize:CGSize = mpMoviePlayer.naturalSize // 获取媒体播放时长 /* The duration of the movie, or 0.0 if not known */ let duration:NSTimeInterval = mpMoviePlayer.duration // 获取当前可播放的时长 /* for progressively downloaded network content */ let playableDuration:NSTimeInterval = mpMoviePlayer.playableDuration // 设置播放页面大小 mpMoviePlayer.view.frame = CGRectMake(10, 30, self.view.bounds.size.width - 20, 200) // 缓冲视频 /* 即使不写,系统也会自动调用该方法 */ mpMoviePlayer.prepareToPlay() // 显示播放页面 /* 添加播放页面,开始播放 */ self.view.addSubview(mpMoviePlayer.view) // 开始播放 mpMoviePlayer.play() // 暂停播放 mpMoviePlayer.pause() // 停止播放 mpMoviePlayer.stop() // 设置全屏 mpMoviePlayer.setFullscreen(true, animated: true) // 快进 mpMoviePlayer.beginSeekingForward() // 快退 mpMoviePlayer.beginSeekingBackward() // 停止快进或快退 mpMoviePlayer.endSeeking() // 设置是否全屏播放 /* 必须设置,必须放在添加页面之后设置,设置为 NO 时,必须设置 mpMoviePlayer.view.frame 的大小 */ mpMoviePlayer.fullscreen = false // 设置是否自动开始播放 /* 默认为 YES */ mpMoviePlayer.shouldAutoplay = false // 设置是否允许通过 AirPlay 播放 /* Defaults to YES on iOS 5.0 and later */ mpMoviePlayer.allowsAirPlay = false // 设置当前播放时间 mpMoviePlayer.currentPlaybackTime = 10 // 设置当前播放速度 /* 默认为 1.0 (normal speed),设为 0.0 时暂停播放 */ mpMoviePlayer.currentPlaybackRate = 1.0 // 设置开始播放时间 /* The start time of movie playback. Defaults to NaN, indicating the natural start time of the movie */ mpMoviePlayer.initialPlaybackTime = 10 // 设置停止播放时间 /* The end time of movie playback. Defaults to NaN, which indicates natural end time of the movie */ mpMoviePlayer.endPlaybackTime = 20 // 设置播放控制器类型 /* None, 没有控制器, No controls Embedded, 嵌入式,默认,Controls for an embedded view 可将播放窗口全屏化 Fullscreen, 全屏式, Controls for fullscreen playback */ mpMoviePlayer.controlStyle = MPMovieControlStyle.Embedded // 设置重复播放模式 /* None, 不重复,默认 One 重复播放 */ mpMoviePlayer.repeatMode = MPMovieRepeatMode.None // 设置画面缩放模式 /* None, 不做任何缩放 AspectFit, 适应屏幕大小,保持宽高比,默认 AspectFill, 充满屏幕,保持宽高比 Fill 充满屏幕,不保持宽高比 */ mpMoviePlayer.scalingMode = MPMovieScalingMode.AspectFit // 设置媒体资源类型 /* The playback type of the movie. Defaults to MPMovieSourceTypeUnknown. Specifying a playback type before playing the movie can result in faster load times. Unknown, File, Local or progressively downloaded network content Streaming Live or on-demand streaming content */ mpMoviePlayer.movieSourceType = MPMovieSourceType.File
3、监听播放进度
// Movie Property Notifications:媒体属性观察者 MPMovieMediaTypesAvailableNotification // 媒体属性可获取 MPMovieSourceTypeAvailableNotification // 媒体类型是 MPMovieSourceTypeUnknown MPMovieDurationAvailableNotification // 媒体播放时长可获取 MPMovieNaturalSizeAvailableNotification // 媒体原始尺寸可获取 // Movie Player Notifications:媒体播放观察者 MPMediaPlaybackIsPreparedToPlayDidChangeNotification // 准备播放 MPMoviePlayerPlaybackDidFinishNotification // 播放完成或退出播放 MPMoviePlayerPlaybackDidFinishReasonUserInfoKey // NSNumber (MPMovieFinishReason) MPMoviePlayerPlaybackStateDidChangeNotification // 播放状态改变,通过程序或者用户操作改变 MPMoviePlayerScalingModeDidChangeNotification // 画面缩放模式改变 MPMoviePlayerLoadStateDidChangeNotification // 网络加载状态改变 MPMoviePlayerNowPlayingMovieDidChangeNotification // 当前播放媒体改变 MPMoviePlayerWillEnterFullscreenNotification // 将要进入全屏播放状态 MPMoviePlayerDidEnterFullscreenNotification // 已经进入全屏播放状态 MPMoviePlayerWillExitFullscreenNotification // 将要退出全屏播放状态 MPMoviePlayerDidExitFullscreenNotification // 已经退出全屏播放状态 MPMoviePlayerFullscreenAnimationDurationUserInfoKey // NSNumber of double (NSTimeInterval) MPMoviePlayerFullscreenAnimationCurveUserInfoKey // NSNumber of NSUInteger (UIViewAnimationCurve) MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification // 开始或停止通过 AirPlay 播放 MPMoviePlayerReadyForDisplayDidChangeNotification // 准备好显示
Objective-C
// 添加系统通知观察者 /* 观察的状态发生改变时将会调用添加的相应方法进行处理 */ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playFinished) name:MPMoviePlayerPlaybackDidFinishNotification object:mpMoviePlayer]; // 观察者响应事件 - (void)playFinished { } // 取消监听 [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:mpMoviePlayer];
Swift
// 添加系统通知观察者 /* 观察的状态发生改变时将会调用添加的相应方法进行处理 */ NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MpMoviePlayerController.playFinished), name: MPMoviePlayerPlaybackDidFinishNotification, object: mpMoviePlayer) // 观察者响应事件 func playFinished() { } // 取消监听 NSNotificationCenter.defaultCenter().removeObserver(self, name: MPMoviePlayerPlaybackDidFinishNotification, object: mpMoviePlayer)