1. 推荐音频流播放Framework
知名度比较高的Framework应该是github的 mattgallagher/AudioStreamer ,因为国内有一些论坛和教程网的例子是用这个Framework写的,而且有国人略微改进了一下这个Framework并加了中文注释。不过这个Framework的缺点在于不支持ARC,并且状态的改变通过notification来通知,并不是很灵活易用。
所以在这里推荐的是另一个Framework,同样来自github(虽然以前是放在google code的)的 tumtumtum/audjustable 。与上面的Framework相比较,支持了ARC,并且是使用delegate来发送状态改变通知,比较符合我的习惯。也有播放队列等高级功能,不过我没有使用过这功能,所以就不做评论了。
具体的使用还是比较简单的,看一看对应的示例工程就好了。
2. 后台播放
首先需要引用系统Framework – AVFoundation,然后在AppDelegate的应用启动事件里面添加以下代码:
|
AVAudioSession *session=[AVAudioSession sharedInstance];
if([session setCategory:AVAudioSessionCategoryPlayback error:nil]){
if([session setActive:YES error:nil]){
NSLog(@"后台播放准备完毕");
}
}
|
当然这段代码一般来说都会执行成功的,所以可以去掉if直接写成这样:
|
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
{
[superviewWillAppear:animated];
[[UIApplication sharedApplication]beginReceivingRemoteControlEvents];
[selfbecomeFirstResponder];
}
-(void)viewWillDisappear:(BOOL)animated
{
[superviewWillDisappear:animated];
[[UIApplication sharedApplication]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;
}
}
}
|
完成了这些之后,在多任务状态栏里就可以看到我们的应用注册成功了,这些按钮和耳机按钮也都可以正常使用。不过关于耳机的插拔事件,远程控制是处理不了的,需要关注这个的请自行搜索相关教程。
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就可以基本完成了,更多细节就需要你自己去修改了。
相关推荐
Xcode 运行工程,后台播放歌词-可以远程控制-iOS 真机模拟器都可以运行,亲测可用
iOS网络音频播放,讯飞语音合成集成,FreeStream cocoapods集成使用,AVplayer播放本地音频
iOS流媒体播放,播放电影等常见多媒体格式。
IOS下使用AVAudioPlayer播放MP3(支持后台播放) XCode 4.6.3下编译测试运行通过,真机测试通过
本文实例为大家分享了iOS实现音乐的后台播放,以及播放时,可以控制其暂停,下一首等操作,以及锁屏图片歌曲名等的显示 此实例需要真机调试,效果图如下: 工程下载:github工程下载 实现步骤: 1、首先修改info....
iOS流式音频播放,基于网络播放实现,非常强大
使用AudioToolBox 框架实现音效,AVFou'n'd'ti'o'n实现音乐播放和远程控制事件
iOS oc 后台播放网络歌曲,本地歌曲,封面显示 上一曲下一曲控制
一个很简单的oc代码封装 简单下载音频对音频存储 播放的类
iOS 后台音频播放控制,锁屏音频播放控制及音频信息设置,效果图如下: 1.在 AppDelegate.m 中实现下面方法,获取音频播放、暂停、上一首、下一首点击事件: - (BOOL)canBecomeFirstResponder { return YES; ...
1、demo实现了音频流播放(边下边播)、解码、转码、AudioUnit之间的连接和设置、各效果器设置、时间获取和seek操作功能,音频高手请绕道。 2、工作过程:先下载一段音频,解析音频头信息,再转码音频为PCM,对PCM...
ios中audio不能直接通过audio.play()播放,需要用户在click事件或者touch事件中执行audio.play()才能播放。 ajax回调中audio.play()音乐不能正常播放。 用户点击按钮,等服务器返回数据后再播放相应的成功或失败的...
iOS 音频队列 录音
应用 beginBackgroundTaskWithExpirationHandler 实现播放器的后台工作
主要介绍了小程序ios音频播放没声音问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
本代码演示如何播放本地音乐,并且截取音频
iOS音频录制和播放
ios长驻后台运行 无声音乐播放+VOIPi