2017-08-22 1 views
0

J'essaie de lire un flux audio HLS en utilisant AVPlayer. Tout fonctionne bien, mais quand je cherche le joueur, le temps actuel du joueur va à une mauvaise position. Si je veux chercher à 38s, après l'exécution de la fonction de recherche, mon currentTime imprimé dans le gestionnaire d'achèvement de recherche me donne 10s, par exemple La plupart du temps, le joueur commence à partir d'une position différente après la recherche.AVPlayer recherche une mauvaise position dans un flux audio HLS

Voici le code que je utilise:

let cmTime = CMTime(seconds: validTime, preferredTimescale: CMTimeScale(NSEC_PER_SEC)) 
self.player.seek(to: cmTime, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero, completionHandler: { (finished) in 
    self.player.currentTime().seconds 
}) 

j'ai vu que AVFoundation ne fonctionne pas correctement avec les fichiers VBR, mais tous mes fichiers sont CBR. Ils ont tous un débit constant de 128kb/s. J'ai segmenté mon fichier .mp3 en fichiers .ts pour les lire en streaming.

Je voudrais savoir si quelqu'un a une solution à ce problème ou une solution de contournement qui pourrait m'aider avec ce problème.

Merci, les gars!

Répondre

0

Je sais que cela a été demandé il y a longtemps, mais pouvez-vous me montrer votre fichier m3u8 ?, HLS utiliser des fragments pour chaque fichier, alors disons que chaque fragment est 5s long, ce qui va se passer est quand vous cherchez, le jeu va essayer de coller au début de l'un des fragments, en cherchant à 28 va chercher à 25 ou 30.

Pourtant, il y a une solution, vous pouvez initialiser votre AVURLAsset en utilisant une option comme ceci:

let options = [AVURLAssetPreferPreciseDurationAndTimingKey : true] 
let asset = AVURLAsset.init(url: urlStr, options:options) 
... 
// Init playerItem and a player 

Mais, les temps de chargement devrait être plus.

+0

Merci pour votre réponse! Je ne savais pas sur cette option, peut-être que je peux le tester. J'ai essayé beaucoup de choses pour avoir une plus grande précision et ça marche bien jusqu'à présent ... Merci encore pour cette réponse et de façon différente, je vais la tester plus tard! –