Я использую метод AVPlayer -(id)addPeriodicTimeObserverForInterval: queue: usingBlock:
для обновления интерфейса до достижения воспроизведения. Однако мой прогресс никогда не заканчивается.CMTime в AVPlayer addPeriodicTimeObserverForInterval: обратный вызов никогда не достигает длительности элемента
CMTime duration = self.player.currentItem.asset.duration;
float totalSeconds = (Float64)(duration.value * 1000)/(Float64)(duration.timescale);
NSLog(@"duration: %.2f", totalSeconds);
__weak __typeof(self) welf = self;
_mTimeObserver = [self.player addPeriodicTimeObserverForInterval:CMTimeMake(10, 1000)
queue:NULL // main queue
usingBlock:^(CMTime time) {
float totalSeconds = (Float64)(time.value * 1000)/(Float64)(time.timescale);
NSLog(@"progress %f", totalSeconds);
}];
журналы:
App[2373:792179] duration: 3968.00
кнопка хит игры
App[2373:792179] progress 0011.176
App[2373:792179] progress 0021.175
...
App[2373:792179] progress 3701.319
App[2373:792179] progress 3704.000
не Должен ли я ожидать, последнее число будет 3968.0
?
Аудио передается с сервера.
EDIT
номер Последний прогресс ВСЕГДАduration - 0.264 sec
независимо от фактической длины продолжительность.
Это настолько странно, что мы могли бы использовать смайлики на SO.
Тот же материал (другой звук): 'продолжительность: 4.736 maxProgress: 4.472'. В чем причина? РЕДАКТИРОВАТЬ: только что увидели обновленный ответ, я попробую другие варианты – kerd
Хорошо, я пробовал оба - тот же результат – kerd
@kerd Это очень интересно. Можете ли вы также использовать «CMTimeGetSeconds» для печати продолжительности? И еще одно: попробуйте более тонкую обратную связь. Вместо 10 секунд попробуйте '1.0/30.0'. –