深入浅出web多媒体|青训营笔记

344 阅读3分钟

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

写在前面

近几年抖音,快手,B站等音视频APP走进千家万户,丰富我们的娱乐生活,音视频技术的发展和学习也掀起来一波新的热潮,在业务需求的推动下,Web产品的音视频技术也是得到了很大的发展和突破。对于很多人来说,web多媒体最直观的我想就是:看某个视频网站,结果发现视频下载不了。这时候拿出你自以为豪的「抓包技术」,结果发现一堆ts文件。这篇文章,就是揭开web多媒体神秘的面纱。

音视频基础知识

假设8bit表示一个子像素,清晰度为1280720,频率25fps,时长60s,未压缩视频大小=8bit312807202560=3.9GB,经过H264压缩后视频大小为11MB。

具体来说:我们平时的三原色「红绿蓝」分别取值范围从0~255一共有256几2^8种结果, 然而所有的rgb则有2^24种

浏览器提供的原生多媒体能力

MDN: The  <video>  HTML element embeds a media player which supports video playback into the document. You can use <video> for audio content as well, but the <audio> element may provide a more appropriate user experience.

H5提供了video标签,众多新的媒体技术使得原本的王者flash逐步退出历史舞台。除了少部分的游戏会使用flash以外,很多web的flash应用逐渐被取代。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>多媒体能力</title>
</head>

<body>
    <video autoplay controls width="600" height="600">
        <source src="video.mp4">
    </video>
    <audio controls>
        <source src="audio.mp3">
    </audio>
</body>

</html>

从而支持

  • 请求音视频资源,然后对音视频资源进行解码,渲染播放
  • 支持视频格式:mp4、mp3

而 和 元素 缺陷有比如说

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

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

  • 分段加载(节约流量)

  • 清晰度无缝切换

  • 精确预加载

媒体源扩展API(Media Source Extensions)

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

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

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

我们平时所熟知的视频网站都需要自研播放器

image.png

流媒体协议

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

应用场景

image.png

总结展望

image.png

发现现在很多前端在研究serverless,这是往后,那么往前,可能就是webgl、媒体技术、webassembly等,例如webgl,我们熟知的前端AI、VR、AR、游戏等都离不开它。光shader就足够复杂,它可以用来做很多高级的特效、动画等可视化的东西,涉及到程序语言知识、数学知识、图形学知识,甚至需要一定审美。所以,学无止境,前端技术的天花板一直就很高。

参考

  1. blog.csdn.net/Tencent_TEG…
  2. juejin.cn/post/713247…
  3. developer.mozilla.org/en-US/docs/…