首页 > 其他分享 >多媒体基础

多媒体基础

时间:2024-03-21 10:56:04浏览次数:21  
标签:视频 封装 编码 基础 fps 格式 多媒体 播放

零、参考资料

1. 多媒体前端书册

2. video 标签能干些什么

一、视频

视频的本质很简单,就是快速播放的图片

(一)帧

  • 帧:一帧即一幅静止的图像
  • 帧率(fps):每秒显示的图片数。帧率越大,画面越流畅;帧率越小,画面越卡
  • 12 fps:由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10-12帧的时候,就会认为是连贯的
  • 24 fps:有声电影的拍摄及播放帧率均为每秒24帧,对一般人而言已算可接受
  • 30 fps:早期的高动态电子游戏,帧率少于每秒30帧的话就会显得不连贯,这是因为没有动态模糊使流畅度降低
  • 60 fps:在实际体验中,60帧相对于30帧有着更好的体验
  • 85 fps:一般而言,大脑处理视频的极限

(二)源文件

  • 像素是用来描述图片的最基础单位,那我们用什么来描述像素呢?RGB 通道。每一个字母代表一个通道,而每一个通道其值是 0~255,共 256 种可能,刚好 1 个字节(B),所以一像素的大小就是 3B
  • 分辨率 980 * 720 大小的图片需要 980 * 720 * 3B 的空间,大约在 2M 左右
  • 一个帧率为 30 (fps) 的正常视频,即 1s 内播放 30 张图片。那么如果这个视频时长为 1 分钟,就需要 30 * 60 * 2M 的空间,大约为 3.5G - 恐怖如斯
这就是原始的 YUV、RGB 格式的视频源文件

(三)编码

一个 1 min 的视频源文件就这么大,那还怎么愉快地看小视频呢?所以首要的任务就是压缩。即使编码,视频的编码主要有两种:帧内编码和帧间编码
  • 帧内编码:帧内编码就是压缩图片,比如把所有图片都压缩成 jpeg(原理是利用人眼对亮度的敏感程度要高于对色彩的敏感程度)。通常这一步之后就已经能减小视频 90% 的大小
  • 帧间编码:帧间编码是利用帧与帧之间的相关性,比如相邻两张图片中,只有某些位置上的像素点发生了变化,那么第二张图其实就没必要了,在第二张图的位置只需要存储变化 (diff) 即可

(四)编码格式

编码的思路有了,那么怎么实现就看各家组织、公司了,具体详见 常用编解码器 对于 FE 来说,目前最流行、广泛使用的是 H.264 编码规范

(五)封装格式

我们常见的视频文件的后缀是 MP4/AVI/FLV 这种,准确讲,这些是封装格式,是一种数据容器,数据按照编码格式进行编码(转换),然后封到容器中去,就能形成我们常见视频文件。当然,这种视频容器不仅可以包含视频编码,也可以包含音频编码,以及一些同步信息、字幕和元数据(如标题)等

二、音频

音频的基础知识点如编码等和视频差不多,也是从源文件到编码,再到封装,目前使用最广泛的音频编码格式为 AAC

三、多媒体的消费

其实就是播放器对音、视频的播放

(一)封装与解包

  • 封装(remux): 把编码封装成文件的步骤
  • 解包(demux): 把文件拆解成编码的步骤
播放器能否播放一个音、视频,关键取决于其编码格式,但是封装格式也无法被忽略,比如 H.264 的二进制文件,分别封装成 MP4 和 FLV 文件,浏览器能直接播放前者,需要另外安装插件才能播放后者

(二)Media Source Extensions API(MSE)

这个 API 提供了实现无插件且基于 Web 的流媒体的功能。使用 MSE,媒体串流能够通过 JavaScript 创建,并且能通过使用 <audio> 和 <video> 元素进行播放
换句话说,就是通过网络,浏览器不一定需要再拿到整个视频文件了,直接传输编码后的二进制流,就能播放了,当然,要看浏览器支持哪些编码标准 不过现阶段这个有点占用客户机器的资源,<audio> 和 <video> 标签直接下载多媒体资源更好一点

四、直播

直播讲究一个实时,肯定不能等视频完全下载完再播放

(一)流媒体协议

每一个在网络上观看的视频或音频媒体都是依靠特定的网络协议进行数据传输,基本分布在会话层(Session Layer)、表示层(Presentation Layer)、应用层(Application Layer) 大部分底层协议内容前端无需感知,直播场景下接触较多的上层协议有 RTMP、RTP、HLS、DASH 等
常用流媒体协议如下 4 种:
协议 rtmp http-flv hls dash
传输方式 tcp   http http http
视频封装格式 flv、tag flv Ts文件 Mp4、3gp、webm 切片
延时
数据分段 连续流 连续流 切片文件 切片文件
HTML5 播放 不支持 可通过 html5 解包播放(flv.js) 原生支持、或通过(hls.js) 直接播放或者 HTML5 解封包播放

 

(二)视频传输

所以,目前对于直播有两种解决方案:
  • 切片文件:把视频分割成 3 ~ 10s 的视频片段,一段段下载播放,兼容性好,适合视频点播
  • 连续流:把视频做成流,按数据帧传输、播放(本质就是更小的分段),时效性好,适合直播
但是这两个方案其实只解决了传输的问题,本质上还是不停的播放视频文件,因此这里就会产生一个用户体验的问题

(三)视频播放(消费)

随着浏览器和协议的不断发展,视频消费(技术层面)的方式也越来越方便
  • 比如 HLS 协议和浏览器配合,使得 <video> 标签能够直接消费 m3u8 地址(链接)
  • 比如 WebRTC 技术的出现,就能够直接传输多媒体数据流,然后在客户端直接处理这个数据流,跳过 封装/解包 过程
  • MSE

标签:视频,封装,编码,基础,fps,格式,多媒体,播放
From: https://www.cnblogs.com/cc-freiheit/p/18082346

相关文章

  • Moment:又一个开源的时间序列基础模型
    时间序列分析跨越了一系列广泛的应用,从天气预报到通过心电图进行健康监测。但是由于缺乏大型且整合的公开时间序列数据,所以在时间序列数据上预训练大型模型具有挑战性。为了应对这些挑战,MOMENT团队整理了一个庞大而多样的公共时间序列集合,作者将其称为Time-seriesPile。代码地址......
  • C++基础入门(命名空间,函数,引用)
    文章目录前言1,命名空间2,函数函数重载缺省参数内联函数3,引用尾声前言欢迎来到这篇关于C++的入门博客!C++是一门强大而又广泛应用的编程语言,作为一门面向对象的编程语言,C++可以让你更好地组织和管理代码,提高代码的重用性和可维护性。它广泛应用于游戏开发、嵌入式系......
  • 【Mysql数据库基础01】去重、连接字符、模糊查询、通配符、检索表的结构信息
    去重、连接字符、模糊查询、通配符、检索表的结构信息1去重distinct2连接字符函数concat(str1,str2,...)3模糊查询3.1like包含3.2通配符3.3betweenand3.4in3.5isnull4安全等于<=>5检索表的结构信息desc6课后练习1去重distinct使用DISTINCT关......
  • 零基础如何自学Python
    1,什么是Python人与人的交流需要人类语言,人与计算机交流(控制计算机)需要计算机语言。Python是众多计算机语言中的一种,每种计算机语言都有它自己的优势。对于初学者来说,Python是最容易上手,也是一门功能强大的计算机语言。2,为什么要学Python对于专业人士,也就是将来想从事......
  • 零基础入门Python全套教程(无偿分享,学完可就业!)
    Python在2017年世界脚本语言排行榜中排名第1,也是多领域首选语言,作为一种高级程序语言,其核心设计哲学是代码可读性和语法,能够让程序员用很少的代码来表达自己的想法。现在Python作为时下越来越流行的编程语言,成为越来越多的人的青睐,越来越多的人开始学习Python,而对于小白来......
  • 【JAVA------基础篇】
    java基础1.JDKJDK:javadevelopmentkitJRE:javaruntimeenvironmentJDK包含JREjava跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。当你想要在Linux系统下运行,则需要安装对应的虚拟机,及对应的jdk版本,而对应的jdk版本中的jre有对......
  • JAVA------基础篇
    java基础1.JDKJDK:javadevelopmentkitJRE:javaruntimeenvironmentJDK包含JREjava跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。当你想要在Linux系统下运行,则需要安装对应的虚拟机,及对应的jdk版本,而对应的jdk版本中的jre有对......
  • Java-Java基础学习(3)-多线程(1)
    Java-Java基础学习(4)-多线程(1)3.多线程在Java中,多线程主要的实现方式有四种:继承Thread类、实现Runnable接口、实现Callable接口经过FutureTask包装器来建立Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。3.1.四种创建方式Threadclass==>......
  • 电路分析基础----电压源与电流源
    1电压源定义:两端电压总是保持定值,与流过它的电流无关1.1分析对于如下电路:当\(R\to0\)(短路)时,\(i=\infty\)(会烧坏电压源)当\(R\to\infty\)(开路)时,\(i=0\)1.2结论①电压源两端电压由电源本身决定,与外电路无关,与流过的电流无关②通过电压源的电流由电压源和外电路共同决......
  • 9.JavaWeb& javaScript基础
    目录导语:一、JavaWeb概述二、JavaScript基础概念:功能:1.基本语法(1)与html结合方式(2)注释(3)数据类型(4)变量(5)运算符(6)流程控制语句:(7)JS特殊语法:案例:99乘法表2.基本对象(1)Function:函数(方法)对象(2)Array:数组对象(3)Boolean(4)Date:日期对象(5)Math:数学对象(6)Number(7)String(8......