用HTTP协议传输媒体文件 学习

用HTTP协议传输媒体文件 学习

用HTTP协议传输媒体文件能够分两个阶段,第一个阶段是Progressive Download(渐进式下载方式)阶段,第二个阶段是HTTP streaming(HTTP流化)阶段。其中,第一个阶段能够当作第二个阶段的前身。html

  • Progressive Download

  渐进式下载是一种顺序流式传输,它是一种简单的从HTTP WEB服务器进行文件下载的方式,其中“渐进”指的是用户能够一边下载一边播放,而不需将整个媒体文件下载完毕再播放。在渐进式下载中,客户端用户发送HTTP请求流媒体文件,服务器收到请求以后经过HTTP响应发送媒体文件给客户端用户。客户端与服务器交互过程如图:算法

 

从严格意义上讲,这种下载方式不是真正的流式传输,因此它也称为“伪流媒体”,主要缘由是它与普通文件下载方式没有本质的区别,不支持实时的流媒体传输,当用户中止播放它仍然继续下载,直到整个媒体文件下载完毕或者播放界面被关闭,下载的媒体文件会被保存在客户端的磁盘上。服务器

  • HTTP streaming

  HTTP流化技术的主要思想是在服务器端将多码率的媒体文件分割成一个个小的媒体切片,客户端经过HTTP请求一个个小的媒体切片,服务器收到请求经过HTTP响应发送媒体切片。服务器和客户端交互的过程当中,能够由客户端或服务器实时检测网络带宽状况,随时能够切换媒体切片的质量级别(不一样码率对应不一样质量级别)。保证播放的连续性和流畅性,提高用户体验网络

采用HTTP协议做为流媒体传输的协议栈,主要分红网络层、传输层和应用层。ide

在HTTP流化方式中,一个媒体文件有多种码率的版本(能够砸服务器端动态产生也能够静态存储),其中高码率对应较高质量级别,反之亦然。服务器实现媒体文件的切片、容器格式封装等等以后,在服务器和客户端交互的过程当中,根据宽带资源的变化,动态的在不一样质量级别的媒体文件切片之间切换,这种切换的发起者能够是服务器或者客户端,即有服务器控制的自适应策略和客户端控制的自适应策略。post

  • 网络部署

  HTTP流化技术在网络部署中不须要假设专有的流媒体服务器,使用标准的HTTP WEB服务器便可,便于大规模部署,并且,由于采用HTTP协议,HTTP流化能很好的支持防火墙的穿越与NAT的转换。学习

  • 流媒体编码格式

  数字化的音频和视频信息携带着大量的数据量,而数据量又是网络传输的敏感因素,所以,在进行网络传输以前,须要对音频和视频进行必要的压缩编码,下降网络传输的压力,目前主流的基于HTTP流化的流媒体技术中,通常采用H.264+AAC的视频和音频编码组合。编码

H.264的编码分为两层,视频编码层VCL(video coding layer)和网络提取层NAL(network abstraction layer).视频编码层负责对视频数据的编解码,包括运动估计、熵编码等内容;网络提取层负责将编码后的数据进行封装,方便视频数据在异构网络上传输。网络提取层的引入,使得H.264视频编码格式的媒体文件具备较强的网络适应性,能容易地在不一样网络上传输。url

  • 流媒体文件的容器格式

  咱们通常说流媒体文件格式或者其后缀名指的就是文件的容器格式,如MP4格式。对于一种容器格式, 能够包含多种不一样的轨道,每一个轨道能够是压缩编码后的视频、音频或者文本等信息。容器的做用是把压缩编码后的视频和音频数据放在同一个文件的不一样轨道,添加一些信息方便同时回放,而且将数据尽量紧凑的排布。视频

  容器格式通常应包含三个部分:

  Header:标记文件类型,音视频码流等基本属性信息。

  Index:索引表,视频frame对应的offset,size,timestamp等信息。

  Stream:音视频裸数据。

  有些容器格式(如AVI)可能没有索引表,但在须要的时候要根据其余信息找到offset和size等信息,本身创建索引表。

  MP4文件格式是个十分开放的容器,几乎能够用来描述全部的媒体结构。MP4容器中的媒体格式描述与媒体数据时分开的,而且媒体数据的组织也很自由,不必定要按照时间顺序排列。

 图中给出了MP4容器格式的一些主要box,能够看出,MP4容器格式是一种逐级嵌套的容器格式。MP4容器格式由若干个box组成,每一个box有类型和长度,能够填充不一样的信息或者数据。box能够理解为俄数据对象块,有些box中能够包含其余box,这种box称为contained box。标准的box开头的四个字节(32位)为box size,该大小包括box header 和box body整个box的大小。size 后面紧跟的32位为box type,通常是四个字符,如“ftyp"、”moov"等,每一个box都有固定的格式和须要填充的信息。其中ftyp box有且只有一个,不能被其余box包含。该box应该被放在文件的最开始,指示该MP4文件应用的相关信息。moov box一样只有一个,通常状况下,“moov"会紧随"ftyp"出现,通常状况下,moov中会包含1个mvhd和若干个trak。其中mvhd为header box,通常做为moov的第一个子box出现(对于其余container box来讲,header box都应做为首个子box出现),trak必须包含一个tkhd和一个mdiz,此外还有不少可选的box.

在全部的box中,填充信息和数据比较多且比较重要的box为stbl box(sample table box),该box包含了sample全部时间和位置的信息,以及sample的编码信息等,是MP4最复杂的box,能够含有stsd,stts,stsz等下一级box.

stsd(sample description box):该box必不可少,包含了数据类型信息和编码的信息,例如:音视频的编码方式、视频的宽和高、音频的声道。

stts(Time to Sample Box):存储了sample的时长信息,描述了sample时序的映射关系,咱们经过它能够找到任什么时候间的sample.

stsz(sample size box): 包含了每一个sample的大小信息。

以上box都 属于容器格式的索引表部分,在MP4容器格式中,音视频的裸数据在mdat box中存储。

 H.264编码视频流是由一个个NAL(network abstraction Layer)单元组成的,同城一帧视频数据封装在一个或多个NAL单元。

  • 流媒体文件切片

 

  • 流媒体文件切片

  • 容器格式转换

  • 自适应算法的两种模式

 

  • HTTP层自适应算法