3

AVPlayer の-(id)addPeriodicTimeObserverForInterval: queue: usingBlock:メソッドを使用して、再生の進行状況まで UI を更新します。ただし、進行状況バーが最後まで到達しません。

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か?

オーディオはサーバーからストリーミングされます。

編集

最後の進捗番号は duration - 0.264 sec実際の期間の長さが何であれ常にです。

これは非常に奇妙です。SO で絵文字を使用できればいいのにと思います。

4

2 に答える 2

0

ドキュメントは明確に述べています:

プレーヤーが時間オブザーバーを呼び出したい限り、戻り値を保持する必要があります。

于 2016-06-22T23:56:56.480 に答える