2011-08-15 2 views
0

AVPlayer를 사용하여 원격 mp3를 스트리밍하려고합니다.iPhone AVPlayer - 백그라운드에서 코드 실행

오디오 세션을 설정하고 백그라운드에서 오디오 재생을 info.plist 파일에 추가했습니다.

는이 코드를 실행하고 있습니다 :

self.timeObserver = [self->player addPeriodicTimeObserverForInterval:CMTimeMake(1, 1) queue:nil usingBlock:^(CMTime time) { 
    [self updateControls]; 
}]; 

초마다 updateControls를 호출하는 시간 관찰자를 추가 할 수 있습니다.

사운드 버퍼가 낮 으면 플레이어가 일시 중지되고 백그라운드에서이 코드가 중지되므로 수동으로 앱에서 재생을 다시 눌러야합니다. (플레이어를 일시 중지해도이 코드가 실행되지 않습니다.)

잘못된 것이 있습니까? 중단없이 백그라운드에서 전체 코드를 실행하려면 어떻게해야합니까? 당신은이처럼 배경 코드를 봉투해야합니다

답변

0

당신은 무기한 배경에서 임의의 코드를 실행할 수 없습니다. 오디오는 계속 재생할 수 있지만 최전방 앱이 아닌 경우 UI를 업데이트하지 않아야합니다. 앱이 포 그라운드로 다시 이동하면 UI를 업데이트 할 수 있습니다.

AVAudioSession을 올바르게 설정하고 활성화하고 UIBackgroundModes를 설정하면 오디오 앞쪽으로 가야합니다.

0

:

__block UIBackgroundTaskIdentifier bgTask = nil; 
    bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) { 
     [[UIApplication sharedApplication] endBackgroundTask: bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 

//Your bg code here 

[[UIApplication sharedApplication] endBackgroundTask: bgTask]; 
    bgTask = UIBackgroundTaskInvalid; 
+0

http://developer.apple.com/library/iOS/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Configuration/Configuration.html을 볼만큼 내 AudioSession 다른 응용 프로그램에 의해 점령되지 않는이 실행? 또는 대략 10 초 후 사라 졌니? – mzaouar

+0

10 초 이상 걸리는 꽤 좋은 시간 동안 작동합니다. – Akshay

+0

오디오가 재생되는 동안 실행해야합니다. (30-40 분 더하기 ..) self.timeObserver = [self-> player addPeriodicTimeObserverForInterval : CMTimeMake (1, 1) queue : nil usingBlock :^(CMTime time) { [self updateControls]; }]]; 한 번 재생이 일시 중지되었거나 인터넷 연결이 지연되면이 코드는 실행이 중지됩니다. – mzaouar