AVPlayer介绍

AVPlayer介绍

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值