iOS 视频播放的简单使用
最近工作中有用到视频播放的内容,分享一些简单的用法给大家(由于网速问题,本例中使用的是本地的资源进行播放,要播放网络上的修改一些URL即可)
1.iOS9之前的视频播放
首先需要导入MediaPlayer
框架. 在iOS9之前视频播放有两种方式.
- 一种是带有View的
MPMoviePlayerViewController
;
// 1. 带有View的控制器
NSURL *url = [[NSBundle mainBundle] URLForResource:@"Alizee_La_Isla_Bonita.mp4" withExtension:nil];
// 创建视频播放器
MPMoviePlayerViewController *mpvc = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
// 展示
[self presentMoviePlayerViewControllerAnimated:mpvc];
2. 一种是不带View的MPMoviePlayerController
// 1. 不带View的(这里不带view是指控制器的名字中没有带view,只是做个区分,不过它需要设置自身的view)
NSURL *url = [[NSBundle mainBundle] URLForResource:@"Alizee_La_Isla_Bonita.mp4" withExtension:nil];
MPMoviePlayerController *mpc = [[MPMoviePlayerController alloc] initWithContentURL:url];
//这里大小是随意设的,要看工作需要
mpc.view.frame = CGRectMake(, , , );
// 设置控制工具栏的样式
mpc.controlStyle = MPMovieControlStyleEmbedded;
// 把播放视图添加到控制器的view上
[self.view addSubview:mpc.view];
// 开始播放
[mpc play];
// 强引用
self.mpc = mpc;
3.通过监听播放完的通知来实现自动播放下一个视频
// 注册通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerPlaybackDidFinishNotification:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
/// 当播放结束了调用该方法
- (void) moviePlayerPlaybackDidFinishNotification:(NSNotification *) notification {
NSLog(@"%@",notification.userInfo); MPMovieFinishReason reason = [notification.userInfo[MPMoviePlayerPlaybackDidFinishReasonUserInfoKey] intValue];
// 如果是正常结束的播放下一曲
if (reason == MPMovieFinishReasonPlaybackEnded) {
NSURL *url = [[NSBundle mainBundle] URLForResource:@"Cupid_高清.mp4" withExtension:nil];
self.mpc.contentURL = url;
[self.mpc play];
}
}
2.iOS9之后的视频播放
iOS9 新增AVKit
框架,新增类AVPlayerViewController
用于视频播放.注意:必须导入两个框架AVKit
和AVFoundation
因为AVPlayerViewController
本身不具备视频播放的能力,必须给他一个AVPlayer
.
代码实现:
//播放视频
//注意点: 1. 必须给他一个播放AVPlayer,而AVPlayer在AVFoundation中,所以需要导入AVFondation框架
// 2. 画中画在iPadAir2和iPadPro才能使用.
- (IBAction)play:(id)sender { // 创建视频播放器
AVPlayerViewController *playerVc = [[AVPlayerViewController alloc] init];
// 需要创建一个播放对象赋值给这个控制器
NSURL *URL = [[NSBundle mainBundle] URLForResource:@"Alizee_La_Isla_Bonita.mp4" withExtension:nil];
// 设置播放器
playerVc.player = [AVPlayer playerWithURL:URL];
[self presentViewController:playerVc animated:YES completion:^{
// 开始播放
[playerVc.player play];
}];
// 设置代理
playerVc.delegate = self;
}
补充:画中画的一些常用代理方法
- (void) playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController{
NSLog(@"即将开始画中画");
} - (void) playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController{
NSLog(@"已经开始画中画");
} - (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController{
NSLog(@"即将停止画中画");
} - (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController
{
NSLog(@"画中画已经停止");
} - (void) playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error
{
NSLog(@"开启画中画失败:%@",error);
} /// 当播放器是modal出来的时候,当画中画的时候,是否要关闭弹出的播放控制器;默认YES
- (BOOL) playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController{
NSLog(@"%s",__FUNCTION__);
return NO;
}
iOS 视频播放的简单使用的更多相关文章
- iOS视频播放(AVFoundation)
iOS视频播放(AVFoundation) 关于iOS平台的音视频处理,苹果官方提供了OC和swift接口的AVFoundation框架,可以进行各种音频播放和剪辑,底层实现使用了GPU加速,编解码效 ...
- iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)
介绍: 和音频播放一样,ios也提供个很多的API.如mediaPlayer.framework下的MPMediaPlayerController.AVFounditon.framework下的AVP ...
- ios下最简单的正则,RegexKitLite
ios下最简单的正则,RegexKitLite 1.去RegexKitLite下载类库,解压出来会有一个例子包及2个文件,其实用到的就这2个文件,添加到工程中.备用地址:http://www.coco ...
- iOS中XMPP简单聊天实现 好友和聊天
版权声明本文由陈怀哲首发自简书:http://www.jianshu.com/users/9f2e536b78fd/latest_articles;微信公众号:陈怀哲(chenhuaizhe2016) ...
- iOS百度地图简单使用详解
iOS百度地图简单使用详解 百度地图 iOS SDK是一套基于iOS 5.0及以上版本设备的应用程序接口,不仅提供展示地图的基本接口,还提供POI检索.路径规划.地图标注.离线地图.定位.周边雷达等丰 ...
- iOS设计模式 - (3)简单工厂模式
iOS设计模式 - (3)简单工厂模式 by Colin丶 转载请注明出处: http://blog.csdn.net/hitwhylz/article/ ...
- 浅谈iOS视频播放的N种解决方案
简 注册登录 添加关注 作者 Maru2016.03.22 20:46* 写了4349字,被135人关注,获得了207个喜欢 字数1621 阅读2895 评论43 喜欢159 header ...
- iOS 视频播放方式整理
初衷 多媒体这整个系列的文章自己也准备好开始整理了,先从视频音频最简单也是最常用的播放出发慢慢的往下深究,探索到底层的编码解码等等,这篇文章就从视频的播放这个最简单的说起. iOS的视频播放方式有几种 ...
- ios视频播放器,代码和界面分离
最近业余时间整理的一个ios播放器,界面采用storyboard,以前几乎都是用代码布局,但是用过一个项目storyboard后,就感觉storyboard很靠谱,团队合作版本控制的问题解决其实很简单 ...
随机推荐
- Android中的pix,sp,dp相关概念
px( pixel) 像素,可以简单的理解为一个点或方块,用以颜色的显示(单位),一般指印刷品或屏幕设置设备的颜色显示定义. dip(device independent pixels)设备独立像素. ...
- shutdown computer in ad and ou
1. powershell Shutdown-computer –computername (gc c:\temp\serverlist.txt) –force –throttlelimit 10 h ...
- nutch 索引
nutch开发环境搭建 nutch-1.3导入eclipse nutch-1.7导入eclipse nutch部署 nutch-1.3linux下部署 nutch-1. ...
- 转:Java学习路线图
作者: nuanyangyang 标 题: Java学习路线图(整理中,欢迎纠正) 发信站: 北邮人论坛 (Mon Aug 11 19:28:16 2014), 站内 [以下肯定是不完整的列表, ...
- Colored Sticks
poj2513:http://poj.org/problem?id=2513 题意:就是求一个欧拉回路. 题解:本题是判断欧拉通路是否存在,但是如果是用map的话就会超时,这里采用了trie树,有发现 ...
- layer.js:2 Uncaught TypeError: Cannot read property 'extend' of undefined
在引用layer.js插件进行前端编程的时候,如果报这个错,解决办法只需: 把layer的引用放在有冲突的js库前面就行了
- UVA 10034 Freckles 最小生成树
虽然是道普通的最小生成树题目,可还是中间出了不少问题,暴露的一个问题是不够细心,不够熟练.所以这篇博客就当记录一下bug吧. 代码一:kruskal #include<stdio.h> # ...
- 李洪强漫谈iOS开发[C语言-030]-逻辑运算符
- HTML Jquery;marquee标签
在<网页制作Dreamweaver(悬浮动态分层导航)>中,运用到了jQuery的技术,轻松实现了菜单的下拉.显示.隐藏的效果,不必再用样式表一点点地修改,省去了很多麻烦,那么jQuery ...
- 使用Systrace分析UI性能
开发应用的时候,应该检查它是否有流畅的用户体验,即60fps的帧率.如果由于某种原因丢帧,我们首先要做的就是知道系统在做什么(造成丢帧的原因). Systrace允许你监视和跟踪Android系统的行 ...