音乐播放器

IOS9.0的改变

弃用MPMoviePlayerViewController(导入的是MediaPlayer框架)

使用AVPlayerViewController(导入的是AVKit框架)

AVPlayer 是专门用来播放音视频的类

AVPlayer的一些常用属性

play

pause

跳转进度 seekToTime:

currentItem 当前播放的视频元素

volume 调节音量

externalPlaybackVideoGravity 视频显示的播放样式

AVLayerVideoGravityResizeAspect 普通的

AVLayerVideoGravityResizeAspectFill充满的

currentTime获得当前时间 -> CMTime ->CMTimeGetSeconds()通过CMTime获得当前播放时间(单位是秒)

CMTime专门用来表示视频的播放进度的

value(进度)

timeScale(帧率)

kCMTimeZero 表示初始进度

seekToTime:可以跳转到某一个进度

AVPlayerItem 要播放的音视频的对象

duration 是CMTime类型 总时长

status 加载的状态

AVPlayerItemStatusUnknown, 未知状态

AVPlayerItemStatusReadyToPlay, 准备播放状态

AVPlayerItemStatusFailed  失败状态

时间控制的一个类目

currentTime  获得当前播放时间

forwardPlaybackEndTime  跳到结束位置

reversePlaybackEndTime  跳到开始位置

seekToTime:

AVPlayerLayer 播放显示音视频的图层界面

AVPlayerViewController  视图控制器 可以显示视频并且有调节控件

使用

AVPlayer直接播放

创建AVPlayerItem 视频内容相关

创建方式

1、playerItemWithURL:类方法 通过URL地址创建要播放的对象(可以播放本地的内容也可以播放在线的内容)

2、initWithURL:构造方法

3、playerItemWithAsset:通过设备相册里面的内容创建一个对象

4、initWithAsset:

5、playerItemWithAsset:automaticallyLoadedAssetKeys自动根据要求的Key去加载相册里面的内容

6、initWithAsset:automaticallyLoadedAssetKeys:

创建AVPlayer

<1>创建方式  视频操作相关

1、playerWithURL:根据URL去创建播放器 不需使用item2、initWithURL:3、playerWithPlayerItem:需要传入一个视频播放内容4、initWithPlayerItem:5、获得播放结束的状态6、seekToTime跳转到某个进度7、CMTime:结构体  value(进度) timeScale(帧率)

创建AVPlayerLayer 添加到父视图

<1>根据播放器去创建一个可以显示视频的图层playerLayerWithPlayer:->类方法<2>设置它的位置frame是没有动画效果的<3>把视频图层添加到父图层

播放 播放器 play

控制器播放

1、创建AVPlayer

2、创建视频播放视图的控制器

3、将创建的AVPlayer赋值给控制器自带的player

4、跳转到控制器播放

注意:使用控制器播放需要再导入一个AVKit框架

代码示例

#import"ViewController.h"#import#import@interfaceViewController(){AVPlayer*player;}@end@implementationViewController- (void)viewDidLoad {    [superviewDidLoad];UIButton*button = [UIButtonbuttonWithType:UIButtonTypeCustom];    button.frame=CGRectMake(100,100,120,100);    [button setTitle:@"AVPlayer播放"forState:UIControlStateNormal];    [button addTarget:selfaction:@selector(demo1) forControlEvents:UIControlEventTouchUpInside];    [self.viewaddSubview:button];UIButton*button1 = [UIButtonbuttonWithType:UIButtonTypeCustom];    button1.frame=CGRectMake(240,100,100,100);    [button1 setTitle:@"控制器播放"forState:UIControlStateNormal];    [button1 addTarget:selfaction:@selector(demo2) forControlEvents:UIControlEventTouchUpInside];    [self.viewaddSubview:button1];}#pragma mark ------AVPlayer播放-(void)demo1{/*

视频播放需要AVPlayer、AVPlayerItem、AVPlayerLayer

三者的关系及作用:

AVPlayer(视频播放器) 去播放 -> AVPlayerItem(视频播放的元素) -> AVPlayerLayer(展示播放的视图)

*///1、创建要播放的元素/*

本地的一个视频

NSString *path = [[NSBundle mainBundle]pathForResource:@"1" ofType:@"m4v"];

AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:[NSURL fileURLWithPath:path]];

*/AVPlayerItem*playerItem = [AVPlayerItemplayerItemWithURL:[NSURLURLWithString:@"http://down.treney.com/mov/test.mp4"]];//2、创建播放器player = [AVPlayerplayerWithPlayerItem:playerItem];//3、创建视频显示的图层AVPlayerLayer*showVodioLayer = [AVPlayerLayerplayerLayerWithPlayer:player];    showVodioLayer.frame=self.view.frame;    [self.view.layeraddSublayer:showVodioLayer];//4、播放视频[player play];//获得播放结束的状态 -> 通过发送通知的形式获得 ->AVPlayerItemDidPlayToEndTimeNotification[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(itemDidPlayToEndTime:) name:AVPlayerItemDidPlayToEndTimeNotificationobject:nil];//只要可以获得到当前视频元素准备好的状态 就可以得到总时长//采取KVO的形式获得视频总时长//通过监视status 判断是否准备好 -> 获得[playerItem addObserver:selfforKeyPath:@"status"options:NSKeyValueObservingOptionNewcontext:nil];}//当status的值改变的时候会调用这个方法-(void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{NSLog(@"%@",change[@"new"]);AVPlayerItemStatusstatus = [change[@"new"] integerValue];switch(status) {caseAVPlayerItemStatusUnknown: {NSLog(@"未知状态");break;        }caseAVPlayerItemStatusReadyToPlay: {NSLog(@"视频的总时长%f", CMTimeGetSeconds(player.currentItem.duration));break;        }caseAVPlayerItemStatusFailed: {NSLog(@"加载失败");break;        }    }}//快进-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent*)event{//快进//跳到某一个进度的方法:seekToTime://得到当前的时间 + 快进的时间//获得当前播放的时间 (秒)Float64 cur =  CMTimeGetSeconds(player.currentTime);    cur ++;    [player seekToTime:CMTimeMake(cur,1)];}-(void)itemDidPlayToEndTime:(NSNotification*)not{NSLog(@"播放结束");    [player seekToTime:kCMTimeZero];}#pragma mark -----控制器播放-(void)demo2{//1、创建AVPlayer/*

本地视频

NSURL *url = [[NSBundle mainBundle]URLForResource:@"IMG_9638.m4v" withExtension:nil];

AVPlayer *player = [AVPlayer playerWithURL:url];

*///网页视频AVPlayer*player1 = [AVPlayerplayerWithURL:[NSURLURLWithString:@"http://down.treney.com/mov/test.mp4"]];//2、创建视频播放视图的控制器AVPlayerViewController*playerVC = [[AVPlayerViewControlleralloc]init];//3、将创建的AVPlayer赋值给控制器自带的playerplayerVC.player= player1;//4、跳转到控制器播放[selfpresentViewController:playerVC animated:YEScompletion:nil];    [playerVC.playerplay];}@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容