AVPlayer介绍
2015-11-06 16:48
148 查看
AVPlayer介绍
AVPlayer通常用来播放音乐,其内部已封装了流媒体功能 ,拿到网络url可以做到边缓存边播放的功能。
顺便提一下:AVAudioPlayer只能用本地的 url 来播放音乐
用 data 也需要把歌曲全部缓存后才可播放 做不到 边缓存边播放的效果
iOS 开发中,播放视频通常有两种方式,一种是 AVPlayer,另一种是MPMoviePlayerController 不过后者需要导入MediaPlayer.Framework。
在 ios9之后苹果已推荐播放视频也使用 AVPlayer
先讲使用 AVPlayer播放音乐
需要导入 AVFoundation框架
xcode7之后 只需要导入头文件
一般我们需要播放音乐都需要创建 AVPlayer 及 AVPlayerItem
AVPlayerItem是管理资源的对象
一般播放音乐只需要以上代码即可 去掉 playerItem 也可实现
若是需要做到网上音乐播放器的功能 建议写一个工具类专门用来播放音乐 //有空写一个贴出
若使用一个 AVPlayer 对象播放音乐 建议每次将item当中的所有资源替换成最新的
在音乐播放前最好先确认音乐资源是否缓冲成功
AVPlayer 的 status 属性有三种状态
AVPlayerStatusUnknown,
AVPlayerStatusReadyToPlay,
AVPlayerStatusFailed
当status等于AVPlayerStatusReadyToPlay时代表音乐已经可以播放了,即可调用 play方法。
另外介绍几个属性方法,可用作制作播放器
duration 音乐或视频总时间
loadedTimeRange属性代表已经缓冲的进度
currentTime 已经播放的时间
seekToTime
有时候seekToTime:(CMTime)time不行可以使用
- (void)seekToTime:(CMTime)time toleranceBefore:(CMTime)toleranceBefore toleranceAfter:(CMTime)toleranceAfter;
实现快进快退
播放器需要多次用到 KVO 观察者
以后补充
另外说一下歌词如何做的思路
首先我们要拿到歌曲的 lrc文件
去掉一些字符串 只剩下时间和歌词 需要一个时间的数组
每个时间对应一段歌词
将现在的时间去时间数组中遍历 拿到歌词
将此歌词所在的 cell 高亮现实 并将此 cell 置中
4种播放模式 后台播放 锁屏后的展示 工具类写好再一一讲解
快速利用系统自带播放视频
建议还是创建 controller 好好写 不然应该实现不了播放视频后自动横屏功能
下面贴两段分别用 AVPlayer 和 MediaPlayer 播放视频代码
注意:AVPlayer影片是放在AVPlayerLayer里面,AVPlayerLayer是CALayer的子类,MediaPlayer是放在UIView 里面。
//AVPlayer也能用于直播 今后补充
//有空帖整个播放器的详细代码
ps:若有误 欢迎指正
AVPlayer通常用来播放音乐,其内部已封装了流媒体功能 ,拿到网络url可以做到边缓存边播放的功能。
顺便提一下:AVAudioPlayer只能用本地的 url 来播放音乐
用 data 也需要把歌曲全部缓存后才可播放 做不到 边缓存边播放的效果
// AVAudioPlayer两种方式 AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil]; //注意:一个AVAudioPlayer只能播放一个url AVAudioPlayer *player=[[AVAudioPlayeralloc]initWithData:mydata error:nil];
iOS 开发中,播放视频通常有两种方式,一种是 AVPlayer,另一种是MPMoviePlayerController 不过后者需要导入MediaPlayer.Framework。
在 ios9之后苹果已推荐播放视频也使用 AVPlayer
先讲使用 AVPlayer播放音乐
//创建一个AVPlayer播放类 @property (nonatomic, strong) AVPlayer *player; //AVPlayerItem(多媒体资源) @property (nonatomic, strong) AVPlayerItem *playerItem; //AVAsset(音视频当中单个资源,例如声道) //@property (nonatomic, strong) AVAsset
需要导入 AVFoundation框架
xcode7之后 只需要导入头文件
一般我们需要播放音乐都需要创建 AVPlayer 及 AVPlayerItem
AVPlayerItem是管理资源的对象
self.player = [AVPlayer playerWithPlayerItem:[AVPlayerItem playerItemWithURL:[NSURL URLWithString:@""]]]; [self.player play]; [self.player pause];
一般播放音乐只需要以上代码即可 去掉 playerItem 也可实现
若是需要做到网上音乐播放器的功能 建议写一个工具类专门用来播放音乐 //有空写一个贴出
若使用一个 AVPlayer 对象播放音乐 建议每次将item当中的所有资源替换成最新的
[self.player replaceCurrentItemWithPlayerItem:self.playerItem];
在音乐播放前最好先确认音乐资源是否缓冲成功
AVPlayer 的 status 属性有三种状态
AVPlayerStatusUnknown,
AVPlayerStatusReadyToPlay,
AVPlayerStatusFailed
当status等于AVPlayerStatusReadyToPlay时代表音乐已经可以播放了,即可调用 play方法。
另外介绍几个属性方法,可用作制作播放器
duration 音乐或视频总时间
loadedTimeRange属性代表已经缓冲的进度
currentTime 已经播放的时间
//把现在播放的时间给 slider需要这样用 slider.value = self.player.currentTime.value / self.player.currentTime.timescale;
seekToTime
有时候seekToTime:(CMTime)time不行可以使用
- (void)seekToTime:(CMTime)time toleranceBefore:(CMTime)toleranceBefore toleranceAfter:(CMTime)toleranceAfter;
实现快进快退
播放器需要多次用到 KVO 观察者
以后补充
另外说一下歌词如何做的思路
首先我们要拿到歌曲的 lrc文件
去掉一些字符串 只剩下时间和歌词 需要一个时间的数组
每个时间对应一段歌词
将现在的时间去时间数组中遍历 拿到歌词
将此歌词所在的 cell 高亮现实 并将此 cell 置中
4种播放模式 后台播放 锁屏后的展示 工具类写好再一一讲解
快速利用系统自带播放视频
//引入 AVKit self.playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"视频 url"]]; AVPlayerViewController *vc = [[AVPlayerViewController alloc]init]; vc.player = [AVPlayer playerWithPlayerItem:self.playerItem]; [self presentViewController:vc animated:YES completion:nil];
建议还是创建 controller 好好写 不然应该实现不了播放视频后自动横屏功能
下面贴两段分别用 AVPlayer 和 MediaPlayer 播放视频代码
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"movieName" ofType:@"movie"]; NSURL *movieURL = [NSURL fileURLWithPath:filePath]; AVAsset *movieAsset = [AVURLAsset URLAssetWithURL:movieURL options:nil]; AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:movieAsset]; AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem]; AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player]; playerLayer.frame = self.view.layer.bounds; playerLayer.videoGravity = AVLayerVideoGravityResizeAspect; [self.view.layer addSublayer:playerLayer]; [player play];
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"movie" ofType:@"movie"]; NSURL *movieURL = [NSURL fileURLWithPath:filePath]; moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; moviePlayer.view.frame=CGRectMake(0, 0, 1024, 768); moviePlayer.controlStyle=MPMovieControlStyleNone; [self.view addSubview:moviePlayer.view];
注意:AVPlayer影片是放在AVPlayerLayer里面,AVPlayerLayer是CALayer的子类,MediaPlayer是放在UIView 里面。
//AVPlayer也能用于直播 今后补充
//有空帖整个播放器的详细代码
ps:若有误 欢迎指正
相关文章推荐
- SQL基础--合并查询(union,union all,intersect,minus)用法与介绍
- LeetCode OJ:Implement strStr()(实现子字符串查找)
- 谈谈MVC项目中的缓存功能设计的相关问题
- 11.2.0.2 后crs 新节点隔离机制(IO fencing)
- innerHTML
- Lytro的教训:曾经的光场神器为何不行了?
- Android Fragment---执行Fragment事务
- STL容器之map与hash_map
- Spring3.x中各个jar包的作用总结
- XCode工程中 Project 和 Targets区别
- 【用户行为分析】 用wiki百科中文语料训练word2vec模型
- 你不知道的JavaScript--Item28 垃圾回收机制与内存管理
- Linux Shell 中的反引号,单引号,双引号
- Ackerman的递归与非递归算法
- Netty是什么?
- jquery下的ajax跨域问题
- 这些 iOS 面试基础题目,你都深入了解吗?
- iOS 两个app之间的跳转
- python简单爬虫技术
- KMP算法,查询匹配串的个数