2015-05-13 4 views
0

Я пытаюсь изменить звуковой шаг AVPlayerItem в зависимости от скорости, которую я отправляю AVPlayer.Почему AVPlayerItem не соблюдает настройку AVAudioTimePitchAlgorithmVarispeed?

Чтобы сделать это, я инициализацию AVPlayerItem с AVAsset, задающие «AVAudioTimePitchAlgorithmVarispeed», как, например:

AVPlayerItem *nPlayerItem = [AVPlayerItem playerItemWithAsset:asset]; 
     [nPlayerItem setAudioTimePitchAlgorithm:AVAudioTimePitchAlgorithmVarispeed]; 

Я тогда прикрепить playerItem к AVPlayer, однако, когда я установил ставку на AVPlayer до менее 1 или больше 1, шаг не изменяется. Вместо этого AVPlayerItem использует алгоритм «AVAudioTimePitchAlgorithmSpectral» и не соблюдает указанный мной алгоритм. Я нацелен на 10.9 и строю против 10.9. Согласно документам, эта функция доступна с 10.9.

+0

Как только я инициализировал свой AVPlayerItem, я изучил свойство canPlaySlowForward элемента и возвратил NO, который я нахожу нечетным, учитывая, что я могу установить скорость меньше 1.0. – blackirishman

ответ

1

Я решить мою проблему, 1) добавление playerItem к AVPlayer 2) установки значения ключа наблюдения (КВО) на статус элемента игрока:

- (void)observeValueForKeyPath:(NSString *)keyPath 
        ofObject:(id)object 
        change:(NSDictionary *)change 
        context:(void *)context { 

     if ([object isKindOfClass:[AVPlayerItem class]] && [keyPath isEqualToString:@"status"]) { 
      AVPlayerItem *nPlayerItem = (AVPlayerItem *)object; 
      if([nPlayerItem status] == AVPlayerItemStatusReadyToPlay){ 
       [nPlayerItem setAudioTimePitchAlgorithm:AVAudioTimePitchAlgorithmVarispeed]; 
      } 
     } 
} 

Только после playerItem получил статус «AVPlayerItemStatusReadyToPlay» , могу ли я успешно установить AVAudioTimePitchAlgorithmVarispeed в аудиоИнтерфейсе алгоритма playerItems.

Смежные вопросы