2012-06-14 1 views
1

Apple의 avTouch에서 일부 기능을 복제하려고하지만 트랙을 재생할 때 AVAudioPlayer을 얻을 수 없습니다.Apple의 avTouch 프로젝트와 유사한 AVAudioPlayer 사용

로그에 Could not play (null)이 기록됩니다. (null)은 AVAudioplayer player.url을 나타냅니다. 그러나 player.url을 기록하면 올바르게 반환됩니다. 또한 스트림 URL을 테스트했습니다 (사운드 클라우드에서 나온 것입니다).

나는 거의 샘플 코드에서 두 가지만 변경했습니다.

  1. 파일이 아닌 오디오 스트림 URL을 사용하고 있습니다. 나는이 B는/C AVAudioPlayer가 발생 생각 :
  2. 나는

    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로 간단하게 변경할 수 있습니까? 나는 그렇게 쉽지 않다는 느낌이 들었다.

답변

0

AVAudioPlayer는 네트워크 스트림 용으로 제공되지 않습니다. Apple docs :

Apple recommends that you use this class for audio playback unless you are playing audio captured from a network stream or require very low I/O latency.