使用MPMoviePlayerController播放在线视频

来源:互联网 发布:美国零售数据公布时间 编辑:程序博客网 时间:2024/05/05 14:01

一 MPMoviePlayerController 简介

在iOS中播放视频可以使用MediaPlayer.framework种的MPMoviePlayerController类来完成,它支持本地视频和网络视频播放。这个类实现了MPMediaPlayback协议,因此具备一般的播放器控制功能,例如播放、暂停、停止等。下面列出了MPMoviePlayerController的常用属性和方法:

属性说明@property (nonatomic, copy) NSURL *contentURL播放媒体URL,这个URL可以是本地路径,也可以是网络路径@property (nonatomic, readonly) UIView *view播放器视图,如果要显示视频必须将此视图添加到控制器视图中@property (nonatomic, readonly) UIView *backgroundView播放器背景视图@property (nonatomic, readonly) MPMoviePlaybackState playbackState媒体播放状态,枚举类型:
MPMoviePlaybackStateStopped:停止播放
MPMoviePlaybackStatePlaying:正在播放
MPMoviePlaybackStatePaused:暂停
MPMoviePlaybackStateInterrupted:中断
MPMoviePlaybackStateSeekingForward:向前定位
MPMoviePlaybackStateSeekingBackward:向后定位@property (nonatomic, readonly) MPMovieLoadState loadState网络媒体加载状态,枚举类型:
MPMovieLoadStateUnknown:位置类型
MPMovieLoadStatePlayable:
MPMovieLoadStatePlaythroughOK:这种状态如果shouldAutoPlay为YES将自动播放
MPMovieLoadStateStalled:停滞状态@property (nonatomic) MPMovieControlStyle controlStyle控制面板风格,枚举类型:
MPMovieControlStyleNone:无控制面板 
MPMovieControlStyleEmbedded:嵌入视频风格 
MPMovieControlStyleFullscreen:全屏 
MPMovieControlStyleDefault:默认风格@property (nonatomic) MPMovieRepeatMode repeatMode;重复播放模式,枚举类型:
MPMovieRepeatModeNone:不重复,默认值
MPMovieRepeatModeOne:重复播放@property (nonatomic) BOOL shouldAutoplay当网络媒体缓存到一定数据时是否自动播放,默认为YES@property (nonatomic, getter=isFullscreen) BOOL fullscreen是否全屏展示,默认为NO,注意如果要通过此属性设置全屏必须在视图显示完成后设置,否则无效@property (nonatomic) MPMovieScalingMode scalingMode视频缩放填充模式,枚举类型:
MPMovieScalingModeNone:不进行任何缩放
MPMovieScalingModeAspectFit:固定缩放比例并且尽量全部展示视频,不会裁切视频
MPMovieScalingModeAspectFill:固定缩放比例并填充满整个视图展示,可能会裁切视频
MPMovieScalingModeFill:不固定缩放比例压缩填充整个视图,视频不会被裁切但是比例失衡@property (nonatomic, readonly) BOOL readyForDisplay是否有相关媒体被播放@property (nonatomic, readonly) MPMovieMediaTypeMask movieMediaTypes媒体类别,枚举类型:
MPMovieMediaTypeMaskNone:未知类型
MPMovieMediaTypeMaskVideo:视频
MPMovieMediaTypeMaskAudio:音频@property (nonatomic) MPMovieSourceType movieSourceType媒体源,枚举类型:
MPMovieSourceTypeUnknown:未知来源
MPMovieSourceTypeFile:本地文件
MPMovieSourceTypeStreaming:流媒体(直播或点播)@property (nonatomic, readonly) NSTimeInterval duration媒体时长,如果未知则返回0@property (nonatomic, readonly) NSTimeInterval playableDuration媒体可播放时长,主要用于表示网络媒体已下载视频时长@property (nonatomic, readonly) CGSize naturalSize视频实际尺寸,如果未知则返回CGSizeZero@property (nonatomic) NSTimeInterval initialPlaybackTime起始播放时间@property (nonatomic) NSTimeInterval endPlaybackTime终止播放时间@property (nonatomic) BOOL allowsAirPlay是否允许无线播放,默认为YES@property (nonatomic, readonly, getter=isAirPlayVideoActive) BOOL airPlayVideoActive当前媒体是否正在通过AirPlay播放@property(nonatomic, readonly) BOOL isPreparedToPlay是否准备好播放@property(nonatomic) NSTimeInterval currentPlaybackTime当前播放时间,单位:秒@property(nonatomic) float currentPlaybackRate当前播放速度,如果暂停则为0,正常速度为1.0,非0数据表示倍率对象方法说明- (instancetype)initWithContentURL:(NSURL *)url使用指定的URL初始化媒体播放控制器对象- (void)setFullscreen:(BOOL)fullscreen animated:(BOOL)animated设置视频全屏,注意如果要通过此方法设置全屏则必须在其视图显示之后设置,否则无效- (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option获取在指定播放时间的视频缩略图,第一个参数是获取缩略图的时间点数组;第二个参数代表时间点精度,枚举类型:
MPMovieTimeOptionNearestKeyFrame:时间点附近
MPMovieTimeOptionExact:准确时间- (void)cancelAllThumbnailImageRequests取消所有缩略图获取请求- (void)prepareToPlay准备播放,加载视频数据到缓存,当调用play方法时如果没有准备好会自动调用此方法- (void)play开始播放- (void)pause暂停播放- (void)stop停止播放- (void)beginSeekingForward向前定位- (void)beginSeekingBackward向后定位- (void)endSeeking停止快进/快退通知说明MPMoviePlayerScalingModeDidChangeNotification视频缩放填充模式发生改变MPMoviePlayerPlaybackDidFinishNotification媒体播放完成或用户手动退出,具体完成原因可以通过通知userInfo中的key为MPMoviePlayerPlaybackDidFinishReasonUserInfoKey的对象获取MPMoviePlayerPlaybackStateDidChangeNotification播放状态改变,可配合playbakcState属性获取具体状态MPMoviePlayerLoadStateDidChangeNotification媒体网络加载状态改变MPMoviePlayerNowPlayingMovieDidChangeNotification当前播放的媒体内容发生改变MPMoviePlayerWillEnterFullscreenNotification将要进入全屏MPMoviePlayerDidEnterFullscreenNotification进入全屏后MPMoviePlayerWillExitFullscreenNotification将要退出全屏MPMoviePlayerDidExitFullscreenNotification退出全屏后MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification当媒体开始通过AirPlay播放或者结束AirPlay播放MPMoviePlayerReadyForDisplayDidChangeNotification视频显示状态改变MPMovieMediaTypesAvailableNotification确定了媒体可用类型后MPMovieSourceTypeAvailableNotification确定了媒体来源后MPMovieDurationAvailableNotification确定了媒体播放时长后MPMovieNaturalSizeAvailableNotification确定了媒体的实际尺寸后MPMoviePlayerThumbnailImageRequestDidFinishNotification缩略图请求完成之后MPMediaPlaybackIsPreparedToPlayDidChangeNotification做好播放准备后

二 使用方法:设置contentUrl ,view的frame,屏幕模式


#import "ViewController.h"#import <MediaPlayer/MediaPlayer.h>@interface ViewController ()@property (nonatomic,strong) MPMoviePlayerController *moviePlayer;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.        [self.moviePlayer play];    [self addNofi];}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}/** *  视频播放url * *  @return 返回视频url */- (NSURL *)url{    NSString *urlStr = @"http://7xawdc.com2.z0.glb.qiniucdn.com/o_19p6vdmi9148s16fs1ptehbm1vd59.mp4";    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    NSURL *url1 = [NSURL URLWithString:urlStr];    return url1;}/** *  初始化MPMoviePlayerController * *  @return 返回一个MPMoviePlayerController的实例 */- (MPMoviePlayerController *)moviePlayer{    if (!_moviePlayer) {        _moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[self url]];        _moviePlayer.view.frame = self.view.frame;        _moviePlayer.scalingMode = MPMovieScalingModeAspectFit; //固定缩放比例并且尽量全部        [self.view addSubview:_moviePlayer.view];    }    return _moviePlayer;}/** *  添加视频播放的通知 */- (void)addNofi{    [[NSNotificationCenter defaultCenter] addObserver:self                                             selector:@selector(playbackstateDidChange:)                                                 name:MPMoviePlayerPlaybackStateDidChangeNotification   //播放状态改变,可配合playbakcState属性获取具体状态                                               object:nil];    [[NSNotificationCenter defaultCenter] addObserver:self                                             selector:@selector(playDidFinish:) //媒体播放完成或用户手动退出,具体完成原因可以通过通知userInfo中的key为MPMoviePlayerPlaybackDidFinishReasonUserInfoKey的对象获取                                                 name:MPMoviePlayerPlaybackDidFinishNotification                                               object:nil];}- (void)playbackstateDidChange:(NSNotification *)noti{    switch (self.moviePlayer.playbackState) {        case MPMoviePlaybackStateInterrupted:            //中断            NSLog(@"中断");            break;        case MPMoviePlaybackStatePaused:            //暂停            NSLog(@"暂停");            break;        case MPMoviePlaybackStatePlaying:            //播放中            NSLog(@"播放中");            break;        case MPMoviePlaybackStateSeekingBackward:            //后退            NSLog(@"后退");            break;        case MPMoviePlaybackStateSeekingForward:            //快进            NSLog(@"快进");            break;        case MPMoviePlaybackStateStopped:            //停止            NSLog(@"停止");            break;                    default:            break;    }}- (void)playDidFinish:(NSNotification *)noti{    //播放完成}@end


附上demo下载地址 

MPMoviePlayerController使用.zip



0 0
原创粉丝点击