MPMoviePlayerController是iOS中进行视频播放开发的一个控制类,里面涵盖了视频播放中大部分的需求功能,在使用这个框架时,需要导入头文件<MediaPlayer/MediaPlayer.h>

MPMoviePlayerController具备一般的播放器控制功能,例如播放、暂停、停止等。但是MPMediaPlayerController自身并不是一个完整的视图控制器,如果要在UI中展示视频需要将view属性添加到界面中。

扩充MPMoviePlayerViewController:其实MPMoviePlayerController如果不作为嵌入视频来播放(例如在新闻中嵌入一个视频),通常在播放时都是占满一个屏幕的,特别是在iPhone、iTouch上。因此从iOS3.2以后苹果也在思考既然MPMoviePlayerController在使用时通常都是将其视图view添加到另外一个视图控制器中作为子视图,那么何不直接创建一个控制器视图内部创建一个MPMoviePlayerController属性并且默认全屏播放,开发者在开发的时候直接使用这个视图控制器。这个内部有一个MPMoviePlayerController的视图控制器就是MPMoviePlayerViewController,它继承于UIViewController。MPMoviePlayerViewController内部多了一个moviePlayer属性和一个带有url的初始化方法,同时它内部实现了一些作为模态视图展示所特有的功能,例如默认是全屏模式展示、弹出后自动播放、作为模态窗口展示时如果点击“Done”按钮会自动退出模态窗口等。

首先说一下创建误区:

MPMoviePlayerController *movieplayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];

如果我们这样直接使用movieplayer,会发现黑屏了。
原因:因为现在大多数是arc环境,movieplayer不能是局部变量,一旦方法走完,就自动销毁了,所以黑屏。需要设置为全局变量。

@property (strong, nonatomic) MPMoviePlayerController * movieplayer;MPMoviePlayerController *movieplayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
self. movieplayer= movieplayer;

这样,movieplayer的创建以及设置走完就不会销毁。

下面看一下里面的方法和属性吧

//视频的url地址
@property (nonatomic, copy) NSURL *contentURL;//显示媒体和播放控件的视图
@property (nonatomic, readonly) UIView *view;//用于定制的视图,始终显示在电影内容后面
@property (nonatomic, readonly) UIView *backgroundView;//播放器的当前播放状态,枚举定义如下:
typedef NS_ENUM(NSInteger, MPMoviePlaybackState) {MPMoviePlaybackStateStopped,//停止播放MPMoviePlaybackStatePlaying,//正在播放MPMoviePlaybackStatePaused,//暂停播放MPMoviePlaybackStateInterrupted,//中断播放MPMoviePlaybackStateSeekingForward,//快进MPMoviePlaybackStateSeekingBackward//快退
};
@property (nonatomic, readonly) MPMoviePlaybackState playbackState;//播放器的网络缓存状态,枚举定义如下:
typedef NS_OPTIONS(NSUInteger, MPMovieLoadState) {MPMovieLoadStateUnknown        = 0,//状态未知MPMovieLoadStatePlayable       = 1 << 0,//缓存数据足够开始播放,但是视频并没有缓存完全MPMovieLoadStatePlaythroughOK  = 1 << 1, //已经缓存完成,如果设置了自动播放,这时会自动播放MPMovieLoadStateStalled        = 1 << 2, //数据缓存已经停止,播放将暂停
};
@property (nonatomic, readonly) MPMovieLoadState loadState;//播放器风格,枚举如下:
typedef NS_ENUM(NSInteger, MPMovieControlStyle) {MPMovieControlStyleNone,       // 无控制器MPMovieControlStyleEmbedded,   // 嵌入视频风格MPMovieControlStyleFullscreen, // 全屏播放风格MPMovieControlStyleDefault = MPMovieControlStyleEmbedded
};
@property (nonatomic) MPMovieControlStyle controlStyle;//播放器的循环模式,枚举如下:
typedef NS_ENUM(NSInteger, MPMovieRepeatMode) {MPMovieRepeatModeNone,//播放结束后不循环MPMovieRepeatModeOne//循环
};
@property (nonatomic) MPMovieRepeatMode repeatMode;//是否开启自动播放,默认是yes
@property (nonatomic) BOOL shouldAutoplay;//设置是否充满屏幕,默认是no
@property (nonatomic, getter=isFullscreen) BOOL fullscreen;//设置是否充满屏幕,带动画效果
- (void)setFullscreen:(BOOL)fullscreen animated:(BOOL)animated;//设置播放器的填充方式,枚举定义如下:
typedef NS_ENUM(NSInteger, MPMovieScalingMode) {MPMovieScalingModeNone,       // 无缩放MPMovieScalingModeAspectFit,  // 适应大小模式MPMovieScalingModeAspectFill, // 充满可视范围,可能会被裁剪MPMovieScalingModeFill        // 缩放到充满视图
};
@property (nonatomic) MPMovieScalingMode scalingMode;//返回YES说明数据栈已经缓存好数据,返回NO则没有缓存好
@property (nonatomic, readonly) BOOL readyForDisplay//下面是分类:
@interface MPMoviePlayerController (MPMovieProperties)//数据文件的格式,枚举如下:
typedef NS_OPTIONS(NSUInteger, MPMovieMediaTypeMask) {MPMovieMediaTypeMaskNone  = 0,//格式未知MPMovieMediaTypeMaskVideo = 1 << 0,//音频格式MPMovieMediaTypeMaskAudio = 1 << 1//视频格式
};
@property (nonatomic, readonly) MPMovieMediaTypeMask movieMediaTypes//视频的数据类型,枚举如下:
typedef NS_ENUM(NSInteger, MPMovieSourceType) {MPMovieSourceTypeUnknown,//类型未知MPMovieSourceTypeFile,     // 文件类型MPMovieSourceTypeStreaming // 数据流
};
@property (nonatomic) MPMovieSourceType movieSourceType//视频文件的时长
@property (nonatomic, readonly) NSTimeInterval duration//缓存完成能够播放的时长
@property (nonatomic, readonly) NSTimeInterval playableDuration//视频的原始大小
@property (nonatomic, readonly) CGSize naturalSize//播放器开始播放的时间
@property (nonatomic) NSTimeInterval initialPlaybackTime//播放器结束播放的时间
@property (nonatomic) NSTimeInterval endPlaybackTime;//是否允许云端播放,在ios5.0之后默认是yes
@property (nonatomic) BOOL allowsAirPlay;//指示电影播放器当前是否通过AirPlay播放视频
@property (nonatomic, readonly, getter=isAirPlayVideoActive) BOOL airPlayVideoActive//获取视频某一些时间点的缩略图
typedef NS_ENUM(NSInteger, MPMovieTimeOption) {MPMovieTimeOptionNearestKeyFrame,//使用最近的关键帧生成缩略图MPMovieTimeOptionExact//使用精确的当前帧生成缩略图
};
- (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option //取消所有待处理的异步缩图请求
- (void)cancelAllThumbnailImageRequests//调用这个方法进行播放视频的准备工作
- (void)prepareToPlay;
//获取播放器的准备工作是否就绪
@property(nonatomic, readonly) BOOL isPreparedToPlay;
//调用此方法进行视频的播放
- (void)play;
//调用此方法进行视频播放的暂停操作
- (void)pause;
//调用此方法停止视频播放
- (void)stop;
//当前视频已播放的时间
@property(nonatomic) NSTimeInterval currentPlaybackTime;
//当前视频的播放速度
@property(nonatomic) float currentPlaybackRate;
//调用此方法进行快进操作
- (void)beginSeekingForward;
//调用此方法进行快退操作
- (void)beginSeekingBackward;
//调用此方法结束快进或者快退操作
- (void)endSeeking;

播放器系统通知

//当缩放模式更改时发出
NSString * const MPMoviePlayerScalingModeDidChangeNotification//在电影播放结束或用户退出播放时发出
NSString * const MPMoviePlayerPlaybackDidFinishNotification
NSString * const MPMoviePlayerPlaybackDidFinishReasonUserInfoKey//在播放状态更改时发布
NSString * const MPMoviePlayerPlaybackStateDidChangeNotification//当网络缓冲状态改变时发布
NSString * const MPMoviePlayerLoadStateDidChangeNotification//当前播放的视频改变时发送的通知
NSString * const MPMoviePlayerNowPlayingMovieDidChangeNotification//将要进入全屏模式时发送的通知
NSString * const MPMoviePlayerWillEnterFullscreenNotification//已经进入全屏时发送的通知
NSString * const MPMoviePlayerDidEnterFullscreenNotification//将要退出全屏时发送的通知
NSString * const MPMoviePlayerWillExitFullscreenNotification//已经退出全屏时发送的通知
NSString * const MPMoviePlayerDidExitFullscreenNotification//当电影播放器开始或结束通过AirPlay播放视频时发布。
NSString * const MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification//当准备好显示状态改变时发布。
NSString * const MPMoviePlayerReadyForDisplayDidChangeNotification

通知使用:


NSNotificationCenter *notificationCenter=[NSNotificationCenter defaultCenter];[notificationCenter addObserver:self selector:@selector(mediaPlayerPlaybackStateChange:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:self.moviePlayer];[notificationCenter addObserver:self selector:@selector(mediaPlayerPlaybackFinished:) name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayer];-(void)mediaPlayerPlaybackStateChange:(NSNotification *)notification{switch (self.moviePlayer.playbackState) {case MPMoviePlaybackStatePlaying:NSLog(@"正在播放...");break;case MPMoviePlaybackStatePaused:NSLog(@"暂停播放.");break;case MPMoviePlaybackStateStopped:NSLog(@"停止播放.");break;default:NSLog(@"播放状态:%li",self.moviePlayer.playbackState);break;}
}-(void)mediaPlayerPlaybackFinished:(NSNotification *)notification{NSLog(@"播放完成.%li",self.moviePlayer.playbackState);
}-(void)dealloc{//移除所有通知监控[[NSNotificationCenter defaultCenter] removeObserver:self];
}

iOS播放器开发之MPMoviePlayerController相关推荐

  1. SkeyeWebPlayer.js H5播放器开发之webpack编译flv.js实现基础播放器功能(二)

    SkeyeWebPlayer.js H5播放器是由成都视开信息科技开发和维护的一个完善的RTSP.FLV.HLS等多种流媒体协议播放,视频编码支持H.264,H.265,音频支持AAC,支持TCP/U ...

  2. SkeyeWebPlayer.js H5播放器开发之webpack项目创建级编译配置(一)

    SkeyeWebPlayer.js H5播放器开发之播放器动态渲染video. 动态渲染是采用js进行创建dom.添加dom.添加class.style等方式操作dom元素.最终将播放器编译成成一个独 ...

  3. Android 音乐播放器开发之 maven() { url “https://maven.google.com“} 报错

    1. 问题描述 在安卓音乐播放器开发中, 遇到了一些旧版本的问题, 在新版本的Android Studio 中已经改变了, 故记录一下. 旧版本中,下面这两部分是写在一块的, allprojects ...

  4. 开博尔android播放器,双核ANDROID网络播放器-开博尔C9-开箱 + 评测

    本帖最后由 ycchen226 于 2013-3-29 16:14 编辑 C9界面交互: C9的最大亮点 我认为是这个界面UI的设计 nEO_IMG_DSC00516.jpg (98.07 KB, 下 ...

  5. 开博尔android播放器,开博尔q50评测 | 开博尔q50播放器评测_什么值得买

    影音俱佳--开博尔Q50 4K 蓝光播放器 2019-12-06 17:00:59 13点赞 43收藏 14评论 现在随着OPPO的退市,先锋的缺货,高端播放器市场似乎可选择的越来越少,相对于传统4K ...

  6. iOS播放器 - AVPlayer

    之前有说到在播放器中一点点小技巧,现在正式记录一下AVPlayer. 这里主要是说明用AVPlayer做音乐播放器的功能实现,所以不介绍AVPlayer中那个图层类. 首先我们要声明一下播放器,这里有 ...

  7. android版音乐播放器开发教程,Android音乐播放器开发文档(20200907152026).pdf

    Android 音乐播放器 撰写人:张 XX 2011-3-15 一. 问题定义 本软件是为了用户智能手机 Android 而开发的一套智能软件, 提供在线 下载音乐,在线播放音乐,读取 SD 卡音乐 ...

  8. 基于用户推荐系统的音乐播放器开发文档

    音乐播放器 简介:系统组成 具备: pyqt5前端GUI模块 基于用户(user)歌曲推荐系统模块 用户安全管理.歌曲管理.收藏管理.等模块 摘要 基于pyqt5 作为前端UI界面的开发语言 数据库数 ...

  9. IOS视频开发之MPMoviePlayerController

    这篇文章转载自IOS疯狂讲义下

  10. easyplayerpro 使用说明_EasyPlayerPro(Windows)流媒体播放器开发之ffmpeg log输出报错

    EasyPlayerPro主要基于ffmpeg进行开发,在EasyPlayerPro开发过程中,曾遇到一个相对比较棘手的问题,该问题一般在播放不是很标准的流或者网络情况较差,容易出现丢帧的情况特别容易 ...

最新文章

  1. Domain Driven Design and Development In Practice--转载
  2. 实例37:python
  3. 图文列表+富文本解析+折线图示例小程序模板
  4. 入职必备两小时入门SVN(二)
  5. 利用深度学习从单个损伤和斑点中识别植物病害
  6. 【Python】ModuleNotFoundError: No module named 'pandas.io.data'
  7. 山石防火墙增加端口映射
  8. (转)MSDN Library “已取消到该网页的导航”解决办法
  9. Matlab自带的分类学习工具箱(SVM、决策树、Knn等分类器)
  10. RK3399支持5G-WiFi热点
  11. 游戏中的道具与RMB玩家
  12. C++ 三目运算符 ?:
  13. uni-app中uni-ui组件库的使用
  14. linux主机无线连接显示器,如何用Linux外接显示器或投影机
  15. 【5G通信网络架构与5G基站架构概述】
  16. 区块链的五个基本特征
  17. 如何扫码下载文件?文件转二维码生成在线的方法
  18. 信号处理算法(4):全球最快的傅里叶变换算法(FFTW)
  19. 32android好看的样式及demo汇总
  20. 华为天才少年稚晖君被曝离职;苹果 A16“挤牙膏”原因曝光;​Ruby 3.2.0 发布|极客头条

热门文章

  1. 11.25作业(ZLY)
  2. 雷观(十八):我的世界观
  3. orc识别较慢_OCR 中文识别用哪种软件识别率比较高?
  4. 用AutoIt写网页外挂系列之 开心网的X世界网页游戏自动送免费礼物
  5. html中的em的使用方法,css布局的em的使用方法
  6. 如何对销售额进行预测?
  7. C++:实现量化存在净额结算协议的交易对手风险下的利率互换估值公式测试实例
  8. 程序设计c语言高速公路收费标准,高速公路收费系统c语言课程设计报告分解.docx...
  9. 如何缩减XFS分区格式的根目录
  10. 研发质量管理工作经验总结(四)----QA的价值