音视频开发经验之路视频直播多媒体科技

MPEG DASH 和 HLS

2016-11-01  本文已影响6561人  hzmangel

最近做了点关于这俩玩意的东西,记在这。

友提:废话较多,想看 tl;dr 的按end后往回翻。


首先,这俩东西都是用来处理视频的,为视频提供基于HTTP的Streaming方案,除了这俩之外,还有下面的技术:

这俩没接触,不写。标题中提到的那俩,也就记下来用到的东西,没研究过的,比如说直播啥的也不写。

Overview

先说需求吧,抛开需求谈技术就是耍流氓,嗯。

随着网络的发展,技术的演进,人们手上的电子垃圾设备也越来越多,碰到的网络状况也越来越多,本文的废话也越来越多。在现实的网络环境中做媒体分发,以视频为例,不同的设备所需的大小,码率都不同,就算在相同的设备上,也需要根据网络情况的不同选择合适的码率来播放。在此基础上,还需要提供流畅的切换体验。不难看出,想法很美好,但是现实很复杂。所以,需要有更好的办法向用户提供多码率的媒体分发。

历史

纯废话,可以无视

N年前在学校的时候就有这些东西了,当时是 RTSPMMS (暴露年龄了哇~),自己架好后去BBS(又一个暴露年龄的东西)上贴地址,然后傻等着那收听数带来的莫名其妙的成就感。好像把这玩意给革命掉的是Flash播放器,在播放的时候可以选择码率,不过在切换码率的时候视频会停一下(这个后台具体的实现没考证过,只描述现象)。慢慢的人们发现,Flash将设备变成暧手宝/电熨斗的功能是如此的显著,但是这些热量又不能给电池充电,总不能出门就给手机电脑啥的背尿袋吧,于是又开始鼓捣新玩意了~

HLS

Apple弄的流媒体标准,基于HTTP提供流媒体的功能,在苹果系的软件中被原生支持,至于Windows/Linux/Android,不好意思Who are you?

MPEG DASH

在基于HTTP提供流媒体的方面,到目前为止已经看到了三种方案,苹果的HLS,土坯的HDS和巨硬的MSS,当然,各家用的协议,格式神马的都不会一样。于是每次做支持都要来三人份的。看到这三倍工作量,再想想老板不给加工资,码农们的心都寒了...

MPEG的同志们体察到了这份疾苦,呼吁大家来个标准点的玩意呗,于是就有了MPEG DASH这里有一篇综述,写的比我好还图文并茂的,去那看吧~

解决方案

此处是我在项目中的理解,没查文档,不保证正确

就接触到的MPEG DASH和HLS来看,它们的主要想法都是把一个长视频给切成小块,然后通过一个个的HTTP请求分别下载。这样一是每次请求的数据量不是很大,二是当用户需要换码率或分辨率时,在下次请求给新的视频就好。但是两种方法还是有些不同的,这个会在后面描述。此外,MPEG DASH还支持对于单一的媒体文件按时间戳请求,不过这次用到的不多,只会在后面介绍下生成方法。

在本文中,切片出来的视频片段被称为Segments。除了这些Segments外,还有描述这些Segments的文件,一般称为 Manifest 文件,但是后面也会根据文件扩展名称为 MPD 文件(MPEG DASH)或 M3U8 文件(HLS)。

进行MPEG DASH切片用的工具是 MP4Box ,而HLS切片的工具是 ffmpeg

需求

终于说到了这次的需求。首先,是个视频服务提供商,之前的做法就是把mp4丢s3上让用户自己去看。不过现在发现一是一个视频看下来,HTTP长连接受不了,二是如果只想给用户一段视频小样(切片播放),现在的方案没法实现。找了一圈,决定拿HTTP Streaming来试一试。

在做原型测试的时候,把HLS和DASH都尝试了下,由于需要支持切片播放,目前的实现方案选择的是HLS。

一些命令

源视频为 foo.mp4 ,就是随便从油管找一段720p的视频下到本地来用的

MPEG DASH

HLS

播放器

虽然说有些浏览器可以内建支持HLS或者DASH,但是对于开发这边而言,有一个统一的播放器会更方便些。之前查的时候找到了这些播放器,有些是两者通吃,有些是只能放一个;有些免费,有些收费,按需取用吧~


基本上就是这些了,主要是做项目中查到的东西,整理下以便查阅。如有错误,欢迎告知。

上一篇 下一篇

猜你喜欢

热点阅读