Web多媒体 | 青训营笔记

43 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

Web多媒体

Web多媒体历史

  • Flash插件:浏览器不支持音频和视频,因而使用第三方插件来实现
  • HTML5:原生支持音视频播放,但是功能有效
    • 支持的视频格式少
    • 浏览器接管数据请求
  • Media Source Extensions API:实现多视频格式播放
  • 当前:MSE为主,标签为辅

编码格式

图像

图像分辨率:确定一副图像的像素数据,水平和垂直方向上图像具有的像素个数。

图像深度:存储每个像素所需要的比特数。图像深度决定了图像的每个像素可能的颜色数或可能的灰度级数。

视频

基本概念

分辨率:每一帧图像的分辨率。

帧率:视频单位时间内包含的视频帧的数量

码率:视频单位时间内传输的数据量,kbps表示,即千位每秒

编码格式

I帧:解码不依赖于其他帧。

P帧:解码依赖于它前一帧。

B帧:解码不仅依赖于它前一帧数,还依赖于后一帧。

DTS:解码时间戳。

PTS:显示时间戳。

GOP(group of picture):两个I帧之间的间隔。

视频编码

视频编码的目的:缩小占用存储空间的大小。

视频编码的原理:去除冗余的数据。

  • 空间冗余
  • 时间冗余
  • 编码冗余(例如只有两个颜色,没必要用很长的编码,1表示一种颜色,0表示另一种颜色)
  • 视觉冗余(10像素和10000像素看起来有很大区别,但是10000像素和100000像素人眼看起来区别不大)

编码数据处理流程:

  • 预测:去除空间冗余和时间冗余
  • 变换:去除空间冗余
  • 量化:去除视觉冗余
  • 熵编码:去除编码冗余

编码格式的发展历程

封装格式

封装格式:存储音视频、图片或字幕信息的一种容器。

多媒体元素

<video>标签和<audio>标签:

<!--第一种方式-->
<video src='...'></video>

<!--第二种方式-->
<video>
    <!--会逐一加载,直到找到一个能播放的-->
    <source src='...'></source>
    <source src='...'></source>
    <source src='...'></source>
</video>

对象的方法:

标签属性:

事件:

<audio><video>的缺陷:

  • 不支持直接播放hls、flv等视频格式
  • 视频资源的请求和加载无法通过代码控制
    • 分段加载
    • 清晰度无缝切换
    • 精确预加载

扩展API

媒体源扩展API(Media Source Extensions)

  • 无插件在Web端播放流媒体
  • 支持hls、flv等格式视频
  • 可实现视频分段加载、清晰度无缝切换、自适应码率、精确预加载等

使用步骤:

  • 创建mediaSource实例
  • 创建指向mediaSource的URL
  • 监听sourceopen事件
  • 创建sourceBuffer
  • 向sourceBuffer中加入数据
  • 监听updateend事件

流媒体协议

RTMP是Flash时期使用的协议,HLS(Http Live Streaming)是一个由Apple公司提出的基于Http的媒体流传输协议,用于实时音视频流的传输。目前HLS协议被广泛用于视频点播和直播领域。