2017-02-15 2 views
2

Étant donné un manifeste HLS avec de multiples variantes/renditions:Comment obtenir toutes les variantes HLS dans un manifeste maître à partir d'un AVAsset ou AVPlayerItem?

#EXTM3U 
#EXT-X-VERSION:3 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1612430,CODECS="avc1.4d0020,mp4a.40.5",RESOLUTION=640x360 
a.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=3541136,CODECS="avc1.4d0020,mp4a.40.5",RESOLUTION=960x540 
b.m3u8 
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=5086455,CODECS="avc1.640029,mp4a.40.5",RESOLUTION=1280x720 
c.m3u8 

Est-il possible d'obtenir un tableau des trois variantes (avec les attributs tels que la bande passante et la résolution) soit de la AVAsset ou AVPlayerItem?

Je peux obtenir le fichier AVPlayerItemTrack en cours de lecture en utilisant KVO sur l'AVPlayerItem, mais encore une fois, seule la piste en cours de lecture n'est pas la liste complète des variantes. Je souhaite savoir si l'élément est lu avec la qualité la plus élevée possible, afin que je puisse décider si l'utilisateur a suffisamment de bande passante pour démarrer un flux vidéo secondaire simultané.

+0

Avez-vous vérifié la propriété 'AVAsset.trackGroups'? De la documentation, il semble que cela puisse correspondre. –

+0

@DaveWeston Yup, J'ai essayé de vérifier les pistes et les trackGroups, mais ils reviennent toujours en tant que tableau vide, même en utilisant 'loadValuesAsynchronously': / –

Répondre

0

Pour connaître la variante en cours de lecture, vous pouvez conserver un KVO sur AVPlayerItemNewAccessLogEntryNotification et en consultant AVPlayerItemAcessLogEvent dans le journal d'accès, vous pouvez indiquer le débit actuel et tout changement de débit.

AVPlayerItemAccessLog *accessLog = [((AVPlayerItem *)notif.object) accessLog]; 
AVPlayerItemAccessLogEvent *lastEvent = accessLog.events.lastObject; 
if(lastEvent.indicatedBitrate != self.previousBitrate) 
{ 
    self.bitrate = lastEvent.indicatedBitrate 
} 

En ce qui connaître la liste complète des bitrates disponibles, vous pouvez simplement faire une requête GET pour la liste de lecture maître m3u8 et l'analyser. Vous aurez seulement besoin de le faire une fois donc pas beaucoup d'un overhead.