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.
}