音樂播放器

IOS9.0的改變

棄用MPMoviePlayerViewController(導入的是MediaPlayer框架)

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

AVPlayer 是專門用來播放音視頻的類

AVPlayer的一些常用屬性

play

pause

跳轉(zhuǎn)進度 seekToTime:

currentItem 當前播放的視頻元素

volume 調(diào)節(jié)音量

externalPlaybackVideoGravity 視頻顯示的播放樣式

AVLayerVideoGravityResizeAspect 普通的

AVLayerVideoGravityResizeAspectFill充滿的

currentTime獲得當前時間 -> CMTime ->CMTimeGetSeconds()通過CMTime獲得當前播放時間(單位是秒)

CMTime專門用來表示視頻的播放進度的

value(進度)

timeScale(幀率)

kCMTimeZero 表示初始進度

seekToTime:可以跳轉(zhuǎn)到某一個進度

AVPlayerItem 要播放的音視頻的對象

duration 是CMTime類型 總時長

status 加載的狀態(tài)

AVPlayerItemStatusUnknown, 未知狀態(tài)

AVPlayerItemStatusReadyToPlay, 準備播放狀態(tài)

AVPlayerItemStatusFailed? 失敗狀態(tài)

時間控制的一個類目

currentTime? 獲得當前播放時間

forwardPlaybackEndTime? 跳到結(jié)束位置

reversePlaybackEndTime? 跳到開始位置

seekToTime:

AVPlayerLayer 播放顯示音視頻的圖層界面

AVPlayerViewController? 視圖控制器 可以顯示視頻并且有調(diào)節(jié)控件

使用

AVPlayer直接播放

創(chuàng)建AVPlayerItem 視頻內(nèi)容相關(guān)

創(chuàng)建方式

1、playerItemWithURL:類方法 通過URL地址創(chuàng)建要播放的對象(可以播放本地的內(nèi)容也可以播放在線的內(nèi)容)

2、initWithURL:構(gòu)造方法

3、playerItemWithAsset:通過設備相冊里面的內(nèi)容創(chuàng)建一個對象

4古胆、initWithAsset:

5笋熬、playerItemWithAsset:automaticallyLoadedAssetKeys自動根據(jù)要求的Key去加載相冊里面的內(nèi)容

6危虱、initWithAsset:automaticallyLoadedAssetKeys:

創(chuàng)建AVPlayer

<1>創(chuàng)建方式? 視頻操作相關(guān)

1、playerWithURL:根據(jù)URL去創(chuàng)建播放器 不需使用item2挑豌、initWithURL:3酗失、playerWithPlayerItem:需要傳入一個視頻播放內(nèi)容4义钉、initWithPlayerItem:5、獲得播放結(jié)束的狀態(tài)6规肴、seekToTime跳轉(zhuǎn)到某個進度7捶闸、CMTime:結(jié)構(gòu)體? value(進度) timeScale(幀率)

創(chuàng)建AVPlayerLayer 添加到父視圖

<1>根據(jù)播放器去創(chuàng)建一個可以顯示視頻的圖層playerLayerWithPlayer:->類方法<2>設置它的位置frame是沒有動畫效果的<3>把視頻圖層添加到父圖層

播放 播放器 play

控制器播放

1夜畴、創(chuàng)建AVPlayer

2、創(chuàng)建視頻播放視圖的控制器

3鉴嗤、將創(chuàng)建的AVPlayer賦值給控制器自帶的player

4斩启、跳轉(zhuǎn)到控制器播放

注意:使用控制器播放需要再導入一個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

三者的關(guān)系及作用:

AVPlayer(視頻播放器) 去播放 -> AVPlayerItem(視頻播放的元素) -> AVPlayerLayer(展示播放的視圖)

*///1、創(chuàng)建要播放的元素/*

本地的一個視頻

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发绢、創(chuàng)建播放器player = [AVPlayerplayerWithPlayerItem:playerItem];//3硬耍、創(chuàng)建視頻顯示的圖層AVPlayerLayer*showVodioLayer = [AVPlayerLayerplayerLayerWithPlayer:player];? ? showVodioLayer.frame=self.view.frame;? ? [self.view.layeraddSublayer:showVodioLayer];//4、播放視頻[player play];//獲得播放結(jié)束的狀態(tài) -> 通過發(fā)送通知的形式獲得 ->AVPlayerItemDidPlayToEndTimeNotification[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(itemDidPlayToEndTime:) name:AVPlayerItemDidPlayToEndTimeNotificationobject:nil];//只要可以獲得到當前視頻元素準備好的狀態(tài) 就可以得到總時長//采取KVO的形式獲得視頻總時長//通過監(jiān)視status 判斷是否準備好 -> 獲得[playerItem addObserver:selfforKeyPath:@"status"options:NSKeyValueObservingOptionNewcontext:nil];}//當status的值改變的時候會調(diào)用這個方法-(void)observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void*)context{NSLog(@"%@",change[@"new"]);AVPlayerItemStatusstatus = [change[@"new"] integerValue];switch(status) {caseAVPlayerItemStatusUnknown: {NSLog(@"未知狀態(tài)");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(@"播放結(jié)束");? ? [player seekToTime:kCMTimeZero];}#pragma mark -----控制器播放-(void)demo2{//1边酒、創(chuàng)建AVPlayer/*

本地視頻

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

AVPlayer *player = [AVPlayer playerWithURL:url];

*///網(wǎng)頁視頻AVPlayer*player1 = [AVPlayerplayerWithURL:[NSURLURLWithString:@"http://down.treney.com/mov/test.mp4"]];//2经柴、創(chuàng)建視頻播放視圖的控制器AVPlayerViewController*playerVC = [[AVPlayerViewControlleralloc]init];//3、將創(chuàng)建的AVPlayer賦值給控制器自帶的playerplayerVC.player= player1;//4墩朦、跳轉(zhuǎn)到控制器播放[selfpresentViewController:playerVC animated:YEScompletion:nil];? ? [playerVC.playerplay];}@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坯认,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子氓涣,更是在濱河造成了極大的恐慌牛哺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳吠,死亡現(xiàn)場離奇詭異引润,居然都是意外死亡,警方通過查閱死者的電腦和手機痒玩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門淳附,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蠢古,你說我怎么就攤上這事奴曙。” “怎么了草讶?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵洽糟,是天一觀的道長。 經(jīng)常有香客問我到涂,道長脊框,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任践啄,我火速辦了婚禮浇雹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屿讽。我一直安慰自己昭灵,他們只是感情好吠裆,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烂完,像睡著了一般试疙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抠蚣,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天祝旷,我揣著相機與錄音,去河邊找鬼嘶窄。 笑死怀跛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的柄冲。 我是一名探鬼主播吻谋,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼现横!你這毒婦竟也來了漓拾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤戒祠,失蹤者是張志新(化名)和其女友劉穎骇两,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體得哆,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡脯颜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贩据。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栋操。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饱亮,靈堂內(nèi)的尸體忽然破棺而出矾芙,到底是詐尸還是另有隱情,我是刑警寧澤近上,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布剔宪,位于F島的核電站,受9級特大地震影響壹无,放射性物質(zhì)發(fā)生泄漏葱绒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一斗锭、第九天 我趴在偏房一處隱蔽的房頂上張望地淀。 院中可真熱鬧,春花似錦岖是、人聲如沸帮毁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烈疚。三九已至黔牵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爷肝,已是汗流浹背猾浦。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灯抛,地道東北人跃巡。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像牧愁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子外莲,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容