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

1. 推荐音频流播放Framework

知名度比较高的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 = [AVAudioSession sharedInstance];

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

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

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

}

}

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


1

2

3


AVAudioSession *session = [AVAudioSession sharedInstance];

[session setCategory:AVAudioSessionCategoryPlayback error:nil]

[session setActive:YES error:nil]

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

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

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

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

{

[super viewWillAppear:animated];

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

[self becomeFirstResponder];

}

- (void)viewWillDisappear:(BOOL)animated

{

[super viewWillDisappear:animated];

[[UIApplication sharedApplication] endReceivingRemoteControlEvents];

[self resignFirstResponder];

}

- (BOOL)canBecomeFirstResponder

{

return YES;

}

这样就完成了注册工作,需要控制生效的话还需要对不同的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) {

case UIEventSubtypeRemoteControlTogglePlayPause:

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

break;

case UIEventSubtypeRemoteControlPreviousTrack:

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

break;

case UIEventSubtypeRemoteControlNextTrack:

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

break;

default:

break;

}

}

}

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

4. 锁屏封面

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

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


1

2

3

4

5

6

7

8

9

10

11

12


- (void)configPlayingInfo

{

if (NSClassFromString(@"MPNowPlayingInfoCenter")) {

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

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

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

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

[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nil];

[[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:dict];

}

}

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

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

时间: 2024-10-06 00:43:58

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

iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断)

iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断) 2013-12-11 21:13 1416人阅读 评论(0) 收藏 举报  分类: cocoa SDK(139)  目录(?)[+] 在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放,网络请求歌曲,Remote控制,锁屏有封面,电话和听歌打断处理等.   初始化A

iOS音频的后台播放总结

在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放,网络请求歌曲,Remote控制,锁屏有封面,电话和听歌打断处理等.   初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,自己进行了功能封装,暂且不谈,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等

iOS音频的后台播放 锁屏

初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打断等等,这一步很重要,比如在viewdidload里初始化AVplayer以后要调用下面的函数: /** 设置音频会话 */  //这种方式后台,可以连续播放非网络请求歌曲,遇到网络请求歌曲就废,需要后台申请task -(void)setAudioSession{ AVAudioSession *audio

iOS开发——实用技术精选OC篇&后台音乐与锁屏界面音乐播放

一:后台音乐播放 在plist中开启后台服务 实现简单的代码 二:锁屏界面音乐播放 其他按钮的实现(上一曲,下一曲,暂停,播放) 最后将歌词实时的绘制上去:

AVPlayer 音乐播放后台播放,以及锁屏主题设置

第一步:在appDelegate中通知app支持后台播放:在方法 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {} 中添加如下代码: AVAudioSession *audioSession = [AVAudioSession sharedInstance]; //默认情况下扬声器播放 [audioSession setCa

iOS_33_音乐播放(后台播放+锁屏歌词)

最终效果图: 应用程序代理(后台播放三步曲) // // BeyondAppDelegate.h // 33_音效 // // Created by beyond on 14-9-10. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <UIKit/UIKit.h> @interface BeyondAppDelegate : UIResponder <UIApplicationDelegate>

iOS怎么来实现关闭自动锁屏

怎么来设置[UIApplication sharedApplication]   idleTimerDisabled 属性来控制自动锁屏的效果 // 把设置idleTimerDisabled的代码放到applicationDidEnterBackground里还原系统设置 - (void)applicationDidEnterBackground:(UIApplication *)application { [[UIApplication sharedApplication] setIdleTi

iOS音乐后台播放及锁屏信息显示

实现音乐的后台播放.以及播放时,能够控制其暂停,下一首等操作,以及锁屏图片歌曲名等的显示 此实例须要真机调试.效果图例如以下: project下载:githubproject下载 实现步骤: 1.首先改动info.plist 2.其次引入两个须要的框架 #import <AVFoundation/AVFoundation.h> #import <MediaPlayer/MediaPlayer.h> 3.设置播放器及后台播放 - (void)viewDidLoad { [super

iOS开发--QQ音乐练习,后台播放和锁屏界面

一.设置后台播放 首先允许程序后台播放 代码实现 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 2 3 // 设置后台播放的代码,步骤 4 // 1.获取音频的会话 5 AVAudioSession *session = [AVAudioSession sharedInstance]; 6 // 2.设置后台播放类型