iOS 7 AVPlayer AVPlayerItem durée incorrecte dans iOS 7
J'ai le code suivant dans mon application:
NSURL *url = [NSURL fileURLWithPath: [self.DocDir stringByAppendingPathComponent: self.FileName] isDirectory: NO];
self.avPlayer = [AVPlayer playerWithURL: url];
Float64 duration = CMTimeGetSeconds(self.avPlayer.currentItem.duration);
Cela a bien fonctionné avec iOS 6, mais avec iOS 7 pour une raison quelconque, il renvoie NaN. Lors de l'inspection de l'auto.avPlayer.currentItem.la durée de la CMTime objet a 0 avec un drapeau de 17.
Il est intéressant de noter que le lecteur fonctionne très bien, juste la durée est faux.
Quelqu'un d'autre a connu les mêmes problèmes? Je suis d'importer les éléments suivants:
#import <Foundation/Foundation.h>
#import <AVFoundation/AVFoundation.h>
#import <MediaPlayer/MediaPlayer.h>
#import <CoreMedia/CoreMedia.h>
#import <AVFoundation/AVAsset.h>
Vous devez vous connecter pour publier un commentaire.
Après avoir joué avec les différentes façons d'initialiser les objets je suis arrivé à une solution de travail:
Il semble que la valeur de durée n'est pas toujours immédiatement disponibles à partir d'un AVPlayerItem mais il semble bien fonctionner avec un AVAsset immédiatement.
Dans iOS 7, pour AVPlayerItem déjà créé, vous pouvez également obtenir la durée de la sous-jacente de l'actif:
Au lieu de l'obtenir directement auprès de AVPlayerItem, qui vous donne un NaN:
Recommandé de le faire, comme décrit dans le manuel est en observant le joueur statut du poste:
Puis, à l'intérieur
observeValueForKeyPath:ofObject:change:context
:Aussi, assurez-vous que vous retirez de l'observateur lorsque vous modifiez le joueur élément:
Btw, vous pouvez également observer les
duration
directement la propriété; toutefois, il a été mon expérience personnelle, que les résultats ne sont pas aussi fiables qu'elles devraient l'être 😉Swift version
Vous pouvez obtenir la durée à l'aide
AVAsset
qui estAVPlayerItem
propriété:ou par la création de
AVAsset
à partir du zéro: