写在前面
一直都想写一篇较为全面的介绍流媒体技术的文章,可是出于种种原因,一直迟迟没有动笔。一个原因是目前网上介绍流媒体技术的文章太多了,从各方面说的都有,搜索一下能找出不少专业性很强的资料,所以怀疑再出来写这个的东西的必要性是否还存在。另一个原因是,确实不想再重复的絮叨一些概念性的东西,也不想简单的整理和摘抄,还是想真正深入的从概念到原理仔细的把这个东西介绍一下,这样就需要把握好技术和语言的尺度水准,既要让读者觉得轻松有趣,又要能让人读到有价值的东西,很担心自己能否把握好这点。其实两个原因归结在一起,都是不自信的表现。
不过细想一下,还是应该写点东西,人毕竟不能每天都在忙忙碌碌中度过,还是应该把一些有价值的东西记录下来才好,一方面是对自己工作的整理,另一方面也算是对开放网络世界的一点贡献,都还是有好处的。说了这么几句题外话,还是书归正传吧。
发展历史
流媒体概念和技术最早出现在上世纪90年代后期,目的是为了实现在有限的带宽条件下比较流畅的播放视音频内容。我们知道那时候终端用户的带宽很小,一般家庭还是56Kpbs ~ 256Kbps的拨号网络,大部分企业接入网络也不过2M左右,可能这对现在的大部分年轻人来说有点不可思议,而实际情况就是这样。当时H.264编码技术还没有出现,导致在网络上传输视频更是费劲,说实话,那个时候上网谁要是说要在网上看视频,简直是痴人说梦。可是就是有那么一批高科技先驱者要实现这个梦想,因为他们明确的预测到从文本到图片再到视频是互联网发展的趋势,尽管这个预测有些早,中间死了一大批先驱,可是流媒体技术还是不断的发展起来,一代代的技术更新,一直到今天这个样子。
2000年前后的流媒体技术,基本上由三大厂商把持着,微软、Macromedia和Real,2005年Macromedia被Adobe收购。这三家公司的技术没有绝对的优劣,基本是一个层级,应用目标也相同,应用规模有没有说哪家领先到哪里去,毕竟那时候也没有几个人在网上看视频,无论是国内还是国外,除了上网看A片能忍受不停地缓冲,没有人认为在那种网络条件下看视频是一种享受。在具体的应用上,微软始终是那个样子,叫好不叫座,Adobe凭借Flash播放器占据少许优势,而Real则凭借RM压缩格式有不少用户。没有宽带用户,没有开放的技术规范,没有高性能智能终端,一切都是白搭,这三家大公司就这么不温不火的折腾着,Real在这个过程中首先被拖死了。
有时候转机就是那么快,2005年之后,似乎很短的时间内,我们的带宽变宽了,智能手机普及了,H.254编码标准也很快被大家接受了,互联网视频应用的春天终于来了。带宽越来越宽,手机越来越快,互联网上的视频内容越来越多,youtube、优酷等国内外以视频内容运营为主体的网站如雨后春笋般出现,在网上看视频逐渐从时尚成为习惯。
在这个过程中,流媒体技术也在发生着巨大的变化。微软公司的Windows Media流媒体技术,由于技术封闭和反应迟钝,以及不能跨终端等问题,被淘汰出局,虽然微软又推出了SilverLight和IIS smooth Streaming技术,但也是于事无补,最终无人问津。Adobe公司凭借着Flash播放器的优势,在PC终端上占据着绝大部分的用户市场。而在移动终端,由Apple公司提出的HLS流媒体技术标准成了最大的赢家,由于其技术开放,协议简单,又充分利用了既有的成熟技术标准,开发实现也相对简单,很快就被各方接受,不仅Apple自己的iOS系统全部支持该标准,Android系统也很快将其作为内置支持的流媒体技术协议。所以说现在的流媒体技术,主流两家就是Adobe和Apple,Adobe的Flash技术和Flash播放器是PC端的绝对主力,智能手机和Pad等移动终端上HLS则应用最为广泛。
技术原理
为什么流媒体技术在经历了这么多年的发展之后依然有这么强大的生命力,并且不断保持着快速的更新换代呢?这要从流媒体的技术本质和应用目标说起。
我们知道,流媒体技术(Streaming media)技术是相对于传统下载式播放技术(Downloading)来说的。下载式播放是两种技术生搬硬套的衔接,一个下载技术,一个是播放技术,下载技术的只是负责下载,播放技术的只是负责播放,两者没有任何协作,用户在播放视频时必须先把文件下载下来,然后才能播放,如果文件很大,等待过程是让人心烦意乱的,也根本没有几个人愿意去等。下载式播放对网络带宽和服务器运算资源是一种浪费,无论用户观看视频的哪一部分都需要下载全部文件,这是一个多么无聊的技术。
流媒体技术则很好的解决下载式播放中存在的这些问题,是一种完全不同的播放体验。首先,流媒体技术实现了即点即播,用户在播放视频时不再需要下载整个文件,只要下载很少的数据就可以开始播放,播放到哪就下载哪一部分视频对应的数据,不播放就不下载,在网络上看视频和观看本地视频文件的响应时间几乎没有任何差别。其次用户还可以跳转播放,可以把播放进度拖动到任何播放位置,进度条拖动到哪里就从哪来开始播放,也几乎不用等待,即点即播。不仅播放体验彻底改观,对服务器和带宽的消耗也大大减少,使得服务器和网络可以服务更多的用户,大大提高并发响应能力。
流媒体技术之所以能够实现即点即播、按需下载,其技术的本质是服务器和播放器之间的默契配合。在精心设计的协议标准的约束指导下,服务器和播放器之间不仅传递视频数据,还传递播放控制指令,如播放(play)、暂停(pause)、停止(stop)、跳转(seek)等指令,这样播放器就可以根据用户的播放请求象服务器发送播放控制指令,服务器收到这些指令后按照播放器的需要发送合适的数据下来。在流媒体技术体系下,这种传递视音频数据和控制指令的协议被称为流媒体协议,服务器被称为流媒体服务器,播放器被称为流媒体播放器。
目前,广泛使用的流媒体协议有Adobe的RTMP协议,Apple的HLS协议,和Real公司参与起草的RTSP协议。RTSP协议在监控领域用的非常广泛,但在互联网视频应用领域很少有人使用。还有一种协议,就是微软的MMS协议,虽然也曾红极一时,但现在极少有人使用了。
在这里重点说下HTTP协议,我们都觉得HTTP协议是传输网页和图片的协议,实际上它才是目前最为广泛的流媒体传输协议!由于HTTP协议的成熟、简单和能穿越防火墙等特点,越来越多公司开始在HTTP协议上开发音视频传输和播放技术,HLS、HTML5 Video、HTTP Pseudo-Streaming都是使用HTTP作为数据发送协议的,当前互联网上绝大部分视频都是通过HTTP协议传输的。后续的我将会对这几种协议的技术原理和实现细节进行进一步的说明。