iPhone:应用程序在后台播放音乐

Posted

技术标签:

【中文标题】iPhone:应用程序在后台播放音乐【英文标题】:iPhone: Streaming music while application is in background 【发布时间】:2011-05-11 21:00:16 【问题描述】:

我有一个应用程序,它使用 Matt Gallagher 的 Audiostreamer 类流式传输音乐。这可以作为后台进程正常工作,除非我希望在流完成后能够跳到下一首歌曲。不幸的是,这部分不起作用。 最初,我有一个计时器来监视流,但意识到当应用程序后台运行时,该计时器不再运行。所以我尝试在数据包读取函数中添加一个委托回调:

void ASReadStreamCallBack(CFReadStreamRef aStream, CFStreamEventType eventType, void* inClientInfo)

   AudioStreamer* streamer = (AudioStreamer *)inClientInfo;
   double percent = [streamer progress]/[streamer duration];
   if(percent>=0.98 || (percent>=0.95 && [streamer isIdle]))
     if([streamer.delegate respondsToSelector:@selector(didFinishPlayingStream:)] )
         [streamer.delegate didFinishPlayingStream:streamer];
         streamer.delegate = nil;
     
   


   [streamer handleReadFromStream:aStream eventType:eventType];

当应用程序在前台时这工作正常,但当应用程序在后台时不再工作。委托方法基本上是发送一个请求来获取下一首歌曲的流 URL,然后一旦获得它就会创建一个新的 AudioStreamer 类

【问题讨论】:

您的应用在后台的播放效果如何? 【参考方案1】:

当应用程序处于后台时,您可以实现委托来处理不同的远程控制状态。

- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent  
switch (receivedEvent.subtype) 
    case UIEventSubtypeRemoteControlTogglePlayPause:
        if (player.isPlaying) 
            [player pause];
         else 
            [player start];
        
        break;

    case UIEventSubtypeRemoteControlPreviousTrack:
        break;

    case UIEventSubtypeRemoteControlNextTrack:
        [self skipSong:nil];
        break;

    default:
        break;
 

这样的东西对我有用。

【讨论】:

【参考方案2】:

我已将部分受 Matt Gallagher 的 AudioStreamer 启发的 AudioPlayer/streamer 课程上传到 https://code.google.com/p/audjustable.

其中一个更酷的功能是它支持无缝播放。这意味着 AudioQueue 永远不会在间隙之间关闭;防止 iOS 暂停您的应用。

您可以通过调用AudioPlayer:queueDataSource 来实现AudioPlayerDelegate:didFinishBufferingSourceWithQueueItemIdAudioPlayerDelegate:didFinishPlayingQueueItemId 来排队下一个曲目。

如果您在使用它时需要帮助,请告诉我。

【讨论】:

以上是关于iPhone:应用程序在后台播放音乐的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在后台播放音频吗

AudioQueueStart() 方法无法在 ios4 后台播放音乐

如何在 iPhone 游戏中播放背景音乐? [复制]

iOS swift流媒体应用程序不在后台模式下播放音乐

iPhone App杀死我的iPhone音乐播放器?

IOS如何在后台播放音乐声音并暂停当前播放的音乐应用程序