Ich verwende AVPlayers -(id)addPeriodicTimeObserverForInterval: queue: usingBlock:
Methode, um UI bis zum Wiedergabefortschritt zu aktualisieren. Mein Fortschrittsbalken erreicht jedoch niemals das Ende.CMTime in AVPlayers addPeriodicTimeObserverForInterval: Callback erreicht nie die Dauer des Elements
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);
}];
Protokolle:
App[2373:792179] duration: 3968.00
Hit Play-Taste
App[2373:792179] progress 0011.176
App[2373:792179] progress 0021.175
...
App[2373:792179] progress 3701.319
App[2373:792179] progress 3704.000
Sollte ich nicht erwarten, dass letzte Nummer 3968.0
sein?
Audio wird vom Server gestreamt.
EDIT
Letzte Fortschritte Zahl ist IMMERduration - 0.264 sec
was tatsächliche Dauer lang ist.
Das ist so seltsam, ich wünschte, wir könnten Emoticons auf SO verwenden.
Gleiches (anderes Stück): 'duration: 4.736 maxProgress: 4.472'. Was kann der Grund sein? EDIT: Just sah Sie aktualisierte Antwort, ich werde versuchen, andere Optionen – kerd
Ok, ich habe beide versucht - das gleiche Ergebnis – kerd
@ kerd Das ist sehr interessant. Können Sie auch 'CMTimeGetSeconds' verwenden, um die Dauer zu drucken? Und noch etwas: Versuchen Sie einen feinkörnigeren Rückrufwert. Versuchen Sie anstelle von 10 Sekunden '1.0/30.0'. –