前言
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 <MPMediaPlayback>
@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 <MediaPlayer/MediaPlayer.h>
// 声明媒体播放控件
@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 <MediaPlayer/MediaPlayer.h>
// 声明媒体播放控件
@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)