詳解iOS應(yīng)用中播放本地視頻以及選取本地音頻的組件用法
MPMoviePlayerControlle播放本地視頻
MPMoviePlayerControlle與AVAudioPlayer有點(diǎn)類似,前者播放視頻,后者播放音頻,不過也有很大不同,MPMoviePlayerController 可以直接通過遠(yuǎn)程URL初始化,而AVAudioPlayer則不可以。不過大體上用起來感覺差不多。廢話少說進(jìn)入體驗(yàn)。
格式支持:MOV、MP4、M4V、與3GP等格式,還支持多種音頻格式。
首先你得引入 MediaPlayer.framework.然后在使用到MPMoviePlayerController 的文件中導(dǎo)入相應(yīng)的頭文件。
一、創(chuàng)建
MPMoviePlayerController 類通過一個(gè)NSURL來初始化,這個(gè)URL可以使本地的,也可以是遠(yuǎn)程的。初始化需要通過 initWithContentURL 方法來實(shí)現(xiàn):
MPMoviePlayerController *moviePlayer = [ [ MPMoviePlayerController alloc]initWithContentURL:[NSURL urlWithString:@"http://"] ];//遠(yuǎn)程
或者
NSString* path =[ NSString stringWithFormat:@"%@/Documents/video.3gp",NSHomeDirectory()];//本地路徑
MPMoviePlayerController *moviePlayer = [ [ MPMoviePlayerController alloc]initWithContentURL:[NSURL fileURLWithPath:path]];//本地的
二、屬性設(shè)置
1.控制器樣式
moviePlayer.moviewControlMode = MPMovieControlModeDefault;
可以使用下列樣式:
MPMovieControlModeDefault 顯示播放/暫停、音量和時(shí)間控制
MPMovieControlModeVolumeOnly 只顯示音量控制
MPMovieControlModeHidden 沒有控制器
2.屏幕寬高比例
moviePlayer.scallingMode = MPMovieScallingModeAspectFit;
你可以使用下列寬高比值:
MPMovieScallingModeNone 不做任何縮放
MPMovieScallingModeAspectFit 適應(yīng)屏幕大小,保持寬高比
MPMovieScallingModeAspectFill 適應(yīng)屏幕大小,保持寬高比,可裁剪
MPMovieScallingModeFill 充滿屏幕,不保持寬高比
3.背景色
背景色會(huì)在電影播放器轉(zhuǎn)入轉(zhuǎn)出時(shí)使用,當(dāng)電影不能充滿整個(gè)屏幕時(shí),也會(huì)用來填充空白區(qū)域。默認(rèn)的背景色是黑色,不過你可以使用 UIColor 對(duì)象設(shè)置backgroundColor屬性,來改變背景色:
moviePlayer.backgroundColor = [UIColor redColor];
三、播放和停止電影
要播放電影請(qǐng)調(diào)用play 方法,電影播放控制器會(huì)自動(dòng)將視圖切換到電影播放器并開始播放:
[ moviePlayer play ];
當(dāng)用戶點(diǎn)擊Done按鈕,或者 stop 方法被調(diào)用都會(huì)停止
[ moviePlayer stop ];
當(dāng)電影停止播放后會(huì)自動(dòng)切回播放前應(yīng)用程序所在的視圖。
四、通知
你的程序可以配置電影播放器在何時(shí)候發(fā)送通知,包括結(jié)束加載內(nèi)容、技術(shù)播放、改變寬高比等。電影播放器會(huì)將事件發(fā)送到 Cocoa 的通知中心,你可以對(duì)其進(jìn)行配置,指定將這些事件轉(zhuǎn)發(fā)到你的應(yīng)用程序的一個(gè)對(duì)象。要接收這些通知,需要使用 NSNotificationCenter 類,為電影播放器添加一個(gè)觀察者(observer):
NSNotificationCenter* notificationCenter = [NSNotificationCenter defaultCenter];
[ notificationCenter addObserver:self selector:@selector(moviePlayerPreloadFinish:) name:MPMoviePlayerContentPreloadDidFinishNotification object:moviePlayer ];
通知會(huì)發(fā)到你指定的委托類和目標(biāo)方法。通知參數(shù)讓你可以知道是哪個(gè)事件觸發(fā)了委托方法:
-(void)moviePlayerPreloadDidFinish:(NSNotification*)notification{
//添加你的處理代碼
}
你會(huì)觀察到以下通知:
1.MPMoviePlayerContentPreloadDidFinishNotification
當(dāng)電影播放器結(jié)束對(duì)內(nèi)容的預(yù)加載后發(fā)出。因?yàn)閮?nèi)容可以在僅加載了一部分的情況下播放,所以這個(gè)通知可能在已經(jīng)播放后才發(fā)出。
2.MPMoviePlayerScallingModeDidChangedNotification
當(dāng)用戶改變了電影的縮放模式后發(fā)出。用戶可以點(diǎn)觸縮放圖標(biāo),在全屏播放和窗口播放之間切換。
3.MPMoviePlayerPlaybackDidFinishNotification
當(dāng)電影播放完畢或者用戶按下了Done按鈕后發(fā)出。
MPMediaPickerController選取本地音
MPMediaPickerController 與 UIImagePickerController 類似,允許用戶從音樂庫中選取音樂、播客、音頻書。
1、創(chuàng)建
MPMediaPickerController *mpc = [[MPMediaPickerControlleralloc]initWithMediaTypes:MPMediaTypeMusic];
mpc.delegate = self;//委托
mpc.prompt =@"Please select a music";//提示文字
mpc.allowsPickingMultipleItems=NO;//是否允許一次選擇多個(gè)
上述代碼創(chuàng)建了一個(gè) MPMediaPickerController 并設(shè)置了相關(guān)屬性。其中初始化的時(shí)候有一個(gè)參數(shù)是媒體類型,媒體類型可以是下面這些值:
enum {
// audio
MPMediaTypeMusic = 1 << 0,
MPMediaTypePodcast = 1 << 1,
MPMediaTypeAudioBook = 1 << 2,
MPMediaTypeAudioITunesU = 1 << 3, // available in iOS 5.0
MPMediaTypeAnyAudio = 0x00ff,
// video (available in iOS 5.0)
MPMediaTypeMovie = 1 << 8,
MPMediaTypeTVShow = 1 << 9,
MPMediaTypeVideoPodcast = 1 << 10,
MPMediaTypeMusicVideo = 1 << 11,
MPMediaTypeVideoITunesU = 1 << 12,
MPMediaTypeAnyVideo = 0xff00,
MPMediaTypeAny = ~0
};
typedef NSInteger MPMediaType;
2、委托函數(shù)
- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems:(MPMediaItemCollection *)mediaItemCollection{
/*insert your code*/
for ( MPMediaItem* itemin [mediaItemCollection items]) {
}
[selfdismissModalViewControllerAnimated:YES];
[mediaPicker release];
}
在上面這個(gè)函數(shù)里你可以處理所選取的內(nèi)容。下面這個(gè)函數(shù)負(fù)責(zé)處理選中后取消的動(dòng)作:
-(void)mediaPickerDidCancel:(MPMediaPickerController *)mediaPicker{
/*insert your code*/
[selfdismissModalViewControllerAnimated:YES];
[mediaPicker release];
}
3、顯示
你可以在任何需要顯示的時(shí)候調(diào)用下面代碼:
[selfpresentModalViewController:mpc animated:YES];
4、關(guān)鍵點(diǎn)
看完上面的代碼你可能明白了,但是又感覺沒明白。為什么呢?看第一個(gè)回調(diào)函數(shù)就知道了,回調(diào)函數(shù)傳參好像不認(rèn)識(shí)。 MPMediaItemCollection 的對(duì)象的items 就是用戶選擇項(xiàng)的集合。每一項(xiàng)都是MPMediaItem 類的成員,并可以查詢其屬性值。屬性太多,我就不一一列出了,你去看MPMediaItem類的頭文件或者官方文檔就明白了。
相關(guān)文章
iOS多線程應(yīng)用開發(fā)中自定義NSOperation類的實(shí)例解析
這篇文章主要介紹了iOS多線程應(yīng)用開發(fā)中自定義NSOperation類的實(shí)例解析,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01iOS簡(jiǎn)單抽屜效果的實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了iOS簡(jiǎn)單抽屜效果的實(shí)現(xiàn)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08iOS開發(fā)實(shí)現(xiàn)UIImageView的分類
這篇文章主要為大家詳細(xì)介紹了iOS開發(fā)實(shí)現(xiàn)UIImageView的分類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01解決iOS調(diào)起微信支付顯示系統(tǒng)繁忙問題
這篇文章主要介紹了解決iOS調(diào)起微信支付顯示系統(tǒng)繁忙問題,需要的朋友可以參考下2016-12-12