2015-03-10 4 views
2

У меня есть простое приложение для OS X на базе AVPlayer, которое воспроизводит локальные медиа. Он имеет функцию прокрутки вперед и назад, основанную на -seekToTime :. На некоторых носителях есть раздражающая 3-7-секундная задержка в продолжении воспроизведения медиа (особенно в будущем). Я попытался - seekToTime: toleranceBefore: toleranceAfter:, с переменными допусками. Не повезло.AVPlayer seekToTime spinning pizza

+0

Добро пожаловать в StackOverflow! Пожалуйста, прочитайте http://stackoverflow.com/help/how-to-ask –

ответ

2

Публикация ранее решенной проблемы для записи ... Я заметил, что режим seekToTime: пропуски отлично работали, когда воспроизведение было приостановлено. Я сразу (т. Е. Несколько недель спустя) понял, что имеет смысл остановить воспроизведение перед поиском, а затем перезапустить. Пока проблема на 100% решена, и она быстро вспыхивает. Может быть полезно для людей, пытающихся сделать плавный цикл (но я не знаю, как вызвать обработчик завершения, сигнализирующий о конце цикла). Не знаю, работает ли он с iOS. Код примера прилагается:

-(void) movePlayheadToASpecificTime 
{ 
    // assumes this is a method for an AVPlayerView subclass, properly wired with IB 
    // self.player is a property of AVPlayerView, which points to an AVPlayer 

    // save the current rate 
    float currentPlayingRate = self.player.rate; 

    // may need fancier tweaking if the time scale changes within asset 
    int32_t timeScale = self.player.currentItem.asset.duration.timescale; 

    // stop playback 
    self.player.rate = 0; 

    Float64 desiredTimeInSeconds = 4.5; // or whatever 

    // convert desired time to CMTime 
    CMTime target = CMTimeMakeWithSeconds(desiredTimeInSeconds, timeScale); 

    // perform the move 
    [self.player seekToTime:target]; 

    // restore playing rate 
    self.player.rate = currentPlayingRate; 

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