Използване на AVAudioPlayer подобно на проекта avTouch на Apple

Опитвам се да репликирам част от функционалността в avTouch на Apple, но не мога да накарам AVAudioPlayer да възпроизведе песен.

Регистрира Could not play (null). (null) представлява AVAudioplayer player.url. Въпреки това, когато регистрирам player.url, той се връща правилно. Тествах и URL адреса на потока (той е от soundcloud).

Направих почти само две промени от примерния код.

  1. Използвам URL адрес на аудио поток, а не файл.
  2. Трябваше да добавя __bridge в следния код (всъщност не знам за какво е)

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

Редактиране: Мисля, че това се случва b/c AVAudioPlayer не е предназначено за мрежови потоци. Мога ли просто да сменя AVAudioPlayer на AVPLayer? Имам чувството, че не е толкова лесно.


person mnort9    schedule 14.06.2012    source източник


Отговори (1)


AVAudioPlayer не е предназначен за мрежови потоци. Документи на Apple:

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.

person mnort9    schedule 15.06.2012