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

121 阅读5分钟

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

这是我参加【第四届青训营】笔记创作活动的第20天

01—Web多媒体历史

image-20220816161514400.png

  • 第一阶段:PC为主的时代

    • 不能实现音视频播放,需要使用第三方插件,网页三剑客:flash、draemweaver、fireworks。
  • 第二阶段:移动互联网时代

    • Flash下坡路,ios不支持flash。推出了html5,但只支持webp、ogg、MP4三种视频格式。只能进行格式转换进行播放
  • 后来推出Media Source Extensions

02—基础知识

02-1—编码格式

02-1-1—图像基本概念

图像分辨率:用于确定组成一副图像的像素数据,就是指水平和垂直方向上图像所具有的的像素个数。1920*1080

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

图像分辨率越大的图像所占有的存储空间就越大吗?

不一定,还要看图像深度。e.g. 1920 * 1080,图像深度为8位、1920 * 700,图像深度24位,分辨率小的图像占的空间更大。

02-1-2—视频基本概念

分辨率:每一帧的图像分辨率;所有帧的分辨率都是相同的。

帧率:视频单位时间内包含的视频帧的数量;常用25-30

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

视频由分辨率、帧率、码率都决定视频的大小。

02-1-3—视频帧的分类

image-20220816165028292.png

I独立进行编码帧又称帧内编码帧,是一种自带全部信息的独立帧,无需参考其他图像便可独立进行编码。

P帧又称帧内预测编码帧,需要参考前面的I帧或者P帧才能进行编码。

B帧又称双向预测编码帧,也就是B帧记录的是本帧与前后帧的差别。

只有I帧和P帧时:dts123456;bts123456

有I帧、P帧、B帧时:dts124365;bts123456

每个GOP的第一帧是关键帧。I帧越多占有的存储空间越多。GOP通常间隔在2/4s

image-20220816165328524.png

02-1-4—为什么要编码?

image-20220816165400150.png 目的为了视频的存储和传输。

02-1-5.1—空间冗杂

image-20220816170715057.png

02-1-5.2—时间冗杂

image-20220816170823656.png

99%相同的数据称为时间冗杂。

02-1-5.3—编码冗杂

image-20220816170922025.png

蓝色用1表示;白色为0.

02-1-5.4—视觉冗余

image-20220816171010513.png

针对人类视觉系统,不是所有颜色都能看到。

将视觉看不到的颜色去除,去除之后效果一样。

02-1-5.5编码数据处理流程

image-20220816171312226.png

预测包括帧内预测和帧间预测。

I帧属于帧内预测,去除空间冗余;帧间预测去除时间冗余。

image-20220816171408260.png

目前用到的最主流的标准:

H.262用在数字电视、VCD/TCD光盘上;

H.264各大视频网站爱奇艺、腾讯、抖音、快手等在PC端上看;

4k以上压缩效率没有那么大,需要265来实现4k视频的编码;

H.265比264的压缩效率高一倍,手机端看视频基本走265编码;

H.266用于AR 8k的视频。

谷歌整的VP9/VP10,但VP10的压缩效率没有265好,于是与亚马逊、微软等组成AOM联盟,推出一个AV1的编码,与265的压缩效率差不多;

AVS中国推出的编码,到达AVS3与265的压缩效率差不多。

02-2—封装格式

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

image-20220816172239218.png

image-20220816172322334.png

02-3—多媒体元素和扩展API

image-20220816172342661.png

image-20220816172353900.png

引入video标签,src指向视听地址即可。有两种方式,如上图

用source方式,video标签里可以嵌套多个source,第一个成立不会去下一个,第一个不行去下一个,兜底作用。

image-20220816172405402.png

image-20220816172415032.png

play方法为异步。

image-20220816172425538.png

image-20220816182730164.png

 <audio> 和 <video> 元素 缺陷
     不支持直接播放hls、flv等视频格式;
     视频资源的请求和加载无法通过代码控制;
     - 分段加载(节约流量);
     - 清晰度无缝切换;
     - 精确预加载;

媒体源扩展API(Media Source Extensions)

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

image-20220816183508109.png

image-20220816214711436.png

image-20220816214731538.png 播放器播放流程

image-20220816214743115.png

image-20220816215810724.png

02-4—流媒体协议

image-20220816215821102.png

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

image-20220816220110167.png

image-20220816220120179.png

03—应用场景

点播的主要流程:视频上传到服务器,进行转码成码流,分发cpn进行拉流;直播与点播差不多但是实时性比较高;云游戏相当于一个端,程序运行在远端的pot上,生成视频流再传回来,根据命令执行不同的操作再传回前端;实时通信:e.g.视频会议;视频编辑:视频裁剪拼接,也可以在web端进行操作。

image-20220816220140374.png

04—总结与展望

image-20220816220201182.png