浅说视频播放背后的故事
说到热门视频业务,它可是QB的主要业务之一。但你知道播放一个视频,它背后的故事吗。可能大家觉得故事情节极其简单,就是点击一下网页的视频区域,然后会弹出一个框框,它叫播放器,能播放我们想看的视频,没了。起初我也是这么认为的,但是如果仔细从根源去分析,播放器就不是一个简单没有故事的框框。下面以我个人有限的水平为大家讲讲播放器背后的故事。
这故事主要分为5个部分,依次是web的工作原理、流媒体、视频实质、HLS、播放器的架构。让大家对播放视频的前提有个大致的了解。
其中会涉及到服务器和网络传输协议,提到的一些术语未做解释,大家有个大概了解就行,若有兴趣的可以自行查阅相关资料。HLS是苹果推出的,可以做细致的了解。
一、web的工作原理
大家都知道在浏览器中看到的一切都是网页,浏览器本质是显示web服务器或者文件系统的HTML文件(标准通用标记语言的一个应用)内容,并让用户与这些文件交互的程序。现在我们简单地了解一下打开一个网页背后的故事。
先说说网页。网页是由文字、图片、动画、音乐、视频、程序等元素构成的包含HTML标签的纯文本文件,存放在服务器上,经由网址( URL )来识别与存取。当我们通过网址打开网页时,会发生以下几个事件如下图1。
图1
(1)浏览器分析页面的URL
(2)浏览器向DNS请求解析该网址的IP地址
(3)域名系统DNS解析出IP地址
(4)浏览器根据IP地址与服务器建立TCP连接
(5)浏览器发出取文件命令
(6)服务器给出响应,把文件发送给浏览器
(7)释放连接
(8)浏览器显示文件中的所有内容
现在我们打开一个视频的播放页面(图2),可以看到页面上会显示视频区域。当我们点击该区域便会弹出视频播放器。网页要显示视频,其HTML文件中必包含了<video>标签,该标签中指定了视频的URL。如显示名为sample.ogv的视频代码。<video src="sample.ogv"></video>
图2
可视频内容又是从哪来的呢。接下来就要介绍流媒体这一概念了。
二、流媒体
1.流媒体简介
流媒体是一种可以使音频、视频和其它多媒体能在网络上以实时的、无需下载等待的方式进行播放的技术。
流媒体文件格式是支持采用流式传输及播放的媒体格式。流式传输方式是将视频等多媒体文件经过特殊的压缩方式分成一个个压缩包,由服务器向客户端连续、实时传送。在采用流式传输方式的系统中,只需经过几秒或几十秒的启动延时即可在播放器或其它硬件、软件对压缩的动画、视音频等流式多媒体文件解压后进行播放,多媒体文件的剩余部分将在后台的服务器内继续下载。
2.移动流媒体
网络传输是实现流媒体的传输的关键,移动流媒体系统的网络传输方式有两种:顺序流式传输(progressive streaming)和实时流式传输(realtime streaming)。顺序流式传输是指播放器在一边顺序下载媒体数据的同时,一边播放已下载的那部分媒体,顺序流式传输不需要特殊的服务器,通常使用标准的HTTP服务器配合HTTP协议即可实现。顺序流式传输在数据的传输过程中能够保证数据的可靠传输,所以能够提供高质量的媒体片段,但流式传输也有局限性,它的网络延时较长,在没有特殊处理的情况下不支持码率适配技术和随机播放的请求。实时流式传输需要专门的流媒体服务器与传输协议(如RTSP/TCP、RTP/UDP),支持实时播放,网络延时较顺序流式传输小,支持码率适配技术和随机请求,但是在网络状况不好的情况下丢包和乱序状况严重,需要对差错情况进行相应的处理,此外当媒体数据需要通过防火墙时可能会造成媒体数据不能到达客户端的现象,要通过内网穿透技术解决此问题。
3.移动流媒体业务系统
移动流媒体业务体系包括移动终端、网络和服务器三部分。其中流媒体服务器、内容服务器、编码器和内容采集卡是移动流媒体系统的核心结构,主要为移动流媒体播放器提供媒体数据。移动流媒体业务系统结构如下图。
图3
移动流媒体业务系统中的服务器根据功能的不同可以分为流媒体服务器、内容服务器、编码器、业务管理服务器和鉴权服务器等。流媒体服务器主要负责向移动终端发送媒体数据;内容服务器主要完成媒体文件的保存功能;编码器把从内容采集卡中采集到的媒体数据编码成客户端支持的各种格式,并发送给流媒体服务器;业务管理服务器保存流媒体业务所需各种文件以维持系统的正常运行;鉴权服务器鉴定用户的使用权限。
移动流媒体播放器业务根据数据内容的播放方式进行划分,可分为三种,即流媒体点播(VOD video on demand)、流媒体直播和下载播放。这三种分别是热门视频中的在线视频、直播、视频下载到本地。
三、视频简介
既然要分析热门视频业务,那我们必须要知道视频是什么。
1.视频的实质
视频是流媒体的一种。纯粹的视频(不包括音频)实质上就是一组帧图片,经过视频编码成为视频(video)文件再把音频(audio)文件有些还有字幕文件组装在一起成为我们看到的视频(movie)文件。
2.视频编码
因为不进行编码的视频数据量非常大,会造成存储和传输上的困难,所以视频文件都需要在录制完成后进行编码。视频编码主要从两个维度压缩数据。
(1)单张图像某一区域相邻像素相似,比如一片红色只记录红色色值和区域,不用记录这个区域的每一个像素点。
(2)相邻图像之间内容相似,因为相邻两帧要制造连续的效果,所以两帧之间的内容一般非常接近。目前主流的视频编码技术都是用图像编码方法对第一帧进行编码,然后用某种方式描述接下来的帧相对于附近的帧有什么区别。
3.视频格式
MP4、MOV、AVI、RMVB这些播放格式其实都是封装格式,除了RMVB比较特殊外,其他格式内封装的视频编码格式都是H264,H264以高压缩率闻名于世,压缩效率比MEPG-2提升一倍多,但H264的解码难度提高了3倍多。
4.视频码率
视频文件的大小除以是视频的时长定义为码率。码率和分辨率跟视频质量的关系:
(1)码率可以理解为取样率,单位时间内取样率越大,精度就越高,同时体积也越大。
(2)当视频没有经过编码时,如果分辨率越高,那么视频图像的细节越清晰。
(3)但如果视频经过编码,被限制在一定码率内,编码器就必须舍弃掉一部分细节。
(4)所以分辨率和码率都同清晰度有关。
5.软解码和硬解码
对H264的视频解码给CPU造成了很大负担,所以一般把这部分工作交给更善于进行处理简单工作但是数据量较大的GPU。GPU解码就是所谓的硬解码,CPU解码就是软解码。
iOS提供的播放器类使用的是硬解码,所以视频播放对CPU不会有很大的压力,但是支持的播放格式比较单一,一般就是MP4、MOV、M4V这几个。
四、HTTP Live Streaming(HLS)
1.HLS简介
咱们的测的是基于iOS的QB,那要开发音视频类的应用就要知道HLS。
HLS是一种可以从web服务器通过HTTP协议发送音视频到基于iOS和Mac OS X的应用进行播放的流媒体协议。它既支持直播又支持点播(VOD)。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率,客户端会根据带宽的变化切换不同的源。HLS也支持通过HTTPS协议传输加密媒体和用户身份验证。基于iOS 3.0和后续版本系统的移动设备都内置了支持HLS的软件:safari。
注意:如果你的app通过蜂窝网络传输视频,若视频时长超过10分钟或时长5分钟的视频内容超过5MB,你就必须使用HLS协议。
Safari播放HLS视频是通过有<video>
标记的源。通过MediaPlayer和AVFoundation架构来开发支持HLS的应用(QB的播放器就是用的AVFoundation架构开发的)。
许多已经存在的流服务要求专用的服务器将内容分发给终端用户,它要求特殊的技术来构建和包含这些服务器,然而很大程度上,搭建这些服务器开销很大。为此,苹果设计了HLS来避免这个问题。因为HLS基于HTTP协议,所以它支持几乎所有的边缘服务器、媒体分发器、缓存系统、路由器和防火墙。
2.HLS结构
HLS系统大致分为三部分:服务器(内容准备)、分发器(内容分发)、客户端软件(内容播放)。
服务器负责对输入的音视频媒体内容进行数字编码,将其封装成适合于内容分发组件进行传送的格式。
分发器由web服务器组成。负责接收客户端的请求,并将准备好的媒体内容和相关资源传给客户端。
客户端软件负责发送请求,下载相关请求的资源,然后将从服务器接收的请求资源以一种持续数据流的形式呈现给用户。播放器先获取索引文件,通过URL来确认对应的流。索引文件依次指定可用的媒体文件、密钥和可用替换流(备用源)的位置。对于选中的流,用户顺序下载每个可用的媒体文件。每个媒体文件包含一个可执行的流片段。一旦下载到足够的数据量,客户端便将拼装好的流呈现给用户。
在典型的HLS结构配置中,硬件编码器将音视频内容(movie)编码成H.264格式的视频(video)和AAC格式的音频(audio)。再通过 MPEG-2 压缩方式将编码后的文件传给媒体分割器(Stream segmenter)。媒体分割器将传过来的文件分割成一系列的小的媒体文件,将这些文件放到web服务器上。同时为这些分割后的一系列文件创建索引文件并维护(一个movie对应一系列分割后的文件和一个索引文件)。而所有索引文件的URL放置在web服务器上。播放器读取索引文件(URL),然后请求对应的一系列有序的文件。播放器能够无卡顿地播放这一系列的分割文件。
如图4,是一个基本的HLS架构。
图4
输入的内容可以是直播或已录制好的媒体。一般将它们以MPEG-4 格式(H.264 video and AAC audio)编码,然后以MPEG-2格式压缩,传给媒体分割器。MPEG-2传输流被分成片段,并以一个或多个.ts的媒体文件进行保存。完成这项工作是通过像苹果媒体分割器这样的类似软件。
媒体分割器创建索引文件,索引文件包含了一系列媒体文件和其元数据(为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能)。索引文件是.M3U8格式的播放列表。
对于同一个媒体文件,最好提供多个播放列表,而每个播放列表指引的分割文件是不同的编码格式并以不同的比特率进行传输。这些不同编码格式以不同的比特率传输的分割文件称作variants(不知道如何翻译,照抄原文,囧)。这样播放器在播放时会根据网速切换到最适合的variants,让观看体验更好。通过master index文件索引到不同的播放列表,如图5。
图5
3.关于HLS的HTML网页
最简单的传递HLS媒体的方法是创建一个含有<video> 标记的网页,其视频源为.M3U8播放列表文件的存放地址。如图6。
图6
4.HLS更多内容
关于HLS的内容还有很多,这里不一一介绍,有兴趣的同学可以自己上官网查看。参考资料里给出了网址。其中HLS实践是讲述如何实现HLS的具体实例,还有HLS草案,描述了HLS协议的细节。阅读这些对HLS的整个工作原理会有更清晰的理解,值得细读。
五、播放器
1.播放器框架
图7为移动流媒体播放器的总体框架图。播放器由网络模块、缓冲模块、音视频解码模块、同步播放模块和用户界面模块组成。
图7
播放器通过列表管理模块(用户界面模块)向业务管理服务器请求播放列表和向文件服务器请求动态图标文件等启动播放器的必要文件。用户查看播放列表选择要观看的流,通过鉴权服务器确认权限后获取文件流或直播流的URL。在使用顺序流式播放的情况下,服务器通过HTTP协议把文件通过数据流方式发送给播放器,网络接收模块通过解析文件流的索引数据部分,把音视频数据区分开来,分别传递到各自的缓冲模块。在播放的过程中,播放器根据缓冲区的使用情况向服务器发送下一步音视频请求。在使用实时流式播放的情况下,播放器使用RTSP协议和媒体服务器建立连接并获取SDP文件,播放器根据返回的SDP文件选择需要播放的音视频流。在进行内网穿透后,流媒体服务器把播放器请求的那一段音视频流使用RTP协议发送给播放器,播放器接收到RTP数据包后按照RTP的封装格式把音视频数据连同时间戳信息取出,送入音视频缓冲区,并定时发送RTCP反馈消息给服务器报告实时的网络状态和缓冲区状态,以便服务器调整传输的音视频数据流。音视频缓冲区接收从网络模块发送过来的数据,并对使用实时流式传输造成的乱序数据包进行重新排列,如果有包丢失情况则要做相应的重传处理。音视频解码模块按时检查各自的缓冲区状态,当缓冲区中数据达到播放要求时,音视频解码模块从各自的缓冲区中取出媒体数据和它的时间戳,解码后连同时间戳一同发送给播放模块。播放模块根据音视频数据的时间戳调整音视频的播放速度以达到音像同步。
2.模块简介
(1)列表管理模块(可以理解为热门视频页面):从业务管理服务器接收并解析播放列表信息发送给图形用户界面模块以便显示出来供用户选择,在文件服务器中查询新的动态图标文件可供下载,如果有,需要在后台下载并发送给图形用户界面模块显示出来。
(2)网络模块:在播放器使用顺序流式传输时,网络模块使用HTTP协议向流媒体服务器发送HTTP GET请求后,接收服务器发送过来的媒体数据,根据3GPP文件结构,解析出索引区数据,根据索引区中的音视频Chunk偏移表分离出音视频数据Sample,计算出每个媒体Sample的时间戳后送入缓冲模块;在播放器使用实时流式传输时,播放器使用RTSP协议与流媒体服务器进行交互,发送节目请求并接收SDP文件,然后根据用户需求选择适合的媒体流进行请求,将接收到的RTP数据包进行解包、分帧后分别存储在音视频缓冲区。
(3)音视频缓冲区:为了克服由于网络延时、丢包、乱序等问题造成的数据抖动和数据丢失,避免在播放中出现播放不稳定、湖面不连贯的现象,播放器需要使用缓冲区,即使用一块较大的内存空间将接收到的媒体数据缓存起来,并对乱序和丢包进行相应处理,知道缓冲区中数据量超过一定的限度时再开始音视频的播放以保证音视频的流畅播放。缓冲区的大小设置需要遵循IPhone设备的硬件条件和网络状况,此外还与客户的需求有关。
(4)音视频解码模块:由于音视频原始数据量非常大,在现有的网络带宽情况下传输原始音视频数据是不可能的。所以目前网络上传输的音视频数据都是经过各种压缩处理过的。音视频解码模块就是用来把这些压缩过的数据解码成原始的音视频数据后使用播放模块播放出来。
(5)音视频播放模块:音视频播放模块是两个分别的模块,它们负责将解码后的原始媒体数据播放出来,包括视频的显示和声音的回放。在音视频播放的过程中需要对其进行处理以达到音视频同步。
六、总结
移动流媒体技术涉及到流媒体数据的采集、压缩、存储,无线网络通信和移动终端等多项技术。涉及的每一项技术都可以让你专攻,所以这里只是简要的介绍了一点知识。该文档内容都是通过搜集资料整理的,有摘抄他人的论文。出于个人的理解,可能存在断章取义和理解错误等不对和不足之处,欢迎指点。
七、参考资料
(1)视频简介
http://www.cnblogs.com/zy1987/p/4520118.html?utm_source=tuicool&utm_medium=referral
(2)HLS概述
https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/Introduction/Introduction.html
(3)HLS结构
(4)HLS实践
https://developer.apple.com/library/ios/technotes/tn2224/_index.html
(5)HLS草案
https://tools.ietf.org/html/draft-pantos-http-live-streaming-18
相关推荐
UEFIBIOS浅说 本文将从UEFI BIOS浅说 pptx文件中提炼出重要的知识点,以下是详细的解释: 一、BIOS 的概念和功能 BIOS(Basic Input/Output System,基本输入输出系统)是电脑中的一组固化程序,提供最低级的硬件...
根据提供的文件信息,我们可以推断出该文档主要讨论了狭义相对论与广义相对论的基本概念和发展历程。虽然部分内容缺失,但通过标题、描述以及已知的信息,我们可以概述狭义相对论与广义相对论的主要知识点。...
本文将从给定的文件标题、描述、标签以及部分内容出发,深入探讨狭义相对论与广义相对论的核心概念及其背后的物理意义。 ### 第一部分:狭义相对论 #### 1. 几何命题的物理意义 狭义相对论的一个核心思想是,物理...
浅说顾客满意度.ppt
海典H1自定义事件框架浅说 1、窗口概述 2 2、窗口相关事件 3 1、打开窗口 3 key事件 4 timer事件 4 2、保存数据 4 1、 pfc_begintran 4 3、 pfc_endtran 4 4、 Pfc_save 4 3、关闭窗口 4 3、数据窗口事件 5 添加主...
浅说元代的监察制度.pdf
浅说信息时代的媒体.pdf
科技论文写作浅说。本人写的PPT文档。根据张孙伟老师的书,编写。为何把“科技论文写作”作为一门独立的课程? 要准确地把科技成果记录下来,应该规范地按照科技论文的要求进行。 科技论文的写作,在形式上有一...
我国高压电网浅说设计说明.doc
初中语文语文论文语感素质培养浅说
博弈论与信息经济学浅说.docx
系统论、信息论、控制论是现代科学技术中的三个重要理论,它们诞生于20世纪中叶,是现代科学方法论的重要组成部分。本书旨在向读者普及这三个理论的基本知识,特别适合具有一定文化程度的普通读者。...
博弈论与信息经济学浅说.doc
浅说从词到文章的组织选录.doc
很抱歉,但根据您提供的信息,标题和描述中的"深化浅说长路慢走[路要慢走的散文].rar"以及压缩包内的文件"深化浅说长路慢走[路要慢走的散文].pdf"似乎与IT行业知识并无直接关联。它们更可能属于文学或哲学类的内容,...
混沌理论必学,以浅显的语言阐述了混沌理论的基础及应用,是十分难能可贵的学习资料。
流程银行是一种针对银行业务流程进行全面改革和重构的管理模式,旨在提高效率、降低成本、增强服务质量,以适应快速变化的金融市场环境。这一概念的核心是通过重新设计和优化银行的业务流程,使其更加以客户为中心,...