IOS HTTP Living Strem详解一

来源:互联网 发布:大数据用到的java 编辑:程序博客网 时间:2024/06/06 01:52

HTTP-Live-Streaming-Architecture

(原文地址)

https://developer.apple.com/library/ios/#documentation/networkinginternet/conceptual/streamingmediaguide/Introduction/Introduction.html 

一般来说,HTTP Live Stream 是由三部分组成的:服务组件部分,视频分布存储组件部分,客户端软件部分。

服务组件部分(Server):这个一般是用来进行视频数据的录入以及编码过程,把他们按照一个统一的数据格式进行编码用来传递以及为视频存储组件部分做准备。

视频存储分布组件部分(Distribution:这个部分一般是有一个标准的web服务器构成的,他们用来相应客户端的请求以及传递已经处理好的相应请求多媒体信息。对大规模的分布,edge网络或其他内容分发网络也可以使用。

客户端软件部分(Client客户端软件负责确定适当的媒体来请求,下载这些资源,然后重新组装它们,这样的媒体可以呈现给用户一个连续的流。客户端软件包含在iOS 3.0和以后和电脑安装了Safari 4.0或更高。

在一个典型的配置、硬件编码器需要音像输入,将其作为h .264视频和AAC音频,并将这些内容作为MPEG-2数据流传输,然后由软件流分段程序分解成一系列简短的媒体文件这些文件放置在web服务器。这个分段程序还创建并维护索引文件包含一个媒体文件的列表。索引文件的URL用来发布到web服务器上。客户端软件读取索引,请求媒体文件,并将其显示出来,并且用户感觉不到任何的停顿或段之间的差距。

如下是一个大致的架构图

其中输入源可以非为直播输入源或者已经准备好的输入源。通常我们需要把他们数字化编码为MPEG-4(H.264视频,AAC音频)然后再包装成MPEG-2的格式通过商用软件进行传递。MPEG-2的编码流然后会被切割成许多个小的片段(.ts文件)保存起来,这个过程我们通常是使用苹果的Stream Segmenter小工具来完成的.

其中需要注意的就是,当如果仅仅是音频流的话只支持AAC类型的并且是ADTS打头的文件,或者是MP3文件。

苹果的这个分段程序Stream Segmenter还创建一个索引文件。索引的文件中包含了一系列媒体文件。索引文件还包含元数据。索引文件是一个".M3U8"播放列表。索引文件的URL是由客户机访问,然后请求索引文件在序列。

服务组件部分(Server

这个部分需要一个媒体编码器,可以采用商用软件.然后再把编码之后的文件进行一个切割保存。其中切割保存的这个部分可以采用苹果的软件media Stream Segmenter来完成。

媒体编码器

媒体编码器通过一个外置设备(摄像机等)来获取一个数据信号,然后再进行一个编码,封装和传递。其中编码应该按照H.264的视频格式,HE-AAC的音频格式。目前传递的数据编码格式只能是MPEG-2的视频或者是MPEG的音频。

然后通过网络把MPEG-2编码格式的数据流进行一个网络传输,并利用Stream Segmenter来进行文件的切割。

文件流切割器(Stream Segmenter

文件切割器一般是从网络中读取已经编码好的流文件,然后把他们根据一个时间间隔切割成许多个很小的单元文件。虽然每段是在一个单独的文件中,但是这些视频文件是可以无缝地重建。

这个分段程序还创建一个索引文件包含单个媒体文件的引用。每次分段程序完成了一个新的媒体文件,索引文件被更新。索引用于跟踪和确定媒体文件可用性和位置。这个分段程序也可以对每个媒体加密并且创建密钥文件。

媒体将会以".ts"形式保存起来(MPEG-2的可传递的流文件)。索引文件保存将会以".M3U8"播放列表形式保存起来

文件切割器(File Segmenter)

如果你已经有了编码好的文件,那么你只需要使用文件切割器把这个文件包装成MPEG的流,然后再把他们按照一定的时间长度进行一个切割。这个文件切割器跟文件流切割器的区别就是,文件切割器一般会选取已经存在的文件进行一个切割。

多媒体切割文件组(Media Segment Files)

切割之后的多媒体片文件组一般是由文件流切割器产生的,一般是通过一个数字化编码器中录入的,通常是有多个".ts"的片文件组成,并且是通过MPEG-2的传输流(H.264的视频和AAC的音频)来进行传递.通常对于音频文件的传递,这个切割器能够产生MPEG的格式.要么是AAC的音频格式并且包含ADTS,或者直接就是MP3的文件。

索引文件(播放列表文件)

索引文件通常是由数据流切割器或者文件切割器产生的。通常是以".M3U8"的文件形式保存起来的。对于是MP3的文件一般会以".m3u"的形式保存起来。

由于外置系统一般都是支持mp3的音频文件的。所以客户端软件也可以播放兼容典型的MP3通过互联网流媒体电台。

 如下是一个很简单的索引文件,我们采用的是".M3U8"的播放列表格式。我们采用文件流切割器按照10S种一个间隔把一个文件切割成了三个未加密的小文件组

#EXTM3U

#EXT-X-TARGETDURATION:10

#EXT-X-MEDIA-SEQUENCE:1

#EXTINF:10,

http://media.example.com/segment0.ts

#EXTINF:10,

http://media.example.com/segment1.ts

#EXTINF:10,

http://media.example.com/segment2.ts

#EXT-X-ENDLIST

注意一下,你同时也可以采用苹果公司提供的文件切割器进行对于MPEG-4编码的视频文件进行切割或者对AAC或者是MP3的音频文件进行切割。

索引文件还可能包含加密密钥文件的url和备用索引文件针对不同的带宽,为了获取更多详细的信息,你可以参考 HTTP Live Streaming specification. 

通常索引播放文件都是自动产生的,但是这并不代表你不能手动创建或者修改。特殊的情况下,我们是可以手动创建一个".M3U8"类型的文件,然后通过编辑器对这个文件进行一个修改。只要你编译后的文件时适合发布的标准的都是ok的。对于音频的文件,我们开业创建一个".M3U8"类型的文件,然后添加一些MP3格式的文件。

视频存储分布组件部分(Distribution)

这个存储分布系统是有一个web服务器或者一个web的缓存系统通过HTTP协议来进行索引文件和切割的小文件传递。这个服务器并不一定需要做什么复杂的配置,通常只需要做一些典型的配置就ok了。

通常在配置的时候我们需要做如下的内容限制。

File extension

MIME type

.M3U8

application/x-mpegURL or vnd.apple.mpegURL

.ts

video/MP2T

索引文件一般是以".M3U8"文件形式保存,切割的单个小文件是要以".ts"的文件存储

需要注意的就是对于直播类型的".M3U8"文件是在随着时间不停的变化的,应为直播的内容是不固定的,所以这个文件就在不停的进行重写。因此我们就需要考虑到一个缓存的问题,添加一个版本的信息,确保每次客户端进行读取的时候都是最新的文件。

客户端软件部分(Client)

客户端一般是通过请求索引播放列表文件来获取具体的文件播放地址,然后获取相对应的文件流进行数据的播放。在获取的时候一般是采用按照一定序列的方式进行下载播放。当有足够多的流可以进行播放的时候,客户端就可以开始播放组装好的流。

同样,客户端也是需要获取,或者提供用户认证的界面,从而进行解密,达到视频播放的效果。

通常当客户端读取的索引文件如果遇到“ #EXT-X-ENDLIST ”标志的时候就会终止,但是如果没有“ #EXT-X-ENDLIST ”这个标志,那么一般可以理解为是在线直播。在直播期间,客户端会随着时间进行一个索引文件的更行。客户端呢然后就寻找更新好的信息,然后再添加到播放队列中去。

Below are the video and audio file formats and codecs that QuickTime Player can playback in Mac OS X v10.6.x or OS X Lion:

Media type

File formats

Codecs or components

Video

§ QuickTime Movie (.mov)

§ MPEG-4 (.mp4, .m4v)

§ MPEG-2 (OS X Lion only)

§ MPEG-1

§ 3GPP

§ 3GPP2

§ AVI

§ DV

§ MPEG-2 (OS X Lion only)

§ MPEG-4 (Part 2)

§ H.264

§ H.263

§ H.261

§ Apple ProRes

§ Apple Pixlet

§ Animation

§ Cinepak

§ Component Video

§ DV

§ DVC Pro 50

§ Graphics

§ Motion JPEG (Mac OS X v10.6.x only)

§ Photo JPEG

§ Sorenson Video 2

§ Sorenson Video 3

Audio

§ iTunes Audio (.m4a, .m4b, .m4p)

§ MP3

§ Core Audio (.caf)

§ AIFF

§ AU

§ SD2

§ WAV

§ SND

§ AMR  

§ AAC (MPEG-4 Audio)

§ HE-AAC

§ Apple Lossless

§ MP3

§ AMR Narrowband

§ MS ADPCM

§ QDesign Music 2

§ Qualcomm PureVoice (QCELP)

§ IMA 4:1

§ MACE 3:1 (Mac OS X v10.6.x only)

§ MACE 6:1 (Mac OS X v10.6.x only)

§ ALaw 2:1

§ ULaw 2:1

§ 24-Bit Integer

§ 32-Bit Integer

§ 32-Bit Floating Point

§ 64-Bit Floating Point

 

Additional Information

You can also extend QuickTime to import or play other popular and specialized media formats using codec components. This article lists common Apple and third-party codec components and the filename extensions they support.