转载视频播放知识

上一篇 / 下一篇  2017-01-03 15:59:47 / 个人分类:测试基础


  说到热门视频业务,它可是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/TCPRTP/UDP),支持实时播放,网络延时较顺序流式传输小,支持码率适配技术和随机请求,但是在网络状况不好的情况下丢包和乱序状况严重,需要对差错情况进行相应的处理,此外当媒体数据需要通过防火墙时可能会造成媒体数据不能到达客户端的现象,要通过内网穿透技术解决此问题。

3.移动流媒体业务系统

 

       移动流媒体业务体系包括移动终端、网络和服务器三部分。其中流媒体服务器、内容服务器、编码器和内容采集卡是移动流媒体系统的核心结构,主要为移动流媒体播放器提供媒体数据。移动流媒体业务系统结构如下图。



 
3

       移动流媒体业务系统中的服务器根据功能的不同可以分为流媒体服务器、内容服务器、编码器、业务管理服务器和鉴权服务器等。流媒体服务器主要负责向移动终端发送媒体数据;内容服务器主要完成媒体文件的保存功能;编码器把从内容采集卡中采集到的媒体数据编码成客户端支持的各种格式,并发送给流媒体服务器;业务管理服务器保存流媒体业务所需各种文件以维持系统的正常运行;鉴权服务器鉴定用户的使用权限。

移动流媒体播放器业务根据数据内容的播放方式进行划分,可分为三种,即流媒体点播(VOD video on demand)、流媒体直播和下载播放。这三种分别是热门视频中的在线视频、直播、视频下载到本地。

三、视频简介

       既然要分析热门视频业务,那我们必须要知道视频是什么。

1.视频的实质

视频是流媒体的一种。纯粹的视频(不包括音频)实质上就是一组帧图片,经过视频编码成为视频(video)文件再把音频(audio)文件有些还有字幕文件**在一起成为我们看到的视频(movie)文件。

2.视频编码

因为不进行编码的视频数据量非常大,会造成存储和传输上的困难,所以视频文件都需要在录制完成后进行编码。视频编码主要从两个维度压缩数据。

1)单张图像某一区域相邻像素相似,比如一片红色只记录红**值和区域,不用记录这个区域的每一个像素点。

2)相邻图像之间内容相似,因为相邻两帧要制造连续的效果,所以两帧之间的内容一般非常接近。目前主流的视频编码技术都是用图像编码方法对第一帧进行编码,然后用某种方式描述接下来的帧相对于附近的帧有什么区别。

3.视频格式

MP4MOVAVIRMVB这些播放格式其实都是封装格式,除了RMVB比较特殊外,其他格式内封装的视频编码格式都是H264H264以高压缩率闻名于世,压缩效率比MEPG-2提升一倍多,但H264的解码难度提高了3倍多。

4.视频码率

视频文件的大小除以是视频的时长定义为码率。码率和分辨率跟视频质量的关系:

1)码率可以理解为取样率,单位时间内取样率越大,精度就越高,同时体积也越大。

2)当视频没有经过编码时,如果分辨率越高,那么视频图像的细节越清晰。

3)但如果视频经过编码,被限制在一定码率内,编码器就必须舍弃掉一部分细节。

4)所以分辨率和码率都同清晰度有关。

5.软解码和硬解码

H264的视频解码给CPU造成了很大负担,所以一般把这部分工作交给更善于进行处理简单工作但是数据量较大的GPUGPU解码就是所谓的硬解码,CPU解码就是软解码。

iOS提供的播放器类使用的是硬解码,所以视频播放对CPU不会有很大的压力,但是支持的播放格式比较单一,一般就是MP4MOVM4V这几个。

 

四、HTTP Live StreamingHLS

1.HLS简介

       咱们的测的是基于iOSQB,那要开发音视频类的应用就要知道HLS

       HLS是一种可以从web服务器通过HTTP协议发送音视频到基于iOSMac OS X的应用进行播放的流媒体协议。它既支持直播又支持点播(VOD)。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率,客户端会根据带宽的变化切换不同的源。HLS也支持通过HTTPS协议传输加密媒体和用户身份验证。基于iOS 3.0和后续版本系统的移动设备都内置了支持HLS的软件:safari

注意:如果你的app通过蜂窝网络传输视频,若视频时长超过10分钟或时长5分钟的视频内容超过5MB,你就必须使用HLS协议。

       Safari播放HLS视频是通过有<video> 标记的源。通过MediaPlayerAVFoundation架构来开发支持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.关于HLSHTML网页

       最简单的传递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请求后,接收


TAG: 视频播放 知识

 

评分:0

我来说两句

Open Toolbar