HLS和AVPlayer的基本概念

在本文中,我想探讨什么是HLS,AVFoundation家族以及如何使用HLS URL构建简单的本机iOS播放器。

什么是HLS

HLS代表HTTP实时流。 它是一种媒体流协议,用于通过Internet传递音频和视频媒体。 使用此协议带来了更快的Internet流传输的主要区别在于,它的想法是将单个视频切成小块,而不是下载整个媒体文件。 您甚至可以根据带宽等因素使用多种质量,因为这些块已编码并且可以在播放列表中的不同质量设置中使用。

第一次看起来有点复杂,但是它只是遵循HLS协议的几个标签,玩家可以调整并使用所有这些提供的数据来提供最佳的流传输质量:

  #EXTM3U 
  #EXT-X-MEDIA:TYPE = AUDIO,GROUP-ID =“ stereo”,LANGUAGE =“ zh-CN”,NAME =“ English”,DEFAULT = YES,AUTOSELECT = YES,URI =“ audio / stereo / en / 128kbit。 m3u8“ 
#EXT-X-MEDIA:TYPE = AUDIO,GROUP-ID =“ stereo”,LANGUAGE =“ dubbing”,NAME =“ Dubbing”,DEFAULT = NO,AUTOSELECT = YES,URI =“ audio / stereo / none / 128kbit。 m3u8“
  #EXT-X-MEDIA:TYPE = AUDIO,GROUP-ID =“ surround”,LANGUAGE =“ zh-CN”,NAME =“ English”,DEFAULT = YES,AUTOSELECT = YES,URI =“ audio / surround / en / 320kbit。 m3u8“ 
  #EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subs”,NAME =“ Deutsch”,DEFAULT = NO,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ de”,URI =“ subtitles_de.m3u8” 
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subs”,NAME =“ English”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ en”,URI =“ subtitles_en.m3u8”
  #EXT-X-STREAM-INF:PROGRAM-ID = 1,BANDWIDTH = 258157,CODECS =“ avc1.4d400d,mp4a.40.2”,AUDIO =“ stereo”,RESOLUTION = 422x180,SUBTITLES =“ subs” 
视频/250kbit.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID = 1,BANDWIDTH = 520929,CODECS =“ avc1.4d4015,mp4a.40.2”,AUDIO =“ stereo”,RESOLUTION = 638x272,SUBTITLES =“ subs”
video / 500kbit.m3u8

关于播放列表有很多要了解的地方,但是请记住,通过提供所有可能的信息,这将提高AVPlayer的质量。

我建议您也保持此链接,在这里您可以查看每个标签的含义以及根据HLS协议版本应如何使用它。

什么是AVFoundation

AVFoundation是苹果公司的基础Objective-C框架,它基于C框架CoreAudio,CoreMedia和CoreAnimation。 如您在图像中看到的。

AVFoundation提供了用于读写媒体的机制,它有助于将独立的剪辑组合成新资产,并且为我们的iOS和MacOS应用程序提供了用于回放和编辑音频和视频的界面。

什么是AVPlayer

AVPlayer是iOS系列的AVFoundation框架的一部分。 并且它提供了控制媒体资产的回放和定时的界面。

在存在诸如QTKit之类的某些框架之前,AVFoundation并不是苹果公司第一个使MacOS和iOS上的开发人员能够更轻松地使用媒体的解决方案。

如何使用AVPlayer播放视频

在AVPlayer中播放媒体的方式有很多种,您可以从AVPlayerItem开始,也可以将URL直接提供给AVPlayer。 在此示例中,我将使代码尽可能简单,以说明如何在ViewController中进行构建。

在此图像中,我们可以看到HLS播放会话的时间线,在该时间线上我们开始以2 Mb的比特率下载主播放列表,在检查点 5之后 ,比特率变为1 Mb,直到进入停止状态,然后恢复为1 Mb比特率,只有在具有足够的缓冲区时才再次播放。

在下一篇文章中,我打算讨论AVKit,并展示如何为AVPlayer设计新的媒体控件。

WWDC讨论观看我们在这里谈论的内容

  • 探索AV基础
  • 在AV Foundation中使用媒体
  • 测量和优化HLS性能