FFmpeg程序员

音视频学习之HLS

2017-03-17  本文已影响539人  小黑_Coder

由于工作项目中需要,花了一点时间来研究了一下HTTP Live Streaming简称HLS先来一段官方的介绍。

Send live and on‐demand audio and video to iPhone, iPad, Mac, Apple TV, and PC with HTTP Live Streaming (HLS) technology from Apple. Using the same protocol that powers the web, HLS lets you deploy content using ordinary web servers and content delivery networks. HLS is designed for reliability and dynamically adapts to network conditions by optimizing playback for the available speed of wired and wireless connections.

英语极差脸皮极厚的人看完后理解如下

使用AppleHLS技术,我们可以发送直播和点播的音视频到iPhoneiPadMacApple TV以及PC(只要遵守HLS都可以)。使用常用于WebHTTP协议,HLS可以让你通过普通的Web服务器以及内容分发网络来部署内容。通过优化,充分利用有线和无线连接的速度来进行playbackHLS是一种可靠的,可以动态适配不同网络条件的协议。

HLS协议简介

协议编码格式要求

协议优势

协议缺点

协议工作流程

transport_stream_2x.png
inputoutput来解释一下这张图,首先我们要将摄像头采集的视频流上传到server上,但是我们不用关心采集的视频是什么格式,也不用在乎用什么协议将视频上传到服务器。因为官方文档是这样说的You Can Send Live Streams or Video on Demand, with Optional Encryption You Can Send Audio and Video Without Special Server Software。当视频流被推到server上之后Media encoder模块将会把原数据转码成H264格式的数据,这个时候stream segmenter模块将会对H264数据进行切片成若干个ts文件,并且生成对用的一个m3u8索引文件记录ts文件,当然在m3u8文件内部依然可以包含子m3 u8索引。最后Distribution只是一个普通的业务服务器,通过HTTP请求下发m3u8文件,客户端通过解析m3u8获取里面的ts索引即可播放HLS视频流。

IndexFile(Playlists)介绍

图片来自官方文档
说是IndexFile其实就是m3u8文件的逻辑架构。先看一下官方解释

In a typical configuration, a hardware encoder takes audio-video input, encodes it as H.264 video and AAC audio, and outputs it in an MPEG-2 Transport Stream, which is then broken into a series of short media files by a software stream segmenter. These files are placed on a web server. The segmenter also creates and maintains an index file containing a list of the media files. The URL of the index file is published on the web server. Client software reads the index, then requests the listed media files in order and displays them without any pauses or gaps between segments.

上面这幅图虽然是对IndexFile逻辑架构作出了一个简单的展示,其实也是对播放器的播放逻辑作出了一定的说明。客户端播放HLS视频流首先下载一级IndexFile,它里面记录了二级索引文件Alternate-AAlternate-BAlternate-C的地址,然后客户端再去下载二级索引文件,二级索引文件中又记录了ts文件的下载地址,这样客户端就可以按顺序下载ts视频文件并连续播放即可。

m3u8文本介绍

从官网上找了一个m3u8文本事例,在这里简单的介绍一下

#EXT-X-VERSION:3
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD

# Old-style integer duration; avoid for newer clients.

#EXTINF:10,
http://media.example.com/segment0.ts
# New-style floating-point duration; use for modern clients.
#EXTINF:10.0,
http://media.example.com/segment1.ts
#EXTINF:9.5,
http://media.example.com/segment2.ts
#ZEN-TOTAL-DURATION: 29.5
#EXT-X-ENDLIST

上面记得参数解释一下

有时候我们可能还会遇到BANDWIDTH参数,表示随后这个ts绑定的比特率

欢迎讨论

Email huliuworld@yahoo.com

上一篇下一篇

猜你喜欢

热点阅读