2011-05-11 44 views
2

我有一個應用程序,流式音樂使用AudioStreamer類由馬特加拉格爾。除了我希望能夠在數據流完成後跳到下一首歌曲時,它可以很好地用作後臺進程。不幸的是,這部分不起作用。 最初我有一個計時器監視流,但意識到,當這個計時器不再運行的應用程序背景。於是,我就在報文閱讀功能附加委託回調:iPhone:流式音樂,而應用程序是在後臺

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]; 
} 

也能正常工作時,應用程序是在前臺,但是當應用程序被backgrounding不再起作用。委託方法基本上發送一個請求以獲取下一首歌曲的流URL,然後一旦它創建了一個新的AudioStreamer類

+0

你的應用程序是如何在後臺播放的? – 2013-04-18 13:32:07

回答

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; 
} } 

像這樣的東西適合我。

1

我已將部分由Matt Gallagher的AudioStreamer部分啓發的AudioPlayer/streamer類上傳至 https://code.google.com/p/audjustable

其中一個較酷的功能是它支持無間隙回放。這意味着AudioQueue在間隙之間永遠不會關閉;阻止iOS暫停您的應用。

您可以通過調用AudioPlayer:queueDataSource來實現AudioPlayerDelegate:didFinishBufferingSourceWithQueueItemIdAudioPlayerDelegate:didFinishPlayingQueueItemId以排隊下一個音軌。

讓我知道你是否需要使用它的幫助。

相關問題