B站是怎么做到HTML5播放flv视频的?

B站最近新出的HTML5播放器 是怎么做到播放flv视频的?
我在审查元素里看到加载的是flv格式的视频
video标签的src属性 是这样的:blob:http%3A//http://www.bilibili.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

------JS新手

阅读 18.6k
7 个回答

HTML5的视频播放是基于 视频自身编码和封装的(其实任何播放器也是这样)支持性。
决定一个视频文件如何被解析来播放需要知道其数据封装格式(从而正确的分离 数据格式描述/视频数据包/音频数据包/其他数据包),这一过程在视频播放器处理中称为解复用(dmux),然后根据数据格式描述(查找各种数据包对应的解码器),各种解码器把数据恢复为基于同一时间基线的数据流(视频的帧数据,音频的音频流数据等等),然后用渲染程序向显卡输出各个帧(同时向声卡输出各个音频数据流,以及其他需要同步数据的输出,例如字幕)从而完成播放.

在这个过程中,扩展名其实不是必须的,因为视频本身的数据头才是标识数据封装、编码器等等数据信息的实体,所以仅仅看支持.flv的扩展名其实完全可能是一种处理中的个例,如前 数据编码实可能为H.264 AVC,封装也是mp4的。

其实一般扩展名在web服务中仅仅是为了方便http服务端程序在不解析数据的情况下处理数据,一般在MIME中标识,而对于.flv 和 .mp4,一般仅仅需要标识为其数据需要流式传输即够了,即服务器端其处理需求是一致的。

除了给video标签直接指定文件地址,HTML5还有个MSE来支持音视频播放,就像Flash的数据生成模式,只不过Flash只认FLV,而HTML5可以播Mpeg4,比如fMP4。playease.js就支持http-flv、websocket-flv、websocket-fmp4等。

html5是否可以播放视频文件,是需要看视频文件的编码。
把B站上视频下载下来,可以看到视频编码是AVC,这是大部分支持html5的浏览器支持的编码。
所以即使文件的后缀是.flv也可以播放,如果一个视频文件是mp4格式,但编码不是avc,html5也播放不了

新手上路,请多包涵

播放视频那是浏览器的事,浏览器支持啥格式就能播放啥格式,这和HTML5 JS 有啥关系,HTML5=UI,JS=逻辑处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题