快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

iOS音频流播放、后台播放、远程控制、锁屏封面等总结

1. 推荐音频流播放Framework

双牌网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联公司自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

知名度比较高的Framework应该是github的 mattgallagher/AudioStreamer ,因为国内有一些论坛和教程网的例子是用这个Framework写的,而且有国人略微改进了一下这个Framework并加了中文注释。不过这个Framework的缺点在于不支持ARC,并且状态的改变通过notification来通知,并不是很灵活易用。

所以在这里推荐的是另一个Framework,同样来自github(虽然以前是放在google code的)的tumtumtum/audjustable 。与上面的Framework相比较,支持了ARC,并且是使用delegate来发送状态改变通知,比较符合我的习惯。也有播放队列等高级功能,不过我没有使用过这功能,所以就不做评论了。

具体的使用还是比较简单的,看一看对应的示例工程就好了。

2. 后台播放

首先需要引用系统Framework – AVFoundation,然后在AppDelegate的应用启动事件里面添加以下代码:

1

2

3

4

5

6

AVAudioSession *session=[AVAudioSessionsharedInstance];

if([sessionsetCategory:AVAudioSessionCategoryPlaybackerror:nil]){

  if([sessionsetActive:YESerror:nil]){

    NSLog(@"后台播放准备完毕");

  }

}

当然这段代码一般来说都会执行成功的,所以可以去掉if直接写成这样:

1

2

3

AVAudioSession *session=[AVAudioSessionsharedInstance];

[sessionsetCategory:AVAudioSessionCategoryPlaybackerror:nil]

[sessionsetActive:YESerror:nil]

AVAudioSessionCategoryPlayback是用来指定支持后台播放的,相关的其它枚举可以自行查阅Apple的开发文档。

当然代码添加完了之后并不是就已经可以后台播放了,还需要在info-plist文件里面注明我们的应用需要支持后台运行。打开info-plist,添加Required background modes项,再把Item 0编辑成audio按回车,xCode会自动补全内容:

iOS音频流播放、后台播放、远程控制、锁屏封面等总结

这时候应用就可以在后台播放音频了。需要一提的是模拟器不支持后台播放,所以需要拿真机来测试。另外,网络歌曲的后台播放很容易断,这个目前我也没有找到好的解决方案。

3. 远程控制

支持后台播放了之后,不回到应用里还是不可以对音频的播放进行控制,而且耳机的按钮功能也不管用,这个还是很不方便的。我们接下来需要做的就是向系统注册远程控制(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

{

  [superviewWillAppear:animated];  

  [[UIApplicationsharedApplication]beginReceivingRemoteControlEvents];

  [selfbecomeFirstResponder];

}

 

-(void)viewWillDisappear:(BOOL)animated

{

  [superviewWillDisappear:animated];  

  [[UIApplicationsharedApplication]endReceivingRemoteControlEvents];

  [selfresignFirstResponder];

}

 

-(BOOL)canBecomeFirstResponder

{

  returnYES;

}

这样就完成了注册工作,需要控制生效的话还需要对不同的remote control事件进行响应,修改下面的代码并添加到自己的工程里:

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){

            caseUIEventSubtypeRemoteControlTogglePlayPause:

                [selfresumeOrPause];// 切换播放、暂停按钮

                break;

 

            caseUIEventSubtypeRemoteControlPreviousTrack:

                [selfplayPrev];// 播放上一曲按钮

                break;

 

            caseUIEventSubtypeRemoteControlNextTrack:

                [selfplayNext];// 播放下一曲按钮

                break;

 

            default:

                break;

        }

    }

}

完成了这些之后,在多任务状态栏里就可以看到我们的应用注册成功了,这些按钮和耳机按钮也都可以正常使用。不过关于耳机的插拔事件,远程控制是处理不了的,需要关注这个的请自行搜索相关教程。

iOS音频流播放、后台播放、远程控制、锁屏封面等总结

4. 锁屏封面

很多音乐app在锁屏的时候可以显示当前播放曲目的封面和一些信息,这个功能很实用。当然上面这个截图里面展示的曲目标题也是要设置曲目信息之后才会显示的。

设置曲目信息需要引用系统Framework – MediaPlayer先,然后在播放中的曲目信息改变时调用下面的方法:

1

2

3

4

5

6

7

8

9

10

11

12

-(void)configPlayingInfo

{

  if(NSClassFromString(@"MPNowPlayingInfoCenter")){

    NSMutableDictionary *dict=[[NSMutableDictionaryalloc]init];

    [dictsetObject:@"曲目标题"forKey:MPMediaItemPropertyTitle];

    [dictsetObject:@"曲目艺术家"forKey:MPMediaItemPropertyArtist];

    [dictsetObject:[[[MPMediaItemArtworkalloc]initWithImage:[UIImagep_w_picpathNamed:@"曲目封面.png"]]autorelease]forKey:MPMediaItemPropertyArtwork];

 

    [[MPNowPlayingInfoCenterdefaultCenter]setNowPlayingInfo:nil];

    [[MPNowPlayingInfoCenterdefaultCenter]setNowPlayingInfo:dict];

  }

}

当然还有其它很多属性可以设置,自己查看一下剩余的key就可以,设置完就可以在锁屏界面看到你的曲目封面了。

至此,一个简单的音乐播放类app就可以基本完成了,更多细节就需要你自己去修改了。


文章名称:iOS音频流播放、后台播放、远程控制、锁屏封面等总结
当前URL:http://6mz.cn/article/geohcc.html

其他资讯