AVPlayer介绍
来源:互联网 发布:php培训机构达内教育 编辑:程序博客网 时间:2024/03/29 15:54
AVPlayer介绍
AVPlayer通常用来播放音乐,其内部已封装了流媒体功能 ,拿到网络url可以做到边缓存边播放的功能。
顺便提一下:AVAudioPlayer只能用本地的 url 来播放音乐
用 data 也需要把歌曲全部缓存后才可播放 做不到 边缓存边播放的效果
// AVAudioPlayer两种方式AVAudioPlayer *audioPlayer=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil];//注意:一个AVAudioPlayer只能播放一个urlAVAudioPlayer *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:若有误 欢迎指正
- AVPlayer介绍
- AVPlayer中想关方法介绍
- avplayer
- AVplayer
- AVPlayer
- AVPlayer
- AVPlayer
- AVPlayer
- AVPlayer
- AVPlayer
- AVPlayer音量
- boost avplayer
- avplayer 分析
- 使用AVPlayer
- 自定义AVPlayer
- AVPlayer demo
- [绍棠] avplayer
- AVPlayer翻译
- innerHTML
- 如何检测硬盘坏道
- 搭建pcduino交叉编译环境
- Nginx下搭建Nagios
- 原子操作及对C++编程的意义
- AVPlayer介绍
- Lytro转行挺进 虚拟现实领域 推出Immerge相机
- 设计算法1
- Mac OSX10.11更新后sudo竟然不能写/bin,/usr/bin /usr/sbin等系统目录了。
- Firebase 特性翻译
- textview多行文本后加上图片
- eq,neq,gt,lt等表达式缩写
- hdu 2844 Coins(多重背包)
- 冒泡排序