之前做的4份工作中3份都与音视频相关,于是整理了一下音视频开发相关的基础概念和知识点,作为总结和链接。
相关产品
电视机顶盒
数字视频变换盒(Set Top Box)简称STB,通常称作机顶盒或机上盒,是一个连接电视机与外部信号源的设备。信号可以来自有线电缆、卫星天线、宽带网络以及地面广播。
IPC
全称 IP Camera,即网络摄像机,由网络编码模块和模拟摄像机组合而成。网络编码模块将模拟摄像机采集到的模拟视频信号编码压缩成数字信号,从而可以直接接入网络交换及路由设备。
NVR
全称 Network Video Recorder,即网络视频录像机,是网络视频监控系统的存储转发部分,NVR与视频编码器或网络摄像机协同工作,完成视频的录像、存储及转发功能。
AI Camera
AI 摄像头,即以实现 AI 视觉应用为主要目的的摄像头。如 安防监控、面部识别、自动驾驶、运动跟踪 等场景。
摄像头
一个摄像头一般由 Sensor、镜头、外围电路、输出接口 这 4 个部分组成。
Image Sensor
摄像头传感器是摄像头模块的核心组件,负责捕捉光线并将其转换为电信号,进而生成图像。以下是摄像头传感器的一些基本概念和关键特性:
- 类型:摄像头传感器主要分为两种类型,电荷耦合器件(Charge-Coupled Device, CCD)和互补金属氧化物半导体(Complementary Metal-Oxide-Semiconductor, CMOS)。CCD传感器在图像质量上通常更优,但成本较高且能耗大;CMOS传感器则在成本和能耗上更有优势,是目前大多数摄像头中使用的类型。
- 分辨率:分辨率是指传感器能够捕捉的像素数量,通常以水平×垂直像素表示,如1920×1080,表示为200万像素。分辨率越高,图像的细节越丰富。
- 尺寸:传感器的物理尺寸影响其捕捉光线的能力,一般来说,传感器尺寸越大,单个像素的面积越大,越能在低光照条件下捕捉到更多的光线,从而提高图像质量。
- 像素尺寸:单个像素的尺寸对于图像质量同样至关重要。较大的像素尺寸通常意味着更好的光线收集能力和更低的噪声水平。
- 感光度(ISO):感光度是指传感器对光线的敏感程度。较高的ISO值可以在低光照条件下捕捉图像,但同时也可能增加图像的噪声。
- 动态范围:动态范围是指传感器能够捕捉的从最暗到最亮的细节的范围。高动态范围(HDR)能够更好地处理高对比度的场景。
- 色彩滤镜阵列:大多数传感器使用色彩滤镜阵列(Color Filter Array, CFA)来捕捉彩色图像。最常用的是拜耳(Bayer)阵列,2×2的方块中绿色2个,红色蓝色各一个。(由于滤光会带来亮度上的损失,有种MONO sensor,没有滤光片的处理,亮度会大大提高(有文章说可以提高四倍),但是这就感知不到颜色了,所以又叫黑白sensor。)
- 光谱响应曲线:描述摄像头传感器中的单个像素对不同波长光(从紫外到红外)的响应特性的图表。
- 全局快门与滚动快门:全局快门传感器能同时曝光所有像素,而滚动快门则是逐行或逐区域曝光。全局快门更适合捕捉快速运动的物体,因为它可以减少运动模糊和畸变。
- 光学防抖(OIS):一些摄像头传感器配备有光学稳定功能,通过物理移动传感器来补偿手抖或其他形式的相机移动,从而提高图像稳定性。
- 深度传感器:除了常规的RGB传感器外,一些摄像头还配备有深度传感器,能够测量物体的距离,常用于3D成像、增强现实(AR)和自动对焦。
- 快门:是摄像头中控制光线照射到传感器上时间的机制。分为机械快门和电子快门,快门速度指的是快门开启和关闭之间的时间间隔,通常以秒或分数秒表示(如1/60秒、1/1000秒)。快门速度越快,进入的光线越少,曝光时间越短。
镜头
镜头是摄像头系统中用于聚焦光线以形成图像的关键光学组件。以下是镜头的一些基本概念和特性:
- 焦距:焦距是镜头和成像传感器之间的距离,在该距离下,无限远处的物体能够清晰成像。它通常以毫米(mm)为单位,决定了视角的宽窄和放大倍数的大小。
- 光圈:光圈是镜头内用来控制通过镜头到达传感器的光线量的开口。光圈的大小用 f-stop(f值)表示,如f/2.8、f/4等,f值越小,光圈越大,允许更多光线进入。
- 视角:视角是指镜头能够覆盖的场景范围。广角镜头提供宽广的视角,适合风景摄影;而长焦镜头提供狭窄的视角,适合拍摄远处的物体。
- 对焦方式:镜头可以通过手动对焦或自动对焦(AF)来调整焦点。自动对焦系统可以进一步分为多种类型,如相位检测AF、对比度检测AF等。
- 光学防抖(OIS):一些镜头内置光学稳定系统,可以减少因手抖或其他相机移动引起的图像模糊。
- 镜头畸变:由于镜头的光学特性,图像可能会出现畸变,如桶形畸变(图像边缘向外弯曲)和枕形畸变(图像边缘向内弯曲)。
- 镜头涂层:现代镜头通常具有特殊的涂层,用于减少镜头表面反射,增加透光率,提高图像质量和减少耀斑和鬼影。
- 镜头结构:镜头由多个透镜元件组成,每个元件都有助于改善图像质量。镜头结构的复杂性通常与镜头的性能和成本成正比。
- 定焦与变焦:定焦镜头具有固定焦距,而变焦镜头允许在一定范围内调整焦距,提供更大的拍摄灵活性。
- 微距镜头:微距镜头专门设计用于拍摄极小物体的细节,能够实现极高的放大比例。
- 鱼眼镜头:鱼眼镜头提供极宽的视角,通常超过180度,能够产生独特的视觉效果。
- 镜头卡口:不同的相机品牌(如佳能、尼康、索尼等)可能使用不同的镜头卡口,镜头的选择需要考虑与相机的兼容性。
输出接口
此处的接口一般是摄像机和主机处理器之间的接口,从摄像头输出,输入到主机。
DVP
DVP(Digital Video Port)接口是一种数字视频接口标准,旨在传输和接收数字视频数据。它是一种相对简单和经济实惠的接口,广泛应用于低成本摄像头和一些消费电子产品中。DVP接口通常使用多个并行数据线来传输视频和控制信号,其中每个线路都负责传输特定的数据位。这种并行传输的方式可以实现较高的带宽和较低的延迟,适用于对实时性要求较高的应用场景。
DVP 接口使用的是LVDS(Low Voltage Differential Signaling)电气接口标准。LVDS(Low-Voltage Differential Signaling)低电压差分信号,是一种低功耗、低误码率、低串扰和低辐射的差分信号技术,这种传输技术可以达到155Mbps以上,LVDS技术的核心是采用极低的电压摆幅高速差动传输数据,可以实现点对点或一点对多点的连接,其传输介质可以是铜质的PCB连线,也可以是平衡电缆。
由于其成本较低,dvp接口在一些价格敏感的市场上得到了广泛应用。
MIPI
移动行业处理器接口(Mobile Industry Processor Interface),是MIPI联盟发起的为移动应用处理器制定的开放标准。MIPI 标准将手机内部的接口如摄像头、显示屏接口、射频/基带接口等标准化,从而减少手机设计的复杂程度和增加设计灵活性。
目前比较重要的接口有 DSI(Display Serial Interface)和 CSI(Camera Serial Interface)。MIPI CSI-2是移动和其他市场中使用最广泛的相机接口。它因其易用性和支持范围广泛的高性能应用(包括1080p、4K、8K及更高的视频)和高分辨率摄影而获得广泛采用。
MIPI CSI-2可以在MIPI Alliance的两个物理层中的任何一个上实施:MIPI C-PHY v2.0或 MIPI D-PHY v2.5。当前应用较广的物理层实现D-PHY居多。
MIPI 接口则采用了更先进的低电压差分信号传输技术。
D-PHY 接口一般是1/2/4 Lane,每个 Lane 走差分线对,是电流驱动型,单信号幅度一般是200mv,线对差分的幅度在400mv左右,布线要求是等长且成双成对,D-PHY是有单独的同步时钟来进行同步,最多是10根线,但解码接收要容易些;
D-PHY的物理层支持 HS(High Speed)和 LP(Low Power)两种工作模式。HS 模式:低压查分信号、功耗大、高速率(80M -1Gbps)、信号幅值(100mv-300mv)。LP 模式:单端信号、功耗小、速率低(< 10Mbps) 、信号幅值(0-1.2V)。
MIPI 接口具有较小的尺寸、较高的带宽和较低的功耗,它可以满足手机摄像头对于小尺寸、高画质和高帧率的要求。此外,mipi接口还支持一些高级功能,例如相位对焦、HDR(High Dynamic Range)和实时视频传输等。
HiSPi
为了支持更高带宽的传感器,Aptina Imaging推出了一款高速串行接口,称为HiSPi。 HiSPi接口可在1到4个通道工作,传输串行数据,外加一条时钟线。每个信号都是差分的,运行速度高达700 Mbps。为了使用传统的并行总线与ISP连接,莱迪思创建了HiSPi与并行格式接口的桥接。
音视频接口
视频输出
VGA
视频图形阵列(Video Graphics Array)是IBM于1987年提出的一个使用模拟信号的电脑显示标准(也被称为D-Sub接口)。VGA接口共有15针,分成3排,每排5个孔。 其中,除了2根NC(Not Connect)、3根显示数据总线和5个GND,比较重要的是3根RGB彩色分量信号和2根扫描同步信号 HSYNC 和 VSYNC 针。VGA接口中彩色分量采用RS343电平标准,峰值电压为1V。
DVI
数字视频接口(Digital Visual Interface)。是一种视频接口标准,设计的目的是用来传输未经压缩的数字化视频。广泛应用于LCD、数字投影机等显示设备上。此标准由显示业界数家领导厂商所组成 数字显示工作小组(Digital Display Working Group,DDWG)制订。DVI接口可以发送未压缩的数字视频数据到显示设备。本规格部分兼容于HDMI标准。
HDMI
高清多媒体接口(High Definition Multimedia Interface)是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设备。HDMI可以同时发送音频和视频信号,由于音频和视频信号采用同一条线材,大大简化系统线路的安装难度。
DP
DisplayPort(简称DP)是一个由PC及芯片制造商联盟开发,视频电子标准协会(VESA)标准化的数字式视频接口标准。该接口免认证、免授权金,主要用于视频源与显示器等设备的连接,并也支持携带音频、USB和其他形式的数据。
此接口的设计是为取代传统的VGA、DVI和FPD-Link(LVDS)接口。通过主动或被动适配器,该接口可与传统接口(如HDMI和DVI)向后兼容。
BT656/BT1120
BT.656和BT.1120都是由国际电信联盟(ITU)制定的视频传输标准,用于在专业视频设备之间传输数字视频信号。
BT.656 定义了一个并行的硬件接口用来传送一路 4:2:2 的ycbcr的数字视频流。该硬件接口由8根数据信号和1根时钟信号组成。
BT.1120针对的则是1080P分辨率的高清模拟视频的数字化传输规范。BT1120规范中定义一个图像帧应该包含1125总行数和1080有效行,而每行的有效像素则为1920个像素,并且能够支持逐行和隔行的24Hz、25Hz、30Hz、50Hz、60Hz等扫描频率。
音频接口
mic in
即麦克风输入,是连接麦克风录音使用的。
这个端口和 Line in的区别在于它有前置放大器,换言之麦克风本身输出功率小,因此必须要有一个外部的放大设备来放大音频信号。
line in
即线性输入。该端口主要用于连接电吉他、电子琴、合成器等外界设备的音频信号输出的录音,由于这些设备本身输出功率就比较大,因此需要连接到 Line in 端口录音,当然使用它们录音从某种程度上也可以被称为外部设备的 “内录”。一般使用的声卡越好,Line in里的噪音就会越低,录制效果也会比较好。
line out
用来输出未经放大芯片放大的模拟音频信号,一般连接耳机。
I2S
I2S(Inter—IC Sound)总线, 又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。
标准的I2S总线电缆是由3根串行导线组成的:1根是时分多路复用(简称TDM)数据线;1根是字选择线;1根是时钟线。
音视频处理
ISP
图像信号处理(Image Signal Processing)。主要用来对前端图像传感器输出信号处理的单元,以匹配不同厂商的图像传感器。
3A:
- AWB:自动白平衡(Auto White Balance)
- AE:自动曝光(Auto Exposure)
- AF:自动聚焦(Auto Focus)
ISOSpeedRatings:ISO速率
ExposureTime:曝光时间
ExposureBiasValue:曝光补偿
ExposureMode:曝光模式
MaxApertureValue:最大光圈值
WhiteBalance:白平衡
DigitalZoomRatio:数字缩放比例
Gain:增益
WDR:宽动态范围(Wide dynamic range)
LDC:镜头畸变校正(Lens distortion correction)
LCAC:镜头色差校准(Lens Chromatic Aberration Calibration)
CCM:色彩校正矩阵(Color Correction Matrix)
Gamma:主要是对亮度有影响
DRC:动态范围控制
CSC:色彩空间转换(Color Space Conversation)
- Saturation:饱和度
- Contrast:对比度
- Luminance:亮度
- Sharpness:锐度/清晰度
- Hue:色调/色度
Dehaze:图像去雾
LDCI:局部对比度增强
HLC:强光抑制(High Light Compensation)
BLC:背光补偿(Back Light Compensation)
音频
AEC:回声消除(Acoustic Echo Cancel)
ANR:背景噪声抑制(Automatic Noise Suppression)
AGC:自动增益控制(Automatic Gain Control)
编码
图像编码
YUV
YUV,是一种颜色编码方法。常使用在各个视频处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。由于色度信号的减少,YUYV格式在存储和传输视频数据时比未压缩的RGB格式更高效。
YUV 是编译 true-color 颜色空间(color space)的种类,Y’UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。
“Y”表示明亮度(Luminance或Luma),也就是灰阶值,“U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
常见的YUV格式:YUV422、YUV444、YUV411、YUV420、YUV410、YUY2、YUYV、YVYU、UYVY、AYUV、Y41P、Y411、Y211、IF09、IYUV、YV12、YVU9、YUV411、YUV420、NV12、NV21。
简介如下:
- YUV 4:4:4:每个Y分量都有自己的U和V分量,不进行色度子采样,因此色彩最丰富但数据量也最大。
- YUV 4:2:2:每两个Y分量共享一组U和V分量,色度水平方向减半,常见的格式包括YUYV、UYVY、YVYU等。
- YUV 4:2:0:每四个Y分量共享一组U和V分量,色度水平和垂直方向都减半,常见的格式包括I420、YV12、NV12、NV21等。
- I420(YUV 4:2:0 Planar):Y分量单独存放,UV分量交错存放,具体是先连续存放所有Y分量,然后是U分量,最后是V分量1。
- YV12:与I420类似,但U和V分量的顺序相反。
- NV12:Y分量单独存放,UV分量交错存放,但顺序是U在V之前。
- NV21:与NV12类似,但V在U之前。
- YUYV:属于YUV 4:2:2 Packed格式,Y0U0Y1V1…的顺序排列。
- UYVY:也属于YUV 4:2:2 Packed格式,但顺序是U0Y0V0Y1…
- YUV 422P:属于YUV 4:2:2 Planar格式,先存储所有Y分量,然后是U分量,最后是V分量。
RGB
RGB是一种常见的颜色编码格式,它采用红、绿、蓝三种颜色组成图像。RGB的R、G、B三个分量分别表示红色、绿色和蓝色的强度。RGB图像中的每个像素都需要三个值来表示颜色,因此它的数据排列方式是按照红、绿、蓝的顺序排列。
常见的RGB格式:
- RGB24:这是最简单的RGB格式,每个颜色通道使用8位,总共24位来表示一个像素。红、绿、蓝的顺序排列。
- RGBA32:在RGB24的基础上增加了一个8位的Alpha通道,用于透明度。
- ARGB32:与RGBA32类似,但Alpha通道在最前面。
- BGR24:与RGB24类似,但颜色通道的顺序是蓝、绿、红。
- BGRA32:与BGR24类似,但增加了Alpha通道。
- XRGB32:与RGB24类似,但增加了一个未使用的位(通常设置为0)。
- XBGR32:与XRGB32类似,但颜色通道的顺序是蓝、绿、红。
- RGB565:这是一种压缩的RGB格式,每个颜色通道使用5位表示红色和绿色,6位表示蓝色,总共16位。
- BGR565:与RGB565类似,但颜色通道的顺序是蓝、绿、红。
- RGB555:每个颜色通道使用5位表示,剩下1位不用,总共16位。
- BGR555:与RGB555类似,但颜色通道的顺序是蓝、绿、红。
- RGB4444:每个颜色通道使用4位,总共16位。
- BGR4444:与RGB4444类似,但颜色通道的顺序是蓝、绿、红。
- RGB332:每个颜色通道使用3位表示红色,3位表示绿色,2位表示蓝色,总共8位。
- BGR332:与RGB332类似,但颜色通道的顺序是蓝、绿、红。
- RGB16:这是一个通用的术语,可以指任何使用16位来表示RGB颜色的格式,如RGB565、RGB555、RGB4444等。
视频编码
M-JPEG
MJPEG(Motion Joint Photographic Experts Group)是视频压缩格式,其中每一帧图像都分别使用JPEG编码,不使用帧间编码,压缩率通常在20:1-50:1范围内。
JPEG(Joint Photographic Experts Group)是JPEG标准的产物,该标准由国际标准化组织(ISO)制订,是面向连续色调静止图像的一种压缩标准。 JPEG格式是最常用的图像文件格式,后缀名为.jpg或.jpeg。
H.264/AVC
H.264,又称为MPEG-4第10部分,高级视频编码(英语:MPEG-4 Part 10, Advanced Video Coding,缩写为MPEG-4 AVC)是一种面向块,基于运动补偿的视频编码标准 。它由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)共同开发。
MPEG - 动态图像专家组(Moving Pictures Experts Group)。该专家组建于1988年,专门负责为CD建立视频和音频标准,而成员都是为视频、音频及系统领域的技术专家。及后,他们成功将声音和影像的记录脱离了传统的模拟方式,建立了ISO/IEC1172压缩编码标准,并制定出MPEG-格式,令视听传播方面进入了数码化时代。
H.264是在MPEG-4技术的基础之上建立起来的,其编解码流程主要包括5个部分:帧间和帧内预测(Estimation)、变换(Transform)和反变换、量化(Quantization)和反量化、环路滤波(Loop Filter)、熵编码(Entropy Coding)。
编码帧
H.264/AVC采用了经典的运动补偿混合编码框架,共有 3 种编码图像:I 帧、P 帧和B 帧。与之前编码标准不同,H.264 新定义了 SP 帧和SI 帧,这两种新定义的帧可以在不同的图像质量、不同的传送速率之间切换,当信息丢失时,可以采用这种方法快速恢复。
I帧(Intra-coded frame):
- I帧是一种自包含的帧,它不依赖于其他帧进行解码。
- I帧使用空间编码技术,即只考虑帧内的数据来压缩信息。
- 由于I帧不依赖于其他帧,它们通常被称为关键帧,作为视频序列的参考点。
- I帧的大小通常比其他类型的帧要大,因为它们包含了完整的图像信息。
P帧(Predictive-coded frame):
- P帧是一种预测编码帧,它依赖于之前的I帧或P帧来减少数据量。
- P帧使用时间编码技术,通过比较当前帧和之前的帧之间的差异来压缩数据。
- 这种帧类型可以显著减少数据量,因为只有变化的部分需要被编码。
- P帧通常用于平滑的过渡场景,其中帧与帧之间的变化不大。
B帧(Bi-directional-coded frame):
- B帧是一种双向预测编码帧,它依赖于前后的I帧或P帧进行编码。
- B帧不仅考虑当前帧与之前帧的差异,还考虑与之后帧的差异,从而实现更高效的压缩。
- 由于B帧可以利用前后帧的信息,它们通常用于变化较多的场景,如快速运动或场景切换。
- B帧的解码顺序是在P帧之后,因为解码B帧需要用到P帧的信息。
SP帧(Switching Point frame):
- SP帧是一种特殊的P帧,它在编码过程中充当一个切换点。
- SP帧之前的帧使用一种编码模式,而SP帧之后的帧使用另一种编码模式。
- 这种切换通常是为了优化编码效率,例如,从使用B帧的双向预测切换到使用P帧的单向预测。
- SP帧可以减少编码器的复杂性,因为它避免了在编码过程中频繁切换编码模式。
SI帧(Switching Instantaneous frame):
- SI帧是一种特殊的I帧,它用于在编码过程中实现快速切换到新的编码模式。
- SI帧提供了一个新的参考点,使得编码器可以从当前状态快速切换到新的编码状态。
- SI帧可以用于快速响应场景变化,例如,当场景从静态突然变为动态时,使用SI帧可以快速适应这种变化。
GOP
GOP(Group of Pictures)是视频编码中的一个概念,指的是一系列连续的视频帧的集合。
GOP 的大小指的是 GOP 中帧的数量。较大的 GOP 可以提供更好的编码效率,但可能导致解码延迟增加。通过对 GOP 大小的设置,可以在编码效率和视频质量之间根据需求进行选择。
因为 GOP 通常也等于关键帧间隔(Keyframe Interval),所以GOP还影响视频流的错误恢复能力。较小的 GOP 可以提供更好的错误恢复能力,因为解码器可以在较短的时间内从错误中恢复。
通过合理设计GOP结构,可以平衡编码效率和解码性能。例如,增加B帧的比例可以提高编码效率,但可能会增加解码延迟。对于直播等场景,设置服务器缓存I帧和禁止生成B帧有利于直播的流畅。
帧率
- 帧率(Frame Rate)是指每秒钟显示的帧数,通常以FPS(Frames Per Second)为单位。
- 帧率决定了视频的流畅度。较高的帧率可以使视频看起来更加平滑,而较低的帧率可能导致视频出现卡顿或不连贯。
- 常见的帧率有24FPS(电影)、30FPS、60FPS等。高帧率视频(如60FPS或更高)可以提供更加流畅和逼真的观看体验。
- 帧率的选择取决于视频内容、播放设备和观众的期望。例如,动作片或体育赛事可能需要较高的帧率以捕捉快速运动。
码率
- 码率(Bit Rate)是指视频数据每秒钟传输的比特数,通常以kbps(千比特每秒)或Mbps(兆比特每秒)为单位。
- 码率决定了视频的质量和文件大小。较高的码率可以提供更清晰的视频质量,但同时也会增加文件大小和所需的存储空间。
- 码率的选择取决于视频的分辨率、压缩效率、网络带宽和存储容量等因素。例如,高清视频(1080p)可能需要较高的码率来保持清晰度。
- 码率还可以分为恒定码率(CBR)和可变码率(VBR)。CBR在视频播放过程中保持固定的码率,而VBR根据视频内容的复杂性动态调整码率。
码率类型
VBR, AVBR, QVBR, CVBR, QPMAP, FIXQP
Profile/Level
H.264解码器可以通过提取Profile和Level参数并确定解码器的功能是否支持这些参数,从而立即确定它是否能够解码特定的比特流。
Profile 将算法限制放在解码器上,决定解码器应该能够处理哪种解码工具,而 Level 将数据处理和存储限制放在解码器上,决定解码器应该能够存储、处理和输出多少数据到显示器。
x264编码器支持Baseline、Extented、Main、High、High10、High422、High444共7种profile参数设置。
H.265/HEVC
高效率视频编码(High Efficiency Video Coding,简称HEVC),又称为H.265和MPEG-H第2部分,是一种视频压缩标准,获视为是ITU-T H.264/MPEG-4 AVC标准的继任者。2004年开始由ISO/IEC Moving Picture Experts Group(MPEG)和ITU-T Video Coding Experts Group(VCEG)作为ISO/IEC 23008-2 MPEG-H Part 2或称作ITU-T H.265开始制定。第一版的HEVC/H.265视频压缩标准在2013年4月13日获接受为国际电信联盟(ITU-T)的正式标准。
压缩效率:HEVC获认为不仅提升影像质量,同时也能达到H.264/MPEG-4 AVC两倍之压缩率(等同于同样画面质量下比特率减少到了50%),可支持4K清晰度甚至到超高清电视(UHDTV),最高清晰度可达到8192×4320(8K清晰度)。
编码复杂性:虽然理论上,H265的在线视频、直播流会拥有更高的画质,相同画质下也能更节省带宽,但这是以增大编解码计算量为代价的。
专利和许可问题:H.265的推广受到了专利和许可问题的影响。一些内容提供商和平台可能因为专利费用和许可问题而选择继续使用H.264。
H.266/VVC
多功能视频编码(Versatile Video Coding),是最新的视频编码标准,提供了对SDR、HDR和360视频的优化。
VP9
由Google开发,是一个开源和免版税的视频编码格式,旨在提供比H.264更好的压缩效率。
AV1
是一个开源的视频编码格式,由联盟开放媒体(AOMedia)开发,旨在提供比VP9更高的压缩效率,适用于4K和8K视频。
WMV
由微软开发,包括多个版本如WMV 7, WMV 8, WMV 9/VC-1等。
AVS
中国的音频视频标准,包括AVS/AVS+/AVS2等。
音频编码
PCM (Pulse Code Modulation):是一种无压缩的音频编码格式,能够提供高质量的音频输出。
WAV:通常基于PCM编码,是一种无损音频格式,常用于存储未压缩的音频数据。
FLAC (Free Lossless Audio Codec):一种无损音频压缩编码格式,提供了与WAV相同的音质但文件更小。
Opus:一种开源、免版税的音频编码标准,适用于多种应用场景,包括实时通信和音乐流。
Speex:专为语音设计的开源音频编码格式,特别适合用于VoIP和语音通信。
Dolby Digital (AC-3):杜比实验室开发的多声道音频编码格式,广泛用于电影和家庭影院系统。
ALAC (Apple Lossless Audio Codec):苹果开发的无损音频编码格式,用于保持音频文件的原始质量。
G.711
G.711是一种由国际电信联盟(ITU-T)制定的音频编码方式,又称为ITU-T G.711。
它是国际电信联盟ITU-T定制出来的一套语音压缩标准,它代表了对数PCM(logarithmic pulse-code modulation)抽样标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 64Kbps 未压缩通道传输语音讯号。 起压缩率为1:2, 即把16位数据压缩成8位。G.711是主流的波形声音编解码器。
G.711 标准下主要有两种压缩算法。一种是µ-law algorithm (又称often u-law, ulaw, mu-law),主要运用于北美和日本;另一种是A-law algorithm,主要运用于欧洲和世界其他地区。其中,后者是特别设计用来方便计算机处理的。
G.726
G.726,是ITU-T定义的音频编码算法,1990年 CCITT(ITU前身)在G.721和G.723标准的基础上提出,可将64kbps的PCM信号转换为40kbps、32kbps、24kbps、16kbps的ADPCM信号。
ADPCM
自适应差分脉冲编码调制(Adaptive Differential Pulse Code Modulation)是预测编码的一种,在PCM基础上进行了改进,对实际信号与按其前一些信号而得的预测值间的差值信号进行编码。
话音信号样值的相关性,使差值信号的动态范围较话音样值本身的动态范围大大缩小,用较低码速也能得到足够精确的编码效果,在ADPCM中所用的量化间隔的大小还可按差值信号的统计结果自动适配,达到最佳量化,从而使因量化造成的失真亦最小,ADPCM方式已广泛应用于数字通信、卫星通信、数字话音插空设备及变速率编码器中。
MP3
(MPEG-1 Audio Layer III):一种有损压缩的音频编码格式,广泛用于音乐的在线播放和下载。
AAC
AAC(Advanced Audio Coding),中文名:高级音频编码。出现于1997年,基于MPEG-2的音频编码技术。由Fraunhofer IIS、杜比实验室、AT&T、索尼等公司共同开发,目的是取代MP3格式。
2000年,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的MPEG-2 AAC又称为MPEG-4 AAC。
封装格式
视频封装格式,也称为容器格式,是一种将已编码的视频数据和音频数据打包在一起以便于存储和传输的格式。它不仅包含媒体数据,还可能包括如字幕、章节、元数据等其他信息。
ES
原始流 (Elementary Streams) 是直接从编码器出来的数据流,可以是编码过的视频数据流(H.264,MJPEG 等),音频数据流(AAC),或其他编码数据流的统称。
TS
MPEG-TS (Transport Stream):常用于广播和流媒体传输,如数字电视和网络流。
FLV
FLV(Flash Video):广泛用于在线视频流,尽管Flash技术已逐渐被淘汰,但FLV文件格式仍然存在。
F4V
F4V:与FLV相似,但通常用于更高质量的视频内容,支持H.264视频编码。
MP4
MP4 (MPEG-4 Part 14):支持多种视频编码和音频编码,是目前最流行的视频容器格式之一,广泛应用于网络视频和移动设备。
MKV
MKV (Matroska Video):一个开放源代码和免费的容器格式,支持自由选择的视频和音频编码,且不包含任何版权费用。
OGG
OGG:一个自由开源的多媒体容器格式,支持多种音频和视频编码。
WebM
WebM:由Google支持的开放源代码视频容器格式,旨在提供网络友好的视频编码。
3GP
3GP:为3G移动设备设计的视频容器格式,常用于手机视频。
MXF
MXF (Material Exchange Format):专业视频和音频应用中使用的容器格式,常用于广播行业。
AVCHD
AVCHD:用于高清视频录像的格式,常用于一些摄像机和高清视频摄影机。
DVR-MS
DVR-MS:微软开发的用于数字视频录像的格式。
AVI
AVI (Audio Video Interleave):由微软开发,是一个较老的容器格式,支持多种编码方式,但文件体积通常较大。
WMV
WMV (Windows Media Video):由微软开发,主要用于Windows平台。
ASF
ASF (Advanced Systems Format):由微软开发,用于Windows媒体服务。
MOV
MOV (QuickTime File Format):由Apple开发,广泛用于视频编辑领域和Apple设备。
QuickTime
QuickTime:除了是Apple的多媒体框架外,它也是一种视频文件格式。
RM
RM (RealMedia):由RealNetworks开发,用于流媒体应用。
传输协议
SIP
会话初始协议(Session Initiation Protocol)是一种信令协议,用于控制多媒体通信会话的建立、修改和终止。用于多方多媒体通信的框架协议,由IETF(互联网工程任务组 - Internet Engineering Task Force)(IETF Datatracker)制定。RFC 3261 - SIP: Session Initiation Protocol (ietf.org)
SIP 是基于文本的协议,设计得非常灵活,可以支持语音、视频、即时消息和其他形式的多媒体通信。
以下是SIP协议的一些关键特点:
- 基于请求/响应: SIP 使用客户端-服务器模型,客户端发送请求,服务器响应请求。常见的请求类型包括INVITE(建立会话)、BYE(终止会话)、ACK(确认建立会话)等。
- 使用UDP和TCP: SIP 可以在用户数据报协议(UDP)和传输控制协议(TCP)上运行,UDP用于非连接的快速消息交换,而TCP用于需要可靠传输的场景。
- 支持代理和重定向: SIP 支持代理服务器,这些服务器可以转发请求、处理注册、管理路由等。SIP 还支持重定向,即服务器可以响应一个请求,告诉客户端应该向另一个地址发送请求。
- 支持注册和注销: SIP 允许用户代理(UA)向服务器注册其当前位置,这样其他用户就可以找到并发起通信请求。
- 支持会话描述: SIP 与SDP(Session Description Protocol,会话描述协议)配合使用,SDP用于描述会话的多媒体参数,如编解码器、带宽、IP地址等。
- 支持多种认证机制: SIP 支持多种认证机制,包括基于用户名和密码的简单认证、基于证书的认证等。
- 支持事务处理: SIP 定义了事务的概念,每个请求和响应对都被视为一个事务,确保了消息的顺序性和可靠性。
- 支持多种通信模式: SIP 不仅支持点对点通信,还支持多点通信,如会议和群聊。
- 可扩展性: SIP 通过扩展和选项提供了高度的可扩展性,允许开发者根据需要添加新的功能。
- 广泛使用: SIP 是VoIP(Voice over Internet Protocol,基于互联网协议的语音通信)和多媒体通信领域中广泛使用的协议之一。
SIP 协议的灵活性和可扩展性使其成为构建现代通信系统的理想选择,广泛应用于VoIP电话、视频会议、即时消息和在线游戏等场景。
SDP
会话描述协议(Session Description Protocol)。SDP旨在描述多媒体会话,用于会话通知、会话邀请和其他形式的多媒体会话发起。RFC 4566 - SDP: Session Description Protocol (ietf.org)
RTP
实时传输协议(Real-time Transport Protocol)。提供一个端到端的网络传输,用于实时数据传输应用,可用于传输语音、视频或模拟数据。RFC 3550 - RTP: A Transport Protocol for Real-Time Applications (ietf.org)
SRTP
安全实时传输协议(Secure Real-Time Transport Protocol),是RTP(实时传输协议)的扩展配置文件。
RTCP
RTP 控制协议(RTP Control Protocol)。它不负责数据的传输,而是提供传输质量的控制信息。它主要用于监控 RTP 数据传输的质量,并提供传输质量反馈,可以报告诸如数据包丢失、延迟、抖动和吞吐量等信息。
RTSP
实时流协议(Real Time Streaming Protocol)是一种应用程序级协议,用于控制具有实时属性的数据传输。RTSP提供了一个可扩展的框架,以支持实时数据(如音频和视频)的受控按需交付。数据源可以包括实时数据源和存储的剪辑。该协议旨在控制多个数据传输会话,提供选择传输通道(如UDP、多播UDP和TCP)的方法,并提供基于RTP(RFC 1889)选择传输机制的方法。
该标准由IETF制定,对应的协议是 RFC 2326 - Real Time Streaming Protocol (RTSP) (ietf.org)。
RTSP是用于控制音视频数据流的网络协议。它允许客户端发送控制命令给服务器,如播放、暂停、停止和录制。
RTSP可以与RTP和RTCP一起使用,以实现流媒体的控制和传输。
RTMP
实时消息传输协议(Real Time Messaging Protocol)。该协议基于TCP,是一个协议族,包括 RTMP 基本协议及 RTMPT/RTMPS/RTMPE 等多种变种。
RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。
SRT
安全可靠传输协议(Secure Reliable Transport)。是一种基于UDP协议的开源互联网传输协议,Haivision和Wowza合作成立SRT联盟,管理和支持SRT协议开源应用的组织,这个组织致力于促进视频流解决方案的互通性,以及推动视频产业先驱协作前进,实现低延时网络视频传输。
WebSocket
是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。WebSocket - Web API 接口参考 | MDN (mozilla.org)
WebRTC
网络实时通信(Web Real-Time Communications)。它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。
借助 WebRTC,您可以为应用添加基于开放标准运行的实时通信功能。它支持在对等设备之间发送视频、语音和通用数据,使开发者能够构建强大的语音和视频通信解决方案。这项技术适用于所有现代浏览器以及所有主要平台的原生客户端。WebRTC 采用的技术是开放网络标准,以常规 JavaScript API 的形式在所有主流浏览器中提供。对于原生客户端(例如 Android 和 iOS 应用),可以使用具备相同功能的库。WebRTC 项目属于开源项目,受 Apple、Google、Microsoft 和 Mozilla 等公司支持。
ONVIF
开放式网络视频接口论坛(Open Network Video Interface Forum)。是一个开放的行业论坛,为基于IP的物理安全产品的有效互操作性提供并促进标准化接口。
GB28181
国家标准 GB/T 28181《公共安全视频监控联网系统信息传输、交换、控制技术要求》。该标准规定了视频联网系统的联网结构、信令流程、协议接口以及相关安全性要求,适用于公共安全视频联网系统的方案设计、系统检测、验收以及与之相关的设备研发、生产。GB28181_| 国家标准全文公开系统
UPnP
通用即插即用(Universal Plug and Play)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议。该协议的目标是使家庭网络(数据共享、通信和娱乐)和公司网络中的各种设备能够相互无缝连接,并简化相关网络的实现。UPnP通过定义和发布基于开放、因特网通讯网协议标准的UPnP设备控制协议来实现这一目标。
HLS
(HTTP Live Streaming)是Apple的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个m3u(8)的索引文件,TS媒体分片文件和key加密串文件。
常用库
FFmpeg
用于录制、转换和流式传输音频和视频的完整的跨平台解决方案。
OpenCV
开放计算机视觉库(Open Computer Vision Library),是世界上最大的开源计算机视觉库,由非盈利组织开源视觉基金会运营。
LIVE555
一个完整的 RTSP 服务器应用程序。用于基于标准的 RTP/RTCP/RTSP/SIP 多媒体流的源代码库,适用于嵌入式和/或低成本流应用。
ZLMediaKit
一个基于C++11的高性能运营级流媒体服务框架。
特性:
- 基于 C++11 开发,避免使用裸指针,代码稳定可靠,性能优越。
- 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支持协议互转。
- 使用多路复用/多线程/异步网络 IO 模式开发,并发性能优越,支持海量客户端连接。
- 代码经过长期大量的稳定性、性能测试,已经在线上商用验证已久。
- 支持 linux、macos、ios、android、windows 全平台。
- 支持 x86、arm、risc-v、mips、龙芯、申威等指令集平台。
- 支持画面秒开、极低延时(500 毫秒内,最低可达 100 毫秒)。
- 提供完善的标准C API open in new window,可以作 SDK 用,或供其他语言调用。
- 提供完整的MediaServer open in new window服务器,可以免开发直接部署为商用服务器。
- 提供完善的restful api以及web hook,支持丰富的业务逻辑。
- 打通了视频监控协议栈与直播协议栈,对 RTSP/RTMP 支持都很完善。
- 全面支持 H265/H264/AAC/G711/OPUS。
- 功能完善,支持集群、按需转协议、按需推拉流、先播后推、断连续推等功能。
- 极致性能,单机 10W 级别播放器,100Gb/s 级别 io 带宽能力。
- 全面支持 ipv6 网络
- 独家特性:
SRS
SRS(Simple Realtime Server) 是一个简单高效的实时视频服务器,支持 RTMP、WebRTC、HLS、HTTP-FLV、SRT 等多种实时流媒体协议。
SRS 的主要特点包括:
- 简单:基于协程技术,无异步回调难以维护的问题,SRS支持云原生标准(Docker镜像、K8s部署、可观测性日志和监控指标等),提供Oryx无门槛应用。
- 实时:SRS聚焦于实时流媒体网关,实现实时流媒体协议的接入和互相转换以及不断迭代,比如RTMP、HLS、WebRTC、HTTP-FLV和SRT等。
- 高效:SRS是高性能流媒体服务器,是同类服务器的2~3倍性能,提供非常完整的概念和一致性设计,实现高效的流媒体应用。
GStreamer
GStreamer是一个开源的多媒体框架,用于创建各种类型的媒体处理管道。它支持音频、视频、图像、动画、文本、音频效果、视频效果、音频和视频编解码器、图像处理、数据流处理、文件格式转换等多种功能。
GStreamer的核心是一个插件系统,通过各种插件来实现不同的功能。这些插件可以是编解码器、格式转换器、效果器等。用户可以根据自己的需要,选择和组合不同的插件,构建出满足特定需求的媒体处理管道。
GStreamer的主要特点包括:
- 模块化设计:GStreamer采用模块化设计,易于扩展和定制。
- 跨平台:GStreamer支持多种操作系统,包括Linux、Windows、macOS等。
- 可扩展性:GStreamer的插件系统使得其功能可以不断扩展。
- 多线程支持:GStreamer支持多线程,可以充分利用多核处理器的性能。
- 灵活的管道模型:GStreamer的管道模型非常灵活,可以轻松实现复杂的媒体处理流程。
GStreamer广泛应用于视频编辑、音频处理、视频会议、流媒体服务器、嵌入式设备等领域。许多知名的开源项目如PulseAudio、Shotcut、VLC等都使用了GStreamer作为其多媒体处理的核心。
SDL
SDL(Simple DirectMedia Layer)是一个跨平台的开发库,旨在提供一种简单的方式来访问音频、键盘、鼠标、操纵杆和图形硬件。它常用于视频游戏开发,因为它可以处理许多底层的系统细节,让开发者能够专注于游戏逻辑和性能。
SDL的主要特点包括:
跨平台性:SDL可以在多种操作系统上运行,包括Windows、macOS、Linux、iOS、Android等。
多媒体支持:SDL提供了对音频、视频和输入设备的访问,包括键盘、鼠标和游戏控制器。
图形渲染:SDL支持多种图形渲染方式,包括2D图形和3D图形(通过OpenGL等API)。
事件处理:SDL提供了一个事件处理系统,可以处理键盘输入、鼠标移动、窗口事件等。
文件读写:SDL提供了文件读写功能,可以方便地加载和保存数据。
线程和定时器:SDL支持多线程和定时器,可以用于实现多任务处理和定时事件。
网络通信:SDL提供了基本的网络通信支持,允许应用程序进行网络连接和数据传输。
易于使用:SDL的API设计简单直观,易于学习和使用。
社区支持:SDL有着活跃的社区,提供大量的教程、示例代码和第三方库。
SDL的工作流程通常包括以下几个步骤:
- 初始化:在程序开始时初始化SDL库,设置所需的功能模块,如视频、音频等。
- 创建窗口:使用SDL创建一个窗口,这是显示图形内容的地方。
- 事件循环:设置一个事件循环来处理用户的输入和系统事件。
- 渲染:在窗口上绘制图形内容,可以是2D图形或通过OpenGL等API进行3D渲染。
- 音频处理:加载和播放音频文件,处理音频事件。
- 清理:在程序结束时,释放所有资源并关闭SDL。
SDL非常适合快速原型开发和小型项目,因为它提供了一个简单的方式来处理多媒体和输入设备。同时,SDL也可以作为更复杂图形库(如OpenGL)的封装,简化底层细节的处理。
OpenGL
OpenGL(Open Graphics Library)是一个跨平台的图形API,它提供了一套丰富的函数库,用于渲染2D和3D图形。OpenGL被广泛应用于游戏开发、科学可视化、数据可视化、CAD软件以及虚拟实境等领域。
OpenGL的主要特点包括:
跨平台性:OpenGL可以在多种操作系统上运行,包括Windows、macOS、Linux等。
硬件加速:OpenGL可以利用图形处理单元(GPU)的硬件加速能力,提高图形渲染的效率。
可编程性:OpenGL提供了灵活的着色器编程接口,允许开发者编写自定义的顶点着色器和片段着色器,实现复杂的图形效果。
兼容性:OpenGL支持多种图形硬件,并且向后兼容,这意味着旧的OpenGL程序可以在新的硬件上运行。
实时渲染:OpenGL非常适合实时渲染,例如在游戏和模拟中。
社区支持:OpenGL有着庞大的开发者社区,提供大量的教程、工具和资源。
OpenGL的工作流程通常包括以下几个步骤:
- 初始化:设置OpenGL环境,包括创建窗口和上下文。
- 绘制命令:使用OpenGL函数来指定绘制命令,如绘制点、线、多边形等。
- 着色器编程:编写顶点着色器和片段着色器,用于控制顶点变换和像素颜色。
- 缓冲区管理:管理顶点数据和其他图形资源的缓冲区。
- 渲染循环:在应用程序的主循环中,处理输入、更新场景状态,并调用OpenGL命令进行渲染。
GLFW
GLFW(Graphics Library Framework)是一个开源的、跨平台的库,用于创建窗口和上下文,它被设计用来支持OpenGL、Vulkan等图形API。GLFW提供了一个简单、易用的接口,帮助开发者创建窗口、处理输入事件、管理视频模式和渲染上下文。
GLFW的主要特点包括:
跨平台性:GLFW可以在多种操作系统上运行,包括Windows、macOS和Linux。
OpenGL支持:GLFW与OpenGL紧密集成,可以轻松创建OpenGL上下文。
窗口管理:GLFW提供了创建和管理窗口的功能,包括设置窗口大小、标题和图标。
输入处理:GLFW可以处理键盘、鼠标和其他输入设备的事件。
视频模式:GLFW允许查询和切换显示器的视频模式。
上下文管理:GLFW可以创建和管理图形上下文,支持现代OpenGL特性。
易于使用:GLFW的API设计简洁,易于学习和使用。
文档和社区支持:GLFW有详细的文档和活跃的社区,为开发者提供支持。
使用GLFW的工作流程通常包括以下步骤:
初始化GLFW:在程序开始时调用
glfwInit
函数初始化GLFW库。创建窗口:使用
glfwCreateWindow
函数创建一个窗口对象。创建上下文:在创建窗口后,GLFW会自动创建一个OpenGL或Vulkan上下文。
设置回调函数:为窗口设置回调函数,以处理键盘、鼠标等输入事件。
进入主循环:在主循环中,处理窗口事件、渲染图形内容,并交换前后缓冲区。
清理资源:在程序结束时,销毁窗口和清理GLFW资源。
GLFW非常适合用于快速开发和原型制作,特别是当需要集成OpenGL或其他图形API时。由于其简洁的API和强大的功能,GLFW成为了图形编程和游戏开发中广泛使用的库之一。
OpenMAX
OpenMAX™ 是一个无需授权、跨平台的软件抽象层,以 C - API 的形式提供,支持跨多个操作系统和芯片平台开发、集成和编程加速多媒体组件,提供全面的流媒体编解码器和应用程序可移植性。
OpenMAX 是 Khronos 制定的API,Khronos 也是 OpenGL 的制定者,同时在着手制定的标准/规范还有 OpenGL es,OpenVG,OpenEL 等等,其中大多都是针对手持设备/嵌入式设备的。
常用框架
V4L2
V4L2(Video4Linux2)是Linux操作系统中的一个视频捕获API(应用程序编程接口),它允许应用程序与各种视频设备进行交互,如摄像头、电视调谐器、视频编码器和解码器等。V4L2是Video4Linux的后继版本,提供了一系列改进和扩展的功能,以支持现代视频设备。
以下是 V4L2 的一些关键特性和概念:
- 设备节点:在Linux系统中,视频设备通常通过设备文件暴露给用户空间,如
/dev/video0
、/dev/video1
等。 - I/O方法:V4L2支持多种I/O方法,包括内存映射I/O、用户空间缓冲区I/O和DMA(直接内存访问)。
- 缓冲区管理:V4L2使用缓冲区队列来管理视频数据的捕获和播放。应用程序可以请求一组缓冲区,并在这些缓冲区中交换数据。
- 格式协商:V4L2允许应用程序与设备协商视频的格式和属性,如分辨率、像素格式、帧率等。
- 控制接口:V4L2提供了一个控制接口,允许应用程序查询和修改设备的各种设置,如亮度、对比度、色调等。
- 扩展支持:V4L2支持多种扩展,如VBI(垂直消隐间隔)捕获、Sliced VBI、音频捕获、JPEG压缩等。
- 兼容性:V4L2旨在与旧版的Video4Linux兼容,使得旧的驱动和应用程序能够在V4L2框架下运行。
- 多设备支持:V4L2能够支持多个视频设备,并且可以同时对它们进行操作。
- 广播类型:V4L2支持多种广播类型,包括PAL、SECAM、NTSC等。
- 驱动程序:有大量的V4L2兼容驱动程序,支持各种USB摄像头、视频捕获卡和其他视频设备。
V4L2是Linux系统中进行视频捕获和处理的基础,广泛应用于视频监控、视频会议、流媒体服务器、IP摄像头等场景。通过V4L2,开发者可以编写高效的视频捕获应用程序,而无需关心底层硬件的实现细节。