AVPlayer介绍

来源:互联网 发布:php培训机构达内教育 编辑:程序博客网 时间:2020/11/29 07:17

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:若有误 欢迎指正

1 0
原创粉丝点击