给定一个包含多个变体/再现的 HLS list :
#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
是否可以从 AVAsset 或 AVPlayerItem 中获取三个变体的数组(具有带宽和分辨率等属性)?
我可以通过在 AVPlayerItem 上使用 KVO 来获取当前正在播放的 AVPlayerItemTrack,但同样,它只是正在播放的轨道,而不是完整的变体列表。
我很想知道 Assets 是否以尽可能高的质量播放,这样我就可以决定用户是否有足够的带宽来启动同步辅助视频流。
最佳答案
要了解您当前正在播放的变体,您可以在 AVPlayerItemNewAccessLogEntryNotification 上保留一个 KVO,并通过查看访问日志中的 AVPlayerItemAcessLogEvent,您可以了解当前比特率和比特率的任何变化。
AVPlayerItemAccessLog *accessLog = [((AVPlayerItem *)notif.object) accessLog];
AVPlayerItemAccessLogEvent *lastEvent = accessLog.events.lastObject;
if( lastEvent.indicatedBitrate != self.previousBitrate )
{
self.bitrate = lastEvent.indicatedBitrate
}
就了解可用比特率的整个列表而言,您可以简单地为主 m3u8 播放列表发出 GET 请求并解析它。您只需要执行一次,因此开销不大。
关于ios - 如何从 AVAsset 或 AVPlayerItem 获取主 list 中的所有 HLS 变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42255041/