AVPlayer seekToTime спиннинг пиццы

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

1 ответ

Решение

Отправка ранее решенной проблемы для записи... Я заметил, что 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;

}
Другие вопросы по тегам