2013-07-08 2 views
2

나는 차례대로 재생 될 오디오 파일 목록을 스트리밍 할 수있는 응용 프로그램을 개발 중입니다. 나는 github에서 mattgallagher의 audiostreamer를 사용하고 있습니다.백그라운드에서 오디오 스트리밍 시작

이 기능은 앱이 활성화되어있을 때 작동하지만 백그라운드에서 진행되고 한 곡 완료되면 다음 곡을 시작하지 못합니다. 즉, 오디오 스트리머의 초기화가 백그라운드에서 작동하지 않습니다. 내의 Info.plist에서

I는 "필요한 배경 모드"로 설정 한 "앱은 오디오을한다"하지만이 앱이 배경에있을 때 스트림을 시작하는 데 도움이되지 않습니다.

지금 1 주일이 지났으나 나는 해결책을 찾으려고했지만 아무 것도 찾지 못했습니다. 누구든지이 문제를 해결할 수 있습니까?

답변

1

당신의 응용 프로그램은 재생을 중지 즉시 중지됩니다 오디오 파일이므로 두 번째 파일은 재생을 시작할 기회가 없습니다.

오디오 세션을 하나 더 초기화하면 짧은 자동 오디오 파일이 반복 재생됩니다. 필요한만큼 오래 보관할 수 있습니다. 세션에서 오디오 믹싱을 허용해야합니다. 오디오 파일이 무음이기 때문에 오디오에 영향을 미치지 않습니다. 또한 응용 프로그램 스레드를 중지 재생을 중지

AudioSessionInitialize(NULL, NULL, NULL, NULL); 
AudioSessionSetActive(YES); 
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); 

UInt32 allowMixing = true; 
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing); 

NSString* path = [[NSBundle mainBundle] pathForResource:@"silentAudio" ofType:@"m4a"]; 
NSURL* fileURL = [NSURL fileURLWithPath:path]; 
NSError* error = nil; 
self.beatPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; 
if (error != nil) 
{ 
    //process the error 
} 
_beatPlayer.numberOfLoops = -1; 
[_beatPlayer play]; 

:

[_beatPlayer stop]; 
+0

안녕하세요 @ 데이비드, 답장을 보내 주셔서 감사합니다. 집에 돌아와서 다시 연락 드리겠습니다. – Grace

+0

이것은 그 것이다! 고마워! – Grace

0

UIBackgroundModes : iPhoneOSKeys을 사용해야합니다. 당신의 .plist 파일에서

:

<key>UIBackgroundModes</key> 
<array> 
    <string>audio</string> 
</array> 

업데이트 :

는 초기화 코드에 이것을 추가

NSError *setCategoryErr = nil; 
NSError *activationErr = nil; 
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr]; 
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr]; 
+0

안녕 MikroDel, 나는 이미 "필요한 배경 모드"에 "응용 프로그램이 오디오 재생"을 설정했습니다. 앱이 백그라운드로 들어갈 때 오디오 세션을 유지하는 데 도움이되지만 가장 주요한 문제는 첫 번째 오디오 파일이 끝났을 때 다른 노래를 스트리밍하지 않는다는 것입니다. – Grace

+0

@Grace - 내 대답 업데이트 – MikroDel

+0

안녕하세요. 다시 여러 위치에이 코드를 넣으려고했습니다 : - appdelegate, applicationDidEnterBackground 함수 : - [Streamer start]를 호출하기 전에 내보기 컨트롤러에서; 하지만 여전히 동일한 문제에 직면하고 있습니다. 코드를 정확히 어디에 넣어야합니까? – Grace