在当前互联网环境中,带宽一直都是一个紧缺资源,随之而来的问题就是,在网络上播放视频的时候,很难作到既流畅又清晰。各大主流视频网站都会在流畅和清晰之间作一个取舍,可是更多的状况下会考虑流畅播放多一些,清晰度做为次重要的指标。html
从不少方面来说,HTTP动态流技术(简称HDS)是Adobe公司对苹果公司的Adaptive Bitrate Streaming技术以及微软公司的IIS Smooth Streaming技术的一个回应。这三项技术的共同之处在于它们经过HTTP网络链接传递媒体文件以及适应于用户当前带宽的媒体文件传输的能力。相对于连入以太网的我的电脑而言,Android设备的有效带宽就显得尤其不足了。(这项技术的)最终结果是,在各类设备上实现媒体文件的流畅回放,无论这些设备是智能手机仍是台式计算机。浏览器
要更好地了解HDS是如何工做的,撇开技术上的内容,只考虑下述的虚拟场景:服务器
ABC Video Services刚刚完成了一个一分钟短片的制做,它的老板Pete灵机一动,并无使用录像带来承载其录音内容。Pete说:“咱们何不放弃录像带,而是经过一种更为有效的方式把视频传输给用户呢?”网络
工做室的人对这个激进的想法都感到有些惊讶,由于每一个人都知道,“这是咱们一直在使用的方法。”Pete并无接受这个论据,而是给出了下面一个假设:ide
“为何不把录像内容切成十个六秒钟的小片断,而后顺序的把它们传输到设备中去播放?”工具
有点保守主义的Sam以为这真是一个愚蠢的想法,可是Pete是他的老板,所以他并不想这么去说。他考虑了一会,想到了一个他认为能够把这个想法从根本上扼杀掉的反驳想法。他说:“Pete,这听起来颇有趣,但不合实际啊。(若是按照你的想法,)客户将会拿到一堆看起来同样的录音条。咱们如何能确保客户不会弄乱这些录音条的顺序?”网站
“这很简单”,Pete说,“咱们能够给客户一个告诉他们应该在什么时间播放哪个录音条的文件。咱们所要作的就是把这个文件和录音条打包到一块儿传输给客户。客户所须要作的就是打开并阅读说明文件,而后一切都按计划进行了。”ui
这并非HDS的产生过程,但它捕获了这项技术的本质。插件
HDS和Pete的想法又有什么关联呢?HDS可能就是由你伴随Flash Media Server (FMS)一同安装的Apache模块而来的。在这种状况下,FMS扮演着打包机的角色,制造内容片段,由Apache经过HTTP传输到Flash兼容的视频播放器。为了解决Sam所提出的反对意见,与F4M扩展一块儿,另外的一个清单文件也是经过一样的一个过程建立出来的。从根本上说,所需视频文件首先使用F4F扩展软件切割成若干片断,做为片断文件。清单文件中包含了视频的一些基本信息,包括每个片断文件的位置以及其中最为重要的信息——这些片断传输到用户设备上的顺序。3d
若是这一切都是经过HTTP链接流动的,那么FMS 4.5是如何归入这个过程的呢?Flash Media Server 4.5包含了两种类型的实时组件:live和Just-In-Time (JIT)。无论在哪一种状况下,清单文件和F4F文件都能按照需求建立,并经过HTTP传输给客户来实现回放。例如,若是Sam有一部智能手机,想观看他刚编辑过的视频,他要作的就是打开他的手机上的浏览器,连接到包含这段视频的SWF文件的网页。SWF文件打开时,只须要F4M清单文件来启动视频片断有序的向设备浏览器的传输。
做为一个反对者,Sam立刻就看到了这个方案存在的问题。“朋友们,我用的是3G网络,网速很慢;我没有大家所使用的以太网链接的带宽。这将会是一个很糟糕的体验。”
幸运的是,还有Pete。Pete说:“Sam,别激动。这不是问题。这个清单文件会把播放列表附在SWF文件上,它能够检测你的链接情况,若是你的带宽较低,在清单文件中查找该带宽下的最佳视频文件。咱们称这个为‘多比特率流媒体’,你会喜欢上它的。”
既然这样说了,是时候让Sam喜欢上它了。
HDS技术本质上有以下两点:
1. 经过将大的视频文件分片传输到客户端,供用户观看;
2. 将同一个视频文件转换为不一样的比特率(Multi Bitrates),以适应客户端的不一样带宽。
第一点主要目的是保证视频可以更流畅播放。第二点更增强大,能够根据不一样客户的网络带宽状况自动选择不一样清晰度(视频的比特率决定其清晰度)的视频进行播放,这样能够为不一样网络环境中的用户提供尽可能好的体验效果。
安装完FMS4.5以后,FMS自带了一个HDS演示样例,在浏览器中访问FMS发布的URL,若是是本地安装的话,地址为:http://localhost。
将会出现下面的页面:
点击右侧的HDS Multiple Bitrate按钮就能够体验不一样网速状况下,播放不一样比特率视频的样例了:
在视频左上角能够查看实时的帧率:
在视频左下角能够查看实时的缓冲区大小和比特率大小:
经过查看首页index.html的源码,能够看到这个播放多比特率的按钮实际上播放的/vod/hds_sample1_manifest.f4m文件。前面有提到说f4m文件是视频播放的清单文件,F4M扩展插件会告知FMS你须要这个媒体流的清单文件。
查看vod/hds_sample1_manifest.f4m文件内容以下:
这里用到的语法很简单,<media>标签只是包含了须要装载的文件的文件名以及决定装载哪个视频文件的比特速率。
而后在vod目录下保存这些不一样比特率(转码可用ffmpeg工具)的文件:
客户端须要有一个可以解析这个f4m文件的播放器,FMS自带了一个播放器swfs/StrobeMediaPlayback.swf,在HTML中嵌入这个播放器并加上以前的f4m文件路径,就能够实现这个功能。
在服务器端,仍然像前述的那样,对同一个视频转换成不一样比特率,而后编写f4m文件,并保存到vod目录下,文件格式能够从样例中参考修改。
另外,还有一种图形界面方式来配置这个文件,打开Flash Media Server 4.5\tools\f4mconfig\configurator下面的f4mconfig.html:
FMS还提供了一个播放器样例页面,打开Flash Media Server 4.五、videoPlayer、videoplayer.html:
在STREAM URL处输入f4m文件路径,一样能够播放多比特率的视频。
将这个页面最下面的代码拷贝到HTML文件中,而且修改其中的src段的视频地址(此处既能够是多比特率的f4m文件地址,又能够是单比特率的普通视频文件地址):
而后,就可使用这个播放器播放视频了:
1. http://www.adobe.com/cn/devnet/flashmediaserver/articles/beginning-fms45-pt01.html;
2. http://www.adobe.com/cn/devnet/flashmediaserver/articles/beginning-fms45-pt02.html;
3. http://www.adobe.com/cn/devnet/flashmediaserver/articles/beginning-fms45-pt05.html;
4. http://www.adobe.com/cn/devnet/flashmediaserver/articles/beginning-fms45-pt06.html;
6. http://www.adobe.com/cn/devnet/flash/articles/reops_pt3.html;
7. http://www.adobe.com/cn/devnet/flash/articles/reops_pt2.html;