iOS音頻流播放、后臺(tái)播放、遠(yuǎn)程控制、鎖屏封面等總結(jié)-創(chuàng)新互聯(lián)

1. 推薦音頻流播放Framework

創(chuàng)新互聯(lián)長(zhǎng)期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為嘉禾企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè),嘉禾網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

知名度比較高的Framework應(yīng)該是github的 mattgallagher/AudioStreamer ,因?yàn)閲?guó)內(nèi)有一些論壇和教程網(wǎng)的例子是用這個(gè)Framework寫的,而且有國(guó)人略微改進(jìn)了一下這個(gè)Framework并加了中文注釋。不過這個(gè)Framework的缺點(diǎn)在于不支持ARC,并且狀態(tài)的改變通過notification來通知,并不是很靈活易用。

所以在這里推薦的是另一個(gè)Framework,同樣來自github(雖然以前是放在google code的)的tumtumtum/audjustable 。與上面的Framework相比較,支持了ARC,并且是使用delegate來發(fā)送狀態(tài)改變通知,比較符合我的習(xí)慣。也有播放隊(duì)列等高級(jí)功能,不過我沒有使用過這功能,所以就不做評(píng)論了。

具體的使用還是比較簡(jiǎn)單的,看一看對(duì)應(yīng)的示例工程就好了。

2. 后臺(tái)播放

首先需要引用系統(tǒng)Framework – AVFoundation,然后在AppDelegate的應(yīng)用啟動(dòng)事件里面添加以下代碼:

1

2

3

4

5

6

AVAudioSession *session = [AVAudioSession sharedInstance];

if ([session setCategory:AVAudioSessionCategoryPlayback error:nil]) {

  if ([session setActive:YES error:nil]) {

    NSLog(@"后臺(tái)播放準(zhǔn)備完畢");

  }

}

當(dāng)然這段代碼一般來說都會(huì)執(zhí)行成功的,所以可以去掉if直接寫成這樣:

1

2

3

AVAudioSession *session = [AVAudioSession sharedInstance];

[session setCategory:AVAudioSessionCategoryPlayback error:nil]

[session setActive:YES error:nil]

AVAudioSessionCategoryPlayback是用來指定支持后臺(tái)播放的,相關(guān)的其它枚舉可以自行查閱Apple的開發(fā)文檔。

當(dāng)然代碼添加完了之后并不是就已經(jīng)可以后臺(tái)播放了,還需要在info-plist文件里面注明我們的應(yīng)用需要支持后臺(tái)運(yùn)行。打開info-plist,添加Required background modes項(xiàng),再把Item 0編輯成audio按回車,xCode會(huì)自動(dòng)補(bǔ)全內(nèi)容:

iOS音頻流播放、后臺(tái)播放、遠(yuǎn)程控制、鎖屏封面等總結(jié)

這時(shí)候應(yīng)用就可以在后臺(tái)播放音頻了。需要一提的是模擬器不支持后臺(tái)播放,所以需要拿真機(jī)來測(cè)試。另外,網(wǎng)絡(luò)歌曲的后臺(tái)播放很容易斷,這個(gè)目前我也沒有找到好的解決方案。

3. 遠(yuǎn)程控制

支持后臺(tái)播放了之后,不回到應(yīng)用里還是不可以對(duì)音頻的播放進(jìn)行控制,而且耳機(jī)的按鈕功能也不管用,這個(gè)還是很不方便的。我們接下來需要做的就是向系統(tǒng)注冊(cè)遠(yuǎn)程控制(Remote Control),在播放音頻的ViewController里添加以下代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

- (void)viewWillAppear:(BOOL)animated

{

  [super viewWillAppear:animated];

  [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

  [self becomeFirstResponder];

}

- (void)viewWillDisappear:(BOOL)animated

{

  [super viewWillDisappear:animated];

  [[UIApplication sharedApplication] endReceivingRemoteControlEvents];

  [self resignFirstResponder];

}

- (BOOL)canBecomeFirstResponder

{

  return YES;

}

這樣就完成了注冊(cè)工作,需要控制生效的話還需要對(duì)不同的remote control事件進(jìn)行響應(yīng),修改下面的代碼并添加到自己的工程里:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

- (void)remoteControlReceivedWithEvent:(UIEvent *)event

{

  if (event.type == UIEventTypeRemoteControl) {

        switch (event.subtype) {

            case UIEventSubtypeRemoteControlTogglePlayPause:

                [self resumeOrPause]; // 切換播放、暫停按鈕

                break;

            case UIEventSubtypeRemoteControlPreviousTrack:

                [self playPrev]; // 播放上一曲按鈕

                break;

            case UIEventSubtypeRemoteControlNextTrack:

                [self playNext]; // 播放下一曲按鈕

                break;

            default:

                break;

        }

    }

}

完成了這些之后,在多任務(wù)狀態(tài)欄里就可以看到我們的應(yīng)用注冊(cè)成功了,這些按鈕和耳機(jī)按鈕也都可以正常使用。不過關(guān)于耳機(jī)的插拔事件,遠(yuǎn)程控制是處理不了的,需要關(guān)注這個(gè)的請(qǐng)自行搜索相關(guān)教程。

iOS音頻流播放、后臺(tái)播放、遠(yuǎn)程控制、鎖屏封面等總結(jié)

4. 鎖屏封面

很多音樂app在鎖屏的時(shí)候可以顯示當(dāng)前播放曲目的封面和一些信息,這個(gè)功能很實(shí)用。當(dāng)然上面這個(gè)截圖里面展示的曲目標(biāo)題也是要設(shè)置曲目信息之后才會(huì)顯示的。

設(shè)置曲目信息需要引用系統(tǒng)Framework – MediaPlayer先,然后在播放中的曲目信息改變時(shí)調(diào)用下面的方法:

1

2

3

4

5

6

7

8

9

10

11

12

- (void)configPlayingInfo

{

  if (NSClassFromString(@"MPNowPlayingInfoCenter")) {

    NSMutableDictionary * dict = [[NSMutableDictionary alloc] init];

    [dict setObject:@"曲目標(biāo)題" forKey:MPMediaItemPropertyTitle];

    [dict setObject:@"曲目藝術(shù)家" forKey:MPMediaItemPropertyArtist];

    [dict setObject:[[[MPMediaItemArtwork alloc] initWithImage:[UIImage p_w_picpathNamed:@"曲目封面.png"]] autorelease] forKey:MPMediaItemPropertyArtwork];

    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nil];

    [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dict];

  }

}

當(dāng)然還有其它很多屬性可以設(shè)置,自己查看一下剩余的key就可以,設(shè)置完就可以在鎖屏界面看到你的曲目封面了。

至此,一個(gè)簡(jiǎn)單的音樂播放類app就可以基本完成了,更多細(xì)節(jié)就需要你自己去修改了。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

文章標(biāo)題:iOS音頻流播放、后臺(tái)播放、遠(yuǎn)程控制、鎖屏封面等總結(jié)-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://muchs.cn/article14/ceohde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、定制網(wǎng)站、Google、做網(wǎng)站、App設(shè)計(jì)、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)