web中视频流的工作原理
创始人
2024-04-04 23:26:03
0
职教业务中经常需要和视频播放器打交道,今天分享一下视频流的工作原理。主要包含以下4个部分:
  1. Video标签

  2. Media Source Extensions

  3. Source Buffers

  4. Media Segments

一,Video 标签 在WHATWG没有提出Html5标准之前,在web端播放视频都是依赖Flash, 浏览器需要安装Flash 插件才能看视频。

                                                        未安装插件的表现

Html5添加了类似Img的Video标签,满足了更多业务场景。

例如:视频清晰度的切换、播放视频流、切换视频字幕、音频语言等。

Video Tag的简单例子

只要浏览器支持Html5并且有相对应的解码器,就会看到下面的效果

Video提供了非常多的API来操控视频播放,具体可以参考Html5 Video Api

实际业务中就不能只是简单的Video标签设置一下Src了,还使用到了很多强大的Web Api,例如Media Source Extensions。

二,Media Source Extensions

Media Source API,也即是MSE标准,让web开发者无需安装插件就可以通过js直接创建和操作流媒体。结合Video标签和Audio标签就可以实现流媒体的播放。

JS中的MediaSource对象,和它名字一样,代表着媒体资源,更确切的说其实代表了video数据流和audio数据流。

使用MSE之后我们的代码变成了如下,依旧是给Video的Src属性赋值,不同的是使用了MediaSource对象。

但是只有这些还不够,还需要了解一下SourceBuffer对象。

三,Source Buffers

一个MediaSource对象包含一个或者多个SourceBuffer实例。每一个实例都和一种类型的媒体内容相关联。

例如最普通的一个视频包含以下部分:

这样根据类型就可以分别对SourceBuffer进行处理了。相对应的服务端也可以根据类型对数据进行归类存储。

现在可以手动的随意操作视频播放中的音频流和视频流了。

三,Media Segments

在上面的代码中我们使用了一个.mp4文件,包含了所有的音视频,这个只能满足最最简单的使用场景。

在真实的视频网站中会经常用到语言的切换(国语or英文),网络不好的情况下使用自动清晰度等。这种复杂的场景是如何实现的呢?

对音视频流进行分段,也就是Segments。每一段代表着2~10秒不等的音视频数据片段。把每一个片段组合起来,就形成了完整的音视频内容。

想对应的,服务端存储也是以Segments形式,例如上面的例子,服务端存储会如下:

借助Segments我们就不用等整个视频下载完成,只需要拿到一部分Audio的Segments和Video的Segments我们就可以正常播放视频了

-- 实现自动画质 --

很多的视频网站都有自动清晰度的功能,会根据网络情况动态的切换到不同的画质。例如

视频刚加载或者网络不好的情况下,使用较低画质,占用带宽更少,用户的感受上交互时间会被缩短。

实现自动画质也是基于Media Segments,相对应的服务端也会进行一些清晰度相关的存储设计,例如:

然后在JS中根据不同的带宽请求不同的Segments

把不同画质的Segments给append在一起也是完全没有问题的,所以在自动切换画质的过程中视频是继续播放的状态。

-- 实现多语言切换 --

有些视频尤其是电影,都会提供不同语音的音频让用户进行选择。实现多语言的切换,同样也是基于Media Segments。

同样像不同画质切换一样,只需要根据选择项切换不同的Audio Segments。

服务端存储设计如下:

然后在JS中根据用户的选择对Audio Segments进行拉取

如果用户在观看中途切换语言,就需要把之前的Audio Segments进行清除。再重新定位到播放的位置或者从头开始播放。

实际的业务场景中,服务端存储设计会更加复杂,但是前端都是操作Media Segments。

--  end --

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...