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的应用启动事件里面添加以下代码:

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

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

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

QQ20130716-1

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

3. 远程控制

支持后台播放了之后,不回到应用里还是不可以对音频的播放进行控制,而且耳机的按钮功能也不管用,这个还是很不方便的。我们接下来需要做的就是向系统注册远程控制(Remote Control),在播放音频的ViewController里添加以下代码:

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

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

QQ20130716-2

4. 锁屏封面

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS上的AVAudioPlayer提供了一种方便的方式来进行音频播放,包括后台播放。在后台播放音频时,我们需要遵循特定的设置和步骤。 首先,我们需要在应用程序的Capabilities选项卡中启用后台模式。在Xcode中找到应用程序的Targets,然后点击Capabilities选项卡,将“Background Modes”开关打开,并勾选“Audio, AirPlay, and Picture in Picture”。 然后,在代码中设置AVAudioSession的类别为AVAudioSessionCategoryPlayback。这可以通过以下代码实现: ``` import AVFoundation let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setCategory(.playback, options: .defaultToSpeaker) try audioSession.setActive(true) } catch { print("设置音频会话类别失败: \(error)") } ``` 接下来,我们需要在应用程序的AppDelegate类中创建一个后台任务。当我们按下Home键离开应用程序时,这个后台任务将会被激活。 ``` func applicationDidEnterBackground(_ application: UIApplication) { backgroundTask = application.beginBackgroundTask(withName: "PlayAudioInBackground", expirationHandler: { application.endBackgroundTask(self.backgroundTask) self.backgroundTask = UIBackgroundTaskIdentifier.invalid }) } ``` 然后,创建一个AVAudioPlayer实例来播放音频文件。我们可以使用它的`play`方法来开始播放音频。 ``` let audioURL = Bundle.main.url(forResource: "audio", withExtension: "mp3") do { audioPlayer = try AVAudioPlayer(contentsOf: audioURL!) audioPlayer.prepareToPlay() audioPlayer.play() } catch { print("无法播放音频文件: \(error)") } ``` 在音频播放完成或者我们不再需要后台任务时,需要结束后台任务。 ``` func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { if flag { // 当音频播放完成时调用 audioPlayer.stop() UIApplication.shared.endBackgroundTask(backgroundTask) backgroundTask = UIBackgroundTaskIdentifier.invalid } } ``` 通过以上设置,我们可以确保AVAudioPlayer在应用程序进入后台时继续播放音频。但需要记住,长时间背景播放可能会影响设备的电池寿命,所以请确保仅在必要时使用后台播放功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值