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就可以基本完成了,更多细节就需要你自己去修改了。
相关推荐
3. **后台远程控制**:这部分功能允许用户在应用后台时,通过系统控制中心(如iOS的Control Center或Android的通知栏)来控制音频播放,包括播放、暂停、上一曲和下一曲。在iOS中,这需要用到`MPRemoteCommandCenter...
综上所述,这个工程涵盖了iOS音频播放、后台模式、歌词同步、UI更新、远程控制等多个技术点,是学习和实践iOS音频开发的一个良好示例。开发者可以通过研究此项目,进一步提升自己的iOS编程技能。
iOS音乐后台播放及锁屏信息显示 iOS音乐后台播放及锁屏信息显示是一项非常重要的功能,特别是在音乐类应用程序中。通过本文,我们可以学习如何在iOS平台上实现音乐的后台播放,以及锁屏信息的显示。 在iOS平台上,...
开发者需要使用音频库(如Android的MediaPlayer API或iOS的AVFoundation框架)来加载、播放和控制音频流。此外,显示音乐信息,如艺术家、专辑、歌曲名称等,需要对元数据处理有深入理解,这些数据通常嵌入在音频...
在实际项目中,开发者还需要考虑音频播放的控制(如暂停、停止、快进、倒退)、音量控制、音频 session 的设置(如是否允许后台播放)以及错误处理等方面。此外,为了优化用户体验,可以结合`AVPlayerLayer`在视图上...
"ios-流音频播放 提前缓冲播放.zip"这个压缩包可能包含了一个名为"FreeStreamer音频播放"的示例项目,用于演示如何实现音频流的提前缓冲播放。FreeStreamer是一个开源的音频流媒体播放器库,适用于iOS和Android平台...
在iOS开发中,实现音乐播放和远程控制是常见的需求,主要涉及到AudioToolBox框架和AVFoundation框架的应用。本文将深入探讨这两个框架的核心组件及其在音乐播放中的应用。 首先,AudioToolBox框架是苹果提供的一套...
总结来说,解决小程序在iOS平台音频播放无声音的问题,一方面要检查设备的静音模式设置,另一方面要合理利用微信小程序提供的`obeyMuteSwitch`属性。在开发过程中,对于遇到的问题,应该多查阅官方文档,利用官方...
总结来说,实现iOS播放器的后台播放功能涉及配置`AVAudioSession`、使用`beginBackgroundTaskWithExpirationHandler`管理后台任务,以及适当地处理音频会话的中断和恢复事件。通过这些技术,你可以为用户提供无缝的...
在iOS开发中,音频播放和下载是常见的功能需求,尤其对于音乐、有声书或教育类应用来说至关重要。本文将详细解析标题为“ios 音频播放下载类”的OC代码封装,以及如何实现音频的下载和播放。 首先,我们看到有两个...
为了控制播放,可以监听AVAudioPlayer的status属性,例如检查是否已准备好播放: ```swift if audioPlayer.isPlaying { audioPlayer.pause() } else { audioPlayer.play() } ``` 此外,还可以设置音量、跳转到...
iOS锁屏音频播放控制是指在iOS设备上,用户可以在锁屏状态下控制音频的播放、暂停、上一首、下一首等操作。这种功能可以极大地提高用户体验,提供更加便捷的音乐播放体验。 在iOS中,实现锁屏音频播放控制需要使用...
在iOS平台上实现流媒体播放是一项重要的技术,它允许用户观看电影、视频和其他多媒体内容而无需等待整个文件下载完成。这得益于流媒体技术的实时传输特性,使得内容可以边下载边播放,大大提升了用户体验。以下是对...
总结来说,iOS上的实时语音播放涉及音频数据的处理、`AVAudioPlayer`的使用以及可能的性能优化。通过理解PCM数据和`AVAudioPlayer`的工作原理,开发者可以构建出高效、稳定的实时语音通信系统。
5. **控制播放、暂停、停止和跳转**:AVPlayer提供了控制播放进度的方法,如play()、pause()、seek(to:)等,开发者可以轻松实现播放、暂停、快进、后退等功能。 6. **处理播放状态和错误**:AVPlayer有各种状态(如...
流式音频播放的基本流程是:应用通过URL连接到远程音频资源,AVPlayer负责读取数据流,并将其解码后送入音频硬件进行播放。在这个过程中,AVPlayer会自动处理缓冲、暂停、恢复、跳转等操作,确保音频播放的流畅性。 ...
总结,通过使用AudioQueue服务,我们可以有效地在iOS上播放PCM音频数据。AudioQueue不仅简单易用,而且性能优秀,特别适合处理大容量的音频流。在实际应用中,还需要考虑到错误处理、暂停、停止、音量控制等附加功能...
在iOS开发中,音频处理是一项重要的技能,涵盖了音频播放和音频截取等核心功能。本文将深入探讨如何在iOS应用中实现这些功能,主要基于给定的“iOS音频播放和音频截取”主题。 首先,我们要了解iOS中的音频框架。...
总之,“后台播放音乐的ios示例程序”通过使用`AVFoundation`框架和正确配置音频会话,展示了如何在iOS应用中实现在后台持续播放音乐的功能。这涉及到对Info.plist的修改、`AVAudioPlayer`的使用以及`AVAudioSession...
这个"iOS 后台播放歌曲 demo"示例将展示如何在Objective-C(OC)环境下实现在iOS设备上实现网络歌曲和本地歌曲的后台播放,同时提供封面显示及上一曲、下一曲的控制功能。以下是对这个demo的详细解读。 首先,为了...