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性能
- 在其他video正在播放时录制video
- 如何在xcode for mac中为AVPlayer制作音量滑块
- 'NSInvalidArgumentException',原因:' – :无法识别的select器发送
- AudioHardware.cpp:1200:AudioObjectRemovePropertyListener:AudioObjectRemovePropertyListener:没有给定ID 0的对象
- 如何在AVFoundation中循环播放video,而不会有不必要的暂停?
- AVPlayer在线模式下停止播放AESencryption离线HLSvideo
- iOS中的AVPlayerViewController播放/暂停问题
- 使用AVPlayer播放的video在iPhone 6S Plus的顶部和两侧都有灰线
- 如何检测AVPlayer竟然开始快速播放