iOS中 MPMoviePlayer 实现视频音频播放 作者:韩俊强
ios播放视频文件一般使用 MPMoviePlayerViewController 和 MPMoviePlayerController。前者是一个view,后者是个Controller。区别就是 MPMoviePlayerViewController里面包含了一个MPMoviePlayerController
注意:MPMoviePlayerViewController 必须 presentMoviePlayerViewControllerAnimated方式添加,否则Done按钮是不会响应通知MPMoviePlayerPlaybackDidFinishNotification事件的;
首先要包含 #import <MediaPlayer/MediaPlayer.h>头文件和MediaPlayer.framework。
MPMovieControlModeDefault 显示播放 / 暂停、音量和时间控制
MPMovieControlModeVolumeOnly 只显示音量控制
MPMovieControlModeHidden 没有控制器
你可以使用下列宽高比值:
MPMovieScallingModeNone 不做任何缩放
MPMovieScallingModeAspectFit 适应屏幕大小,保持宽高比
MPMovieScallingModeAspectFill 适应屏幕大小,保持宽高比,可裁剪
MPMovieScallingModeFill 充满屏幕,不保持宽高比
//通知
MPMoviePlayerContentPreloadDidFinishNotification 当电影播放器结束对内容的预加载后发出。因为内容可以在仅加载了一部分的情况下播放,所以这个通知可能在已经播放后才发出。
MPMoviePlayerScallingModeDidChangedNotification 当用户改变了电影的缩放模式后发出。用户可以点触缩放图标,在全屏播放和窗口播放之间切换。
MPMoviePlayerPlaybackDidFinishNotification 当电影播放完毕或者用户按下了 Done 按钮后发出
===============================================================================
需要引进的框架:MediaPlayer.framework
第一步:引进框架设置属性
#import "RootViewController.h" #import <MediaPlayer/MediaPlayer.h> @interface RootViewController () @property (nonatomic, strong) MPMoviePlayerController *moviePlayer; @end @implementation RootViewController
调用:
- (void)viewDidLoad { [super viewDidLoad]; // 5.调用播放器 //播放网络视频 NSString *urlString = @"http://video.szzhangchu.com/qiaokeliruanxinbudingA.mp4"; //播放本地视图,找到文件的路径 // NSString *urlStr = [[NSBundle mainBundle] pathForResource:@"优酷网-唐豆豆微信摇一摇惨被骗.mp4" ofType:nil]; [self createMPPlayerController:urlString]; }
第二步:创建播放器
- (void)createMPPlayerController:(NSString *)string { // 1.初始化播放器 //准备网址 // NSURL *urlString = [NSURL fileURLWithPath:fileNamePath]; NSURL *urlString = [NSURL URLWithString:string]; //初始化播放器 self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:urlString]; //准备播放 // [_moviePlayer prepareToPlay]; //设置moviePlayer的frame _moviePlayer.view.frame = self.view.frame; //添加到父视图 [self.view addSubview:_moviePlayer.view]; // 2.配置属性 //是否自动播放,默认是NO _moviePlayer.shouldAutoplay = YES; //设置播放器的样式 [_moviePlayer setControlStyle:(MPMovieControlStyleFullscreen)]; //开始播放 [_moviePlayer play]; // 3.注册通知 //注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinshed:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; }
第三步:实现通知方法
// 4.实现通知中的方法 - (void)movieFinshed:(NSNotification *)sender { //取出通知中心的moviePlayer MPMoviePlayerController *movie = [sender object]; //移除观察者 [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil]; //将movie移出父视图 [movie.view removeFromSuperview]; }
最终效果:
关注博主微博每日更新技术:http://weibo.com/hanjunqiang
iOS中 MPMoviePlayer 实现视频音频播放 作者:韩俊强的更多相关文章
- iOS中 CoreGraphics快速绘图(详解) 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 第一步:先科普一下基础知识: Core Graphics是基于C的API,可以用于一切绘图操作 Core Graph ...
- iOS中 Realm的学习与使用 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 有问题或技术交流可以咨询!欢迎加入! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 ...
- iOS中 自定义cell分割线/分割线偏移 韩俊强的博客
在项目开发中我们会常常遇到tableView 的cell分割线显示不全,左边会空出一截像素,更有甚者想改变系统的分割线,并且只要上下分割线的一个等等需求,今天重点解决以上需求,仅供参考: 每日更新关注 ...
- iOS中 UITableViewCell cell划线那些事 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 在开发中经常遇到cell分割线显示不全或者想自定义线的宽高等; 最近总结了一下,希望帮到大家: 1.不想划线怎么办? Table ...
- iOS中 图文混排/自定义图文混排 作者:韩俊强
指示根视图:(准备几张图片,把label加载在window上) CustomLable *label = [[CustomLable alloc]initWithFrame:CGRectMake(0, ...
- iOS中 自定义系统相机 作者:韩俊强
需要框架: #import <AVFoundation/AVFoundation.h> #import <AssetsLibrary/AssetsLibrary.h> 布局如下 ...
- iOS 南京互联网大会分享及个人见解 韩俊强的博客
首先分两大块: 1.如何打造高效/稳定的App (重点): 2.软件自动化测试: 每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 每日更新关注:http://we ...
- iOS中 扫描二维码/生成二维码详解 韩俊强的博客
最近大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 指示根视图: se ...
- iOS中 扫描二维码/生成二维码具体解释 韩俊强的博客
近期大家总是问我有没有关于二维码的demo,为了满足大家的需求,特此研究了一番,希望能帮到大家! 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 指示根视图: se ...
随机推荐
- 原生js之canvas时钟组件
canvas一直是前端开发中不可或缺的一种用来绘制图形的标签元素,比如压缩上传的图片.比如刮刮卡.比如制作海报.图表插件等,很多人在面试的过程中也会被问到有没有接触过canvas图形绘制. 定义 ca ...
- 值得珍藏的HTTP协议详解
转自:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式 ...
- linux下的静态库与动态库详解
静态库 先说说我们为什么需要库? 当有些代码我们大量会在程序中使用比如(scanf,printf等)这些函数我们需要在程序中频繁使用,于是我们就把这些代码编译为库文件,在需要使用时我们直接链接即可. ...
- CRM客户关系管理系统(七)
第七章.动态modelform功能实现 7.1.动态modelform的实现 (1)给第一列添加一个a标签 kingadmintag.py (2)kingadmin/urls.py urlpatte ...
- 作业02-Java基本语法与类库
1. 本周学习总结 以几个关键词描述本周的学习内容.并将关键词之间的联系描述或绘制出来. 原则:少而精,自己写.即使不超过5行也可,但请一定不要简单的复制粘贴. 2. 书面作业 1. String-使 ...
- 安卓onTextChanged参数解释及实现EditText字数监听 Editable使用
原作者部分修改部分 补充部分 补充部分2 补充部分3 补充部分4 Editable 尊重原作者:此篇文章是借鉴原作者地址 的博文 并进行修改和增加补充说明,我只是补充和修改: 我感觉这篇文章经过我的补 ...
- Android RRO机制的运用-----google开机向导客制化
上周五的时候领导分了一个任务,客户让在google开机向导里面增加一页,首先就想到了android的Overlay,然后网上搜了下,发下有很多人写了这方面的技术.而且写的都还不错,所以本篇只当记录作用 ...
- 安卓开发遇到Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
问题如下: Error:Execution failed for task ':app:transformClassesWithDexForDebug'. com.android.build.api. ...
- Mac OS: How to keep network connection alive after sleep
Do the following: Find out what the network interface is for your wifi. Mine is "en1" for ...
- Android studio 中引用jar的其实是Maven?(二)
上一篇:Android studio 中引用jar的其实是Maven?(一) 搭建maven仓库: 去了解一个新的事物的时候,最好的方式就是去使用它.例如去了解一座城市的时候,最好的方式就是乘坐公共交 ...