流媒体
注: 1、此篇文章立足于巨人的肩膀之上,侵必删 2、有许多内容尚未完成,包括segment的类别,HTTP协议基础等
DASH
DASH行业论坛(DASH-IF,DASH Industry Forum | Catalyzing the adoption of MPEG-DASH (dashif.org))则进一步促进和催化了MPEG-DASH的采用,并帮助其从规范转变为实际业务。主要的流媒体和媒体公司,包括微软、Netflix、Google、爱立信、三星、Adobe等都在实际业务中尝试使用,并为不同使用环境创建了DASH使用指南。
-
DASH的工作原理(概述)
- Server端将媒体文件分割为时间长度等长的片段(Segment),每个片段可以有不同的码率和分辨率;
- 客户端通常通过对网络带宽的评估或者是自身缓冲区的大小,选择不同参数的片段。通过符合HTTP标准的GET请求进行对应片段的下载。
客户端首先向服务器请求下载mpd文件,根据mpd文件和自身的条件,请求下载合适的媒体片段。由于在时间上,片段是对齐的,因此可以实现在不同片段间切换时,达到无缝切换的播放。 -
DASH标准(概述) 首先要解释的概念是MPD(Media Presentation Description,媒体表示描述)文件。 MPD为一个XML文件,他是用HTTP 中的URL(Uniform Resource Locators,统一资源定位器)表示媒体内容中不同质量和每种质量的各个段。其是一种分层的数据模型,见下图。
-
Period : 标注了视频的时长信息,也可以看做是更新mpd文件的最长时长。 一个Period通常表示一个媒体内容时期,包含一系列不同编码版本的的媒体组件,即不同视角或不同编解码器的视频,不同语言或者不同类型信息的音轨,字幕或标题等,这些组件具有某些特征,例如码率、帧率,音频通道等,这些特征在一个Period中是不会改变的。 在直播场景下,MPD文件会更新Period以保证旧的Period被移除。 客户端可以根据一个Period中可用的码率、分辨率、编解码器等进行调整。且Period可以用于分割内容,比如广告的插入,改变足球比赛的摄像机视角等。 -
AdaptationSet : 包含了媒体呈现的形式,(视频/音频/字幕)。 表示一个或多个逻辑相同的媒体内容组件的一系列可替换的编码版本,例如具有相同编解码器、语言、分辨率、音频通道格式等组件可以包含在同一个Adaptation Set中(但并非完全如此)。这种机制允许客户端消除一系列不满足其需求的多媒体组件。比如客户端只能解HEVC码流,自然不希望HEVC码流与AVC码流被封装在一个Adaptation Set中。 另外,Period还可以只包含一个Adaptation Set,以满足MPD创建者的意图。例如,他只想让你看具有5.1声道音频的高清视频内容。 如果有其他的媒体组件例如字幕等,也可以单独组合为一个Adaptation Set。
-
Representaiton : 包含不同的码率、编码方式、帧率等。 一个Representation描述一个或多个媒体内容组件的一个可交付的编码版本。 在使用的编解码器、解码复杂度以及因此需要的CPU资源或呈现技术方面等更为深远的特征下,Representation都可能有所不同。 Representation包含一个或者更多的媒体流(用于多路复用中的每个媒体内容组件,多路复用的意思指将多个信号组合成一个信号的过程)。 任何一个Representation都足以用于渲染包含的媒体内容组件。意味着客户端可以在一个Adaptation Set中动态的在Representation中进行无缝切换。 -
Segment : Representation中每一个具体的片段,以便可以得当的访问与交付。 每个Segment通常具有相同的时间长度,按照媒体内容的呈现时间轴进行排列。MPEG-DASH不限制段长度或给出最佳长度的建议。长段意味着更有效的压缩,而短段用于实时场景和高度可变的带宽条件,如移动网络。 直播时的Segment还有一个“可用时间“的特征,表示在这个时间可以访问直播场景。 为了访问一个Segment,MPD中为每一个Segment提供一个URL,因此一个segment是通过单个HTTP请求检索的最大数据单元。 对于已经分段的Representation,包含两种小段(Subsegment)—— 初始化Segment和包含静态媒体数据的Segment。段中有一个段索引,描述子段的表示时间范围与字节范围,可以通过HTTP1.1字节范围请求提前下载子段以生成适当的子段请求。 为了实现在Representation中切换,MPEG-DASH引入了流接入点(Streaming Access Point)。例如,每个段通常以IDR帧开始,以便于可以在传输一个段之后切换不同的Representation。 简而言之,一个视频首先分为Period,Period中包含Adaptation Set或是字幕等媒体组件,一个Adaptation Set中包含具有不同码率\分辨率等特征的Representation,而客户端则通过请求Representation中具有URL的Segment进行媒体内容的解码与播放。
-
Segment参考方案: 制定标准为RFC3986 -
DASH相较于HLS的优势:
-
DASH的实现
-
Exoplayer —— 开源项目,使得MPEG-DASH在Android上原生使用 -
目前,Youtube Netflix已支持MPEG-DASH,且可以使用多种Mpeg-DASH播放器。国内,Bilibili已经支持DASH。 虽然HTML5不直接支持MPEG-DASH,但是一些JavaScript可以通过HTML5的Media Source Extensions(MSE)使用MPEG-DASH。 当与WebGL结合,MPEG-DASH基于HTML5的自适应比特率流还可实现360°视频的实时和按需的高效流式传输。This demo shows the Bitmovin Player displaying a 360° video with VR -
客户端与库(注:字体加粗项为我曾使用过)
-
服务器(注:字体加粗项为我曾使用过)
-
DASH内容生成器(注:字体加粗项为我曾使用过)
不同的流媒体协议
小结——
协议类型 | HLS协议 | DASH协议 | RTMP协议 |
---|
连接方式 | 短连HTTP | 短连HTTP | 长连HTTP | 推广公司 | Apple | ISO,Open | Adobe | 切片工具 | FFmpeg | MP4Box Beno4-mp4dash FFmpeg | - | 索引文件 | m3u8,m3u | mpd | - | 分片文件 | TS | mp4/cmfv/cmfa/m4s | Message | 播放方式 | 本地播放 | 本地播放 | 实时播放 | 视频编码 | AVC/HEVC… | AVC/HEVC… | AVC/VP9… | 音频编码 | AAC | AAC/mp3… | AAC/mp3… | 原理 | 分片,更新索引文件 | 同左 | 即收即发 | 延时(?) | 10-30s | <HLS,灵活 | >2s |
HTTP
-
HTTP协议基础: -
网络传输方式:
-
文件下载 -
HTTP渐进式下载 -
HTTP流式传输 -
实时流媒体传输 HTTP渐进式传输—— 边下载边播放, -
采用HTTP协议作为媒体流的推送协议的总结
- HTTP流媒体作为一种网络视频传输形式正在广泛传播。
- 在开放互联网上使用HTTP作为多媒体传输的主要协议是一个明显的趋势。
- 基于http的传输通过避免NAT和防火墙的穿越问题,使流媒体服务变得简单和轻松
- 由于HTTP和底层TCP/IP协议得到了广泛的实现和部署,基于HTTP的交付提供了可靠性和部署简便性。
- 基于HTTP的传输提供了使用标准HTTP服务器和标准HTTP缓存(通常是廉价的服务器)来传递内容的能力,这样就可以从CDN或任何其他标准服务器群传递内容。可拓展性强。
- 基于http的传输提供了将“流会话”的控制完全搬移到客户端的能力。客户端基本上只打开一个或多个到一个或多个标准HTTP服务器或缓存的TCP连接。(例如现如今可以同时打开多个视频端口)
- 基于http的传输为客户端提供了自动选择初始内容速率来匹配初始可用带宽的能力,而无需与流媒体服务器进行协商。
- 基于http的传输提供了一种简单的方法,在给定的内容或服务时,根据可用带宽的变化实时无缝地更改内容速率,而不需要与流媒体服务器协商。
- 基于http的流媒体有潜力加速视频流服务的固定-移动融合,因为基于http的CDN可以用作一个通用的交付平台。
参考文章
流媒体协议:互联网视频分发协议介绍(渐进式、HLS、DASH、HDS、RTMP协议) - 简书 (jianshu.com)
http推流原理 - 简书 (jianshu.com)
ITEC – Dynamic Adaptive Streaming over HTTP (aau.at) 标准小组官方网站,提供了一系列最新研究,工具,白皮书、视频序列的下载等
基于HTTP的动态自适应流 - 维基百科,自由的百科全书 (wikipedia.org)
MPEG_DASH Dynamic Adaptive Streaming Over HTTP | Bitmovin
自适应流媒体传输(四)——深入理解MPD_zhanghui_cuc的博客-CSDN博客_mpd
|