我研究了很多关于网络上视频流和播放的现状。我把我总结的东西和我认为我应该遵循的策略贴出来,以支持大多数设备和浏览器的自适应流。我只是想从社区得到反馈,如果我正在研究的策略有任何重大漏洞/改进。
- 为了支持大多数浏览器在html的
<video>
元素中播放视频,我们需要将视频编码为至少3种格式:WEBM, OGG和MP4 - 为视频点播服务提供自适应流媒体,可用的选项有MPEG-DASH,苹果的HLS,微软的Smooth streaming和Adobe的HDS
- 最初我倾向于使用MPEG-DASH,因为它是一个开放的标准,类似于HDS, HLS和Smooth Streaming,它的发明是为了提供一个在任何浏览器和操作系统上提供音频/视频内容的通用平台。
- 但是到目前为止,在iOS和Mac上运行Safari的苹果设备并不完全支持MPEG-DASH标准,因为苹果还没有支持MPEG-DASH所基于的html5的媒体源扩展API。
- 所以我要实现MPEG-DASH(非苹果设备)+ HLS(苹果设备)
- 这意味着我必须同时生成。mpd(由mpeg-dash使用)和。m3u8(由HLS使用)服务器端的文件,然后将其提供给客户端。我在服务器端使用Node.js进行编码。
现在,据我所知,当使用mpeg-dash时,它所做的基本上是它从源文件和配置文件中创建具有不同比特率的各种不同的媒体文件,其中包含关于哪个流要根据带宽发送到客户端的描述/规则。
同样的逻辑也适用于HLS,只是它创建的配置文件扩展名与mpeg-dash不同。
如果我计划支持3种不同分辨率的3比特率,如1020* 720,800 * 600,400 *300的视频,那么我需要为我将要支持的3种格式(即WEBM, OGG, MP4)中的每一种生成这样的视频
所以对于客户端上传的任何一个视频,我需要生成3*3 = 9个视频,同时生成一个。mpd和。m3u8文件,以支持非苹果和苹果设备。
这似乎是一个好的做法吗?或者有一些大的东西,我错过了有一个跨浏览器自适应流解决方案?
欢迎提示/推荐/建议。
谢谢!
从MPEG-DASH和/或HLS支持的角度来看,您可以看到不同浏览器和平台的概述:http://www.dash-player.com/blog/2015/06/replacing-flash-adaptive-streaming-and-drm-in-html5/
我们通常并行生成MPEG-DASH + HLS内容,并为大约80%到90%的MPEG-DASH用户提供服务(在HTML5或Flash中使用http://www.dash-player.com),为10%到20%的HLS用户提供服务。
你的方法听起来有点老套。Mac上的Safari现在支持媒体源扩展,所以DASH又多了一个扩展。但iOS仍然需要HLS。我希望iOS9能包含这个功能,但到目前为止,还没有成功。从理论上讲,使用VideoToolkit在iOS应用程序中实现DASH是可能的,但苹果是否会允许这种功能进入应用程序商店还有待观察。就我个人而言,我会忘记webm,只支持h264/aac。应该完全忽略Silverlight和HDS。Adobe和微软都在转向DASH。也可以通过javascript编写的转换器在MSE中播放HLS。这有点复杂,但有一些玩家可以做到。