Web多媒体入门 | 青训营笔记

188 阅读4分钟

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

Web多媒体历史

image.png

  • Flash:1994-2020

    • 网页三剑客,flash draemweaver fireworks 播放插件

    • 音视频依赖于flash插件

    • Flash 走下坡路,ios不支持flash

  • Html5:2014年定稿,原生支持音视频,但功能也有限(视频格式有限制,状态检测不到)

  • Media Source Extensions:扩展API实现Html5的不足之处

基础知识

编码格式

图像基本概念

图像分辨率:

用于确定组成一副图像的像素数据,就是指在水平和垂直方向上图像所具有的像素个数。

图像深度:

图像深度是指存储每个像素所需要的比特数。图像深度决定了图像的每个像素可能的颜色数,或可能的灰度级数。例如:彩色图像每个像素用R,G,B三个分量表示,每个分量用8位,像素深度为24位,可以表示的颜色数目为2的24次方,即16777216个;一副单色图像存储每个像素需要8bit,则图像的像素深度为8位,最大灰度数目为2的8次方,即256个。

视频基本概念

分辨率:

每一帧的图像分辨率。

帧率:

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

码率:

就是指视频单位时间内传输的数据量,一般我们用kbps来表示,即千位每秒。

I帧为关键参考帧,P帧解码依赖于前面的I帧,B帧解码不仅依赖于前面的P帧,还依赖于后面的P帧

image.png

GOP (group of picture)

两个帧之间的间隔

image.png

为什么要编码?

为了视频的存储和传输。

image.png

空间冗余

相同颜色用变量存储像素值,重复一万次,减少存储空间。

image.png

时间冗余

图片大体上没有太大变化,99%的相同的图像内容存储时属于时间冗余,没必要再存一遍

image.png

编码冗余

image.png

视觉冗余

去除视觉上看不到的颜色。 一万个像素和十万个像素去表现一个足球没有太大区别、

image.png

编码数据处理流程

预测:分为帧内预测和帧间预测,I帧属于帧内预测,主要去除空间冗余,帧间预测,主要去除时间冗余,

image.png

image.png

封装格式

封装格式:存储音视频、图片或字幕信息的一种容器。(类似于月饼盒)

image.png

image.png

HTML5播放视频主要依赖<audio><video>

image.png

多媒体元素和扩展API

<video>元素

两种方式无显著区别,用<source>的话<video>标签中可以嵌套多个<source>,第一个<source>标签写mp4格式,第二个<source>标签写obj格式,这样播放视频时就会从第一个<source>开始尝试,如果第一个支持就去取第一个,否则取第二个,相当于兜底的作用。

<!DOCTYPE html>
<html>
<body>
    <video src="./video.mp4" muted autoplay controls width="600" height="300"></video>

    <video muted autoplay controls width="600" height="300">
    <source src="./video.mp4"></source>
    </video>
    
</body>
</html>

<audio>元素

<!DOCTYPE html>
<html>
<body>
    <audio src="./audio.mp3" muted autoplay controls width="600" height="300"></audio>

    <audio muted autoplay controls width="600" height="300">
    <source src="./audio.mp3"></source>
    </audio>
    
</body>
</html>

<audio><video>元素方法

play方法是异步的。

image.png

image.png

<audio><video>元素属性

image.png

image.png

<audio><video>元素事件

image.png

image.png

<audio><video>元素缺陷

  • 不支持直接播放hls、flv等视频格式

  • 视频资源的请求和加载无法通过代码控制

    • 分段加载(节约流量)
    • 清晰度无缝切换
    • 精确预加载

媒体源扩展APIMSE(Media Source Extensions)

  • 无插件在web端播放流媒体

  • 支持播放hls、flv、mp4等格式视频

  • 可实现视频分段加载、清晰度无缝切换、自适应码率、精确预加载等

image.png

  1. 创建mediaSource实例

  2. 创建指向mediaSource的URL

  3. 监听sourceopen事件

  4. 创建sourceBuffer

  5. 向sourceBuffer中加入数据

  6. 监听updateend事件

image.png

MSE播放流程

image.png

播放器播放流程

image.png

fmp4有多个moof和mdat文件,对流式播放比较友好。

image.png

流媒体协议

image.png

RTMP是Flash时期使用的,但是现在几乎所有浏览器都不支持Flash了。

HLS全称HTTP Live Streaming,是一个由Apple公司提出的基于HTTP的媒体流传输协议,用于实时音视频流的传输。目前HLS协议被广泛的应用于视频点播和直播领域。

流程:

先数据采集,再把数据采集上传到数据Server,数据Server进行编码,编码之后进行分发,最后Client客户端进行拉流,进行数据播放。

image.png

image.png

应用场景

image.png

总结与展望

总结

  • 发展历史:PC端 flash--->移动端 H5 video-----不满足需求--->MSE扩展API

  • 基础知识:编码格式、封装格式、多媒体元素、流媒体协议

  • 应用场景:点播、直播、图片、云游戏、实时通信(腾讯会议、网课)、视频编辑。

新技术标准

  • Webassembly

  • WebCodecs

  • WebGPU

  • WebVR、WebXR