AVPlayerの-(id)addPeriodicTimeObserverForInterval: queue: usingBlock:
メソッドを使用してUIを再生進捗まで更新します。しかし、私のプログレスバーは決して終わりに達しません。AVPlayerのaddPeriodicTimeObserverForIntervalのCMTime:コールバックがアイテムの再生時間に達することはありません
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
実際の期間の長さがあるものは何でもです。
これは非常に奇妙なので、私はあなたの上で顔文字を使うことができたらいいと思います。
同じもの(他の音): '再生時間:4.736 maxProgress:4.472'。理由は何でしょうか?編集:ちょうどあなたの更新答えを見た、私は他のオプションを試してみましょう – kerd
私は両方を試してみました - 同じ結果 – kerd
@kerdそれは非常に興味深いです。また、 'CMTimeGetSeconds'を使用して期間を印刷できますか?さらにもう1つ:細かいコールバック値を試してみてください。 10秒の代わりに '1.0/30.0'を試してください。 –