Apple의 avTouch에서 일부 기능을 복제하려고하지만 트랙을 재생할 때 AVAudioPlayer
을 얻을 수 없습니다.Apple의 avTouch 프로젝트와 유사한 AVAudioPlayer 사용
로그에 Could not play (null)
이 기록됩니다. (null)은 AVAudioplayer player.url
을 나타냅니다. 그러나 player.url
을 기록하면 올바르게 반환됩니다. 또한 스트림 URL을 테스트했습니다 (사운드 클라우드에서 나온 것입니다).
나는 거의 샘플 코드에서 두 가지만 변경했습니다.
- 파일이 아닌 오디오 스트림 URL을 사용하고 있습니다. 나는이 B는/C
AVAudioPlayer
가 발생 생각 : 나는
OSStatus result = AudioSessionInitialize(NULL, NULL, NULL, NULL); if (result) NSLog(@"Error initializing audio session! %@", result); [[AVAudioSession sharedInstance] setDelegate: self]; NSError *setCategoryError = nil; [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError]; if (setCategoryError) NSLog(@"Error setting category! %@", setCategoryError); result = AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange, RouteChangeListener, (__bridge void *)self); if (result) NSLog(@"Could not add property listener! %@", result); void RouteChangeListener( void * inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void * inData) { SongsViewController* This = (__bridge SongsViewController*)inClientData; if (inID == kAudioSessionProperty_AudioRouteChange) { CFDictionaryRef routeDict = (CFDictionaryRef)inData; NSNumber* reasonValue = (__bridge NSNumber*)CFDictionaryGetValue(routeDict, CFSTR(kAudioSession_AudioRouteChangeKey_Reason)); int reason = [reasonValue intValue]; if (reason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) { [This pausePlaybackForPlayer:This.player]; } } }
편집을 (내가 정말 생각입니다 모르는) 다음 코드 __bridge
를 추가했다 네트워크 스트림을위한 것이 아닙니다. AVAudioPlayer를 AVPLayer로 간단하게 변경할 수 있습니까? 나는 그렇게 쉽지 않다는 느낌이 들었다.