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很靠谱,团队合作版本控制的问题解决其实很简单 ...
随机推荐
- Boost.Build 简明教程
Boost.Build 简明教程 目录1. 介绍2. 构建过程3. 基本任务4. 项目管理5. 最佳实践6. 规则参考7. 特征参考 介绍 编译器和平台无关编译系统Boost.Build是一个高级编译 ...
- CocoaPods安装和使用及问题:Setting up CocoaPods master repo-b
目录 CocoaPods是什么? 如何下载和安装CocoaPods? 如何使用CocoaPods? 场景1:利用CocoaPods,在项目中导入AFNetworking类库 场景2:如何正确编译运行一 ...
- 基于 libpcap库的sniffer程序
基于 libpcap库的sniffer程序 Libpcap库是WireSharek和Tcpdump抓包程序的基础,利用libcap我们自己也可以实现自己的抓包程序,在网络上实时抓包分析,或者利用处理的 ...
- [原博客] POJ 1067 取石子游戏
题目链接有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者 ...
- angular中实现jQuery的Document Ready
angular中不推荐混用JQuery的,原因呢问度娘. 其实这是一个比较蛋疼的问题,尤其是angular2.0,尽量不要在页面上写js,用ts写到模块里面去吧.. 汲取各位先人的智慧,还是列一下 w ...
- C++实现一个限制对象实例个数的类
http://www.cnblogs.com/absolute8511/archive/2009/03/02/1649603.html
- MySQL查询原理及其慢查询优化案例分享(转)
MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更 好的使用它,已经成为开发工程师的必修课,我们经常会从职 ...
- InvalidIndexNameException[Invalid index name [2Shard], must be lowercase]
[2016-10-11 14:16:42,191][DEBUG][action.admin.indices.create] [Feron] [2Shard] f ailed to create [2S ...
- c标准库和运行时库
c运行时库与c标准库的区别 c标准库包括常用的数学函数.字符串操作函数等等,这些函数都是由编程高手写的,效率高,很少出错,而且是完全符合c语言标准的函数. c运行库可以说是c标准库的扩展集,它是完全包 ...
- Three ways to do WCF instance management
Three ways to do WCF instance management (Per call, Per session, and Single). IntroductionVery often ...