AV Foundation неправильно сообщает о длительности предмета игрока

Я пытаюсь воспроизвести видео на iOS с помощью AVPlayer, который закодирован с помощью zencoder. Проблема, которую я вижу, заключается в том, что длительность, которую сообщает элемент игрока, является округленной / неточной. Например, продолжительность видео может быть 173,134, а элемент плеера сообщит об этом как плоский 174,0. Это вызывает проблемы с обнаружением загруженного процента и других связанных вещей. Если я пытаюсь использовать видео без кодирования, все сообщается правильно и точно.

Кто-нибудь еще видел это или есть решение?

2 ответа

Решение

Проблема оказалась проблемой с исходным видео / zencoder. Аудио дорожка была немного другой длины, чем видео, что вызвало проблемы с кодированием. Отрезание последней секунды видео, чтобы длительность трека соответствовала, решило проблему.

У меня такая же проблема. Я просто сравниваю разницу между текущей позицией и длительностью предмета и 1 секундой:

- (void)playing:(CMTime)time
{
   CMTime itemDuration = _player.currentItem.asset.duration;
   NSTimeInterval currentTime = CMTimeGetSeconds(time);
   NSTimeInterval duration = CMTimeGetSeconds(itemDuration);
   if (fabs(currentTime - duration) < 1)
      // This is the end.
}
Другие вопросы по тегам