`
muyu114
  • 浏览: 135646 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

iOS AvPlayer AvAudioPlayer音频的后台播放问题

 
阅读更多

iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了。如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,AvPlayer播放的话,要实现完美的后台音频播放,依据app的功能需要,可能需要实现几个关键的功能。

首先,播放音频之前先要设置AVAudioSession模式,通常只用来播放的App可以设为AVAudioSessionCategoryPlayback即可。模式意义及其他模式请参考文档。

  1. AVAudioSession*session=[AVAudioSessionsharedInstance];
  2. [sessionsetCategory:AVAudioSessionCategoryPlaybackerror:nil];
  3. [sessionsetActive:YESerror:nil];

1。通知OS该app支持background audio。缺省情况下,当按下home键时,当前正在运行的程序被suspend,状态从active变成in-active,也就是说如果正在播放音频,按下HOME后就会停止。这里需要让app在按在HOME后,转到后台运行而非被suspend,解决办法是在程序的-info.plist中增加required background modes这个key项,并选择App plays audio这个value项。



2。现在按下HOME键后,程序退到后台,但是声音仍在播放。但是如果要实现播放列表的依次播放、循环播放,即放完一首后自动切换到下一首,问题来了,当App在后台放完一首后,就会停下来。原因是在后台运行时,一旦声音停下来,程序也随之suspend,因此在切换文件加载的间隙,程序就会被suspend。曾经有山寨的解决办法是专门起一个player的实例连续不停的放同一无声音片断,阻止程序被suspend。这里提供的方法是通过申请后台taskID达到后台切换播放文件的功能。

即声明后台task id,并通过beginBackgroundTaskWithExpirationHandler将App设为后台Task,达到持续后台运行的目的。我们知道一般情况下,按HOME将程序送到后台,可以有5或10秒时间可以进行一些收尾工作,具体时间[[UIApplication sharedApplication] backgroundTimeRemaining]返回值。超时后app会被suspend,现在要做的就是用[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]开始后台任务,可以将后台运行超时时间长时间的延长,具体延长多少时间还是见返回值,总之对于放段时间音乐应该够了。另一个问题是每个开始的后台任务,都必须用endBackgroundTask来结束。 因此,在每次开始播放后启动新的后台任务,同时结束上一个后台任务:

首先,要在viewdidload中

  1. [UIApplicationsharedApplication]beginReceivingRemoteControlEvents];
否则,无法切换到下一首,接下来
  1. UIBackgroundTaskIdentifiernewTaskId=UIBackgroundTaskInvalid;
  2. [avPlayerplay];
  3. newTaskId=[[UIApplicationsharedApplication]beginBackgroundTaskWithExpirationHandler:NULL];
  4. if(newTaskId!=UIBackgroundTaskInvalid&&oldTaskId!=UIBackgroundTaskInvalid){
  5. [[UIApplicationsharedApplication]endBackgroundTask:oldTaskId];}
  6. oldTaskId=newTaskId;

当然,还有更方便的办法就是在resignActive时beginBackgroundTaskWithExpirationHandler:并在BecomeActive中endBackgroundTask:


3。我们知道,ipod播放程序在后台时,双击HOME键,会有个控制界面,可以对它进行播放控制。

如果您想让您的app可以像ipod一样在后台也可以方便的通过双击HOME键来控制,就要用到远程控制事件了。

首先在viewdidload等初始化的地方声明App接收远程控制事件,并在相应地方结束声明

  1. -(void)viewWillAppear:(BOOL)animated
  2. {
  3. [superviewWillAppear:animated];
  4. [UIApplicationsharedApplication]beginReceivingRemoteControlEvents];
  5. [selfbecomeFirstResponder];
  6. }
  7. -(void)viewWillDisappear:(BOOL)animated
  8. {
  9. [superviewWillDisappear:animated];
  10. [UIApplicationsharedApplication]endReceivingRemoteControlEvents];
  11. [selfresignFirstResponder];
  12. }
定义
  1. -(BOOL)canBecomeFirstResponder
  2. {
  3. returnYES;
  4. }
最后定义remoteControlReceivedWithEvent,处理具体的播放、暂停、前进、后退等具体事件
  1. -(void)remoteControlReceivedWithEvent:(UIEvent*)receivedEvent{
  2. if(receivedEvent.type==UIEventTypeRemoteControl){
  3. switch(receivedEvent.subtype){
  4. caseUIEventSubtypeRemoteControlTogglePlayPause:
  5. [selfplayButtonPressed:playButton];
  6. [selftesting];
  7. break;
  8. caseUIEventSubtypeRemoteControlPreviousTrack:
  9. [selfrewButtonReleased:(UIButton*)rewButton];
  10. break;
  11. caseUIEventSubtypeRemoteControlNextTrack:
  12. [selfffwButtonReleased:(UIButton*)ffwButton];
  13. break;
  14. default:
  15. break;
  16. }
  17. }
  18. }

4. 至此,您有播放App已经相当完美了,还有最后一个问题,那就是当用户使用耳机时,问题又来了。系统默认当插入耳机时,正在播放的声音不中断,直接切换到耳机播放,而当拔出耳机时,播放停止。如果这种行为满足您的要求,那OK,否则您就需要进一步研究耳机检测和声音路由切换的问题。


分享到:
评论

相关推荐

    IOS 后台播放音乐及解锁动画(闪动的label)界面

    在iOS中,我们可以使用`AVFoundation`框架中的`AVAudioPlayer`或`AVPlayer`类来播放音频。为了在后台继续播放音乐,我们需要在`Info.plist`文件中添加`UIBackgroundModes`键,并设置其值为`audio`。这样,系统就会...

    iOS app 调用音乐永久后台运行

    在iOS中,通常使用AVFoundation框架,特别是`AVAudioPlayer`或`AVPlayer`类来播放音乐。这两个类可以处理音频文件的加载、播放、暂停和停止等功能。确保正确配置音频会话类别,如`AVAudioSessionCategoryPlayback`,...

    ios剪刀布小游戏(音频和音效的播放)

    8. **音频Session**:AVAudioSession负责管理应用程序的音频会话,可以设置会话类别以决定如何与其他音频应用共存,如是否允许后台播放,是否中断其他音频等。 9. **适配不同设备**:考虑到iOS设备的多样性,如...

    ios-音频、视频 边看边下.zip

    无论是音频还是视频的播放,都可能会遇到各种错误,如文件格式不支持、网络问题等。因此,良好的错误处理机制是必要的,通常通过设置代理方法来捕获并处理这些错误。 以上是根据"ios-音频、视频 边看边下.zip"和...

    ios-仿照QQ音乐做的demo.zip

    3. **多任务处理**:QQ音乐的特色之一是后台播放。在iOS中,应用程序通常在后台模式下不能执行耗时操作,但通过特定的音频播放背景模式,我们可以保持音频播放即使在应用被切出或设备锁定时。 4. **音量控制**:...

    IOS应用源码——视频音频控制器.zip

    在iOS开发中,创建一个能够控制视频和音频播放的应用是一个常见的任务。这个“IOS应用源码——视频音频控制器.zip”包含的源代码很可能是用于构建这样一个功能丰富的控制器的实例。让我们深入探讨一下这个主题,看看...

    ios收音机源码

    `RadioStream`可能包含了使用AVPlayer或AVAudioPlayer类来播放音频流的代码。 - 音频流通常采用HTTP Live Streaming (HLS) 或其他协议如Icecast或Shoutcast,以适应不同的网络环境。 2. **多媒体编程**: - ...

    ios-简单音乐播放器.zip

    它包含了处理音频和视频所需的各种类,如AVAudioPlayer用于播放音频,AVAsset用于处理多媒体资源,AVPlayer和AVPlayerItem用于播放流媒体内容等。在这个简单音乐播放器中,AVAudioPlayer可能是主要使用的类,因为它...

    音乐播放器ios

    音乐播放器需要利用AVAudioPlayer或AVPlayer来播放音频文件,它们支持多种音频格式,如MP3、AAC、Apple Lossless等。 2. 音频缓冲与流媒体:为了实现流畅的播放体验,需要处理网络延迟和数据传输速度的问题。可以...

    ios swift 在线音乐播放器 示例

    4. **后台播放**:iOS支持后台播放音乐,这是通过在Info.plist文件中设置`UIBackgroundModes`键,并包含`audio`子键来实现的。此外,需要确保在`AppDelegate.swift`中启用后台模式。 5. **URLSession**:在线音乐...

    音频播放器

    - **后台播放**:若希望音频在后台也能持续播放,需要启用`AVAudioSession`的后台模式。 - **版权和权限**:确保处理好音频文件的版权问题,并在需要时请求用户授权访问媒体库。 - **错误处理**:良好的错误处理...

    ios应用源码之界面非常漂亮的音乐播放器 2018128

    源码中可能包含了AVPlayer或AVAudioPlayer类的使用,它们能够处理音频文件的加载、播放、暂停、停止等操作。为了实现音乐播放的控制,如进度条、音量调节等,开发者可能还结合了UIProgressView和UISlider等UI组件。 ...

    ios版本的收音机程序

    另外,为了节省电池,应用应该有智能的电源管理,比如在后台播放时降低音频质量或暂停播放。 最后,测试和调试是不可或缺的环节。使用Xcode的内置工具进行单元测试和UI测试,确保所有功能正常工作。还要在各种设备...

    IOS应用源码之界面非常漂亮的音乐播放器 .rar

    该压缩包文件“IOS应用源码之界面非常漂亮...通过分析和理解这个项目,不仅可以学习到如何创建一个美观的音乐播放界面,还能了解到如何有效地处理音频播放,并且可能接触到一些高级特性的实现,如后台播放和离线模式。

    界面非常漂亮的音乐播放器功能ios源码.rar

    8. **后台播放**:使用AVAudioSession的Category设置,确保音乐在锁屏或应用切换时仍能继续播放。 9. **通知中心小部件**:可添加到iOS的通知中心,让用户快速控制音乐播放。 10. **蓝牙耳机/CarPlay兼容**:确保...

    ios-音乐播放器.zip

    其中,AVAudioPlayer或AVPlayer类可以用来加载、播放和控制音频文件。设置好播放完毕后自动切换到下一首歌的回调,确保音乐不间断地播放。 3. **播放模式设置**:描述中的“播放详情页可以上一首下一首单曲循环”,...

    ios视频通话demo

    - **音频解码**:对应地,音频数据也需要解码为原始PCM格式,然后通过音频单元或AVPlayer进行播放。 - **渲染**:解码后的视频帧将被渲染到屏幕上的某个UIView或CALayer,而音频则通过AVAudioPlayer或AVAudioUnit...

    ios 毕业设计 音乐播放器

    你需要学会如何使用AVAudioPlayer或AVPlayer来播放音乐,以及如何解析和保存下载的音乐文件。 6. **文件系统管理**:下载的音乐文件需要存储在用户的设备上,这涉及到文件系统操作,如文件的读写、删除和路径管理。...

    IOS音乐播放器

    最后,为了实现播放控制,比如后台播放、锁屏界面的控制,开发者需要理解和使用iOS的Media Player框架,设置合适的音频会话类别,并处理通知中心和控制中心的控制响应。 综上所述,开发一个【iOS音乐播放器】涵盖了...

    ios本地音乐播放器土豆视频在线播放器

    3. **状态栏和通知**:处理音乐后台播放时的状态栏图标和控制中心的音乐控制,以及播放视频时的状态栏透明度。 四、权限管理 1. **隐私权限**:访问用户媒体库需要获取用户授权,使用`...

Global site tag (gtag.js) - Google Analytics