音视频基础知识点

视频相关概念

流媒体协议

流媒体协议是指将一连串的媒体数据压缩后,以流的方式在网络中分段传送,实现在网络上实时传输影音以供观赏的一种技术。例如HTTP, RTMP, HLS等。

容器

一般吧MP4, flv, mov等称之为容器,也就是在这些常用格式中,可以存放多路音视频文件。例如在MP4中,就可以存放一路视频流,多路音频流和多路字幕流。

js 复制代码
// 使用ffmpeg查看其支持的容器格式
ffmpeg -formats
// 使用ffmpeg查看是否支持某个格式(例如FLV)
ffmpeg -codecs | grep FLV

编码格式

音视频文件需要经过编码压缩,才能保存为文件。不同的编码格式有不同的压缩率,导致不同的清晰度和文件大小。常见的视频编码格式h264, h265, MPEG-4等。常见的音频编码格式mp3, aac等。

js 复制代码
// 查看ffmpeg支持的音视频编码格式
ffmpeg -codecs

视频解码流程

解协议 的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。流媒体协议主要包括RTMP,HLS以及HTTP等。比如一个HTTP的视频链接,http://111.229.14.189/file/1.mp4, 经过解协议之后,会得到1.mp4封装格式的视频

解封装:解封装就是将音频码流和视频码流从1.mp4文件中分离出来。1.MP4文件经过解封装后,会得到编码格式为h264的视频压缩数据和编码格式为aac的音频压缩数据。

音视频解码 :将压缩的音视频数据转化原始的数据,视频的原始数据就是一帧帧的图像,音频的原始数据就是YUM数据

视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

音频相关

音频数据量化指标

音频原始数据格式PCM(纯音频数据),WAV(存在音频格式头,基本也是原始数据)

  1. 采样大小: 一个采样用多少bit存放,通常是16bit
  2. 采样率: 每秒采样的频率, 一般有8k, 16k, 32, 44.1k, 48k(接近原声)
  3. 声道数: 单声道,双声道,立体声(多声道)

原始音频数据的大小 = 采样大小 * 采样率 * 声道数 * 时间

原始音频数据非常大,需要进行压缩

音频压缩

  1. 有损压缩(去除冗余信息,例如人听不到的频率或者被遮蔽的声音)
  2. 无损压缩(无损加解码,例如哈夫曼编码)

ffmpeg录制音频

js 复制代码
// 查找设备麦克风名字
ffmpeg -list_devices true -f dshow -i dummy
// 录制音频 ctrlc结束
ffmpeg -f dshow -i audio="audio_name" -acodec aac desktop.aac
  • -f: 使用的插件库,windows下使用dshow
  • -i: 表示输入设备,"audio_name"使用本机的麦克风名称
  • -acodec: 音频格式

视频相关

像素

每个像素是包括三个发光二极管,由三个二极管不同的亮度展示各种颜色

常用像素的色值有rgb(24位),rgba(32位)

PPI: 屏幕每英寸(等于2.54厘米)的像素点数,PPI > 300时达到视网膜级别

视频数据量化指标

帧率(fps): 每秒采集或播放图像的个数 (浏览器fps正常为60)

屏幕分辨率: 屏幕分辨率表示显示器或整个屏幕中有多少像素(例如1920 * 1080标识横向1920个像素点,纵向1080个像素点。常见的横纵像素比例是16 / 9 或者4 / 3)

未编码的视频数据(码流) = fps * 色值位长(rgb为3B, rgba为4B) * 屏幕分辨率

原始音频数据非常大,例如正常屏幕和帧率的rgb码流: 1920 * 1080 * 3 * 30 = 186624000B = 186.6M

相关推荐
翻滚吧键盘26 分钟前
{{ }}和v-on:click
前端·vue.js
上单带刀不带妹32 分钟前
手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
开发语言·前端·javascript·vue.js·前端框架
杨进军1 小时前
React 创建根节点 createRoot
前端·react.js·前端框架
ModyQyW1 小时前
用 AI 驱动 wot-design-uni 开发小程序
前端·uni-app
说码解字1 小时前
Kotlin lazy 委托的底层实现原理
前端
爱分享的程序员2 小时前
前端面试专栏-算法篇:18. 查找算法(二分查找、哈希查找)
前端·javascript·node.js
翻滚吧键盘2 小时前
vue 条件渲染(v-if v-else-if v-else v-show)
前端·javascript·vue.js
vim怎么退出2 小时前
万字长文带你了解微前端架构
前端·微服务·前端框架
你这个年龄怎么睡得着的2 小时前
为什么 JavaScript 中 'str' 不是对象,却能调用方法?
前端·javascript·面试
Java水解2 小时前
前端常用单位em/px/rem/vh/vm到底有什么区别?
前端