音视频多媒体编解码器基础-codec

如果要从事编解码多媒体的工作,需要准备哪些更为基础的内容,这里帮你总结完。

因为数据类型不同所以编解码算法不同,分为图像、视频和音频三大类;因为流程不同,可以分为编码和解码两部分;因为编码器实现不同,分为硬编码和软编码;因为编解码硬件位置不同,可以分为片内、片外和独立编解码模块三类;软件常用的框架ffmpeg。

音视频编解码(Audio-Video Coding)是指将音频和视频信号进行压缩编码以及解码还原的过程。

算法通过去除图像中的冗余信息,实现图像的压缩存储和传输。在解码过程中,这些算法将压缩的图像数据恢复为原始的图像信号。

编解码的应用流程:先对原始图像进行压缩编码,然后进行存储和传输,最后在使用或者后处理时再进行解码。

0. 基本原理和概念

音视频编解码的基本原理是利用人的感知系统特性的特点,对音视频信号进行数据压缩,从而便于传输和存储。

编码过程中是将信号转换为数字形式,并应用压缩算法来减少数据量。

解码是编码的逆过程,是将压缩后的数据重新恢复为原始的音视频信号。

编码的一般流程为:采样、量化、压缩、打包。

解码的一般流程为:解包、解码、反量化和数模转换,最终恢复为模拟音视频信号。

编码器压缩两要素:图像相关性、人眼敏感性。

软编码和硬编码

硬编码是指利用显卡GPU、专用的DSP、FPGA、ASIC芯片等硬件进行编码,性能高;软编码是使用CPU进行编码,软件实现直接、简单,参数调整方便,升级易,但性能较硬编码低。

H264软件编码器有JM官方编码实现X264,提供了丰富的视频编码函数库。

H264硬件编码器IP比如LC1860就有芯原Hautro H1,可以直接通过控制硬件实现硬编码。

H264图像序列实现帧间预测

每个序列以一个关键帧(I帧)开始,随后跟着若干个参考前面的帧生成的差别帧(P帧),以及参考前后的帧生成的差别帧(B帧),这种减少I帧数量的方式进一步提高了压缩效率。

以下是音视频编解码的具体过程:

目的 音频 视频
采样 将模拟信号通过采样转换成数字信号 连续的模拟音频信号转换为离散的数字信号 连续的模拟视频信号转换为离散的数字信号
量化 减小数据量 将采样后的音频信号量化 对采样后的视频信号量化,再进行预处理,包括去噪、滤波、颜色空间转换等
压缩 将信号表示为更紧凑的形式 对量化后的音频信号进行编码 对预处理后的视频进行压缩编码,包括运动估计、变换编码等
打包 便于传输和存储 将编码后的音频数据组织为数据包 将编码后的视频数据组织为数据包

1. 图像编解码算法

图像编解码算法主要包括无损编码、有损编码两个类,顾名思义,无需解释。

无损压缩原理:通过预测编码、霍夫曼编码等技术,减少数据的冗余度同时保持图像信息的完整性。

有损编码原理:通过离散余弦变换(DCT)编码、小波变换编码等技术,利用人眼对图像的感知特性,去除对图像影响较小的信息。

常见的图像压缩算法

图像压缩算法 原理 应用
JPEG 将图像分割成8x8像素方块,DCT变换到频域,再量化以减少数据量 网页图片、数码相机
HEIF HEVC(H.265)视频编码技术实现高效压缩 智能手机摄像头拍摄的照片
PNG 采用LZ77压缩算法和哈夫曼编码等技术实现无损压缩 图标、徽标

使用时需要对压缩后的图像数据进行解码处理以还原为原始图像,恢复出压缩前的图像数据进行后处理和显示等。

解码过程包括熵解码、逆量化和逆DCT变换等过程。

2. 视频编解码算法

视频编码通过将视频信号分解成一系列的图像帧,并对这些图像帧进行压缩处理,以减少数据量并提高传输效率。常见的视频编码标准有H.264/AVC、HEVC/H.265、prores(apple)、VP9等。

视频编码方式主要包括帧内压缩(prores)、帧间压缩(H264. H265)。

常见的视频压缩方法

视频压缩算法 原理 应用
H264|AVC 通过减少冗余信息和利用图像特性实现压缩 广泛应用于各种视频应用
H265|HEVC 比264更高的压缩效率 在相同码率下提供更好的视觉质量,在高清视频逐渐应用
ProRes 通过变换编码、运动补偿、DCT实现压缩 苹果开发的一种高质量、无损和可编辑的视频编解码器

3. 音频编解码算法

常见的音频编码标准有MP3、AAC等。这些标准采用了一系列复杂的算法和技术来实现高效的音频压缩。在编码过程中,音频信号被转换为数字形式,并应用特定的压缩算法来减少数据量。解码过程则是将压缩后的音频数据恢复为原始的音频信号。

音频编码的过程也是包括:模拟信号采样,采样后的信号量化,之后进行编码得到数字音频信号。

音频解码的过程包括:加盟其首先对音频进行解包提取音频数据,然后将使用编码时对应的解码算法进行解码获得原始信号,然后通过反量化操作恢复为连续的近似值,最后通过重构把之前的信号换换成模拟音频信号。

音频输入输出的实际流程:

播放应用从存储中读取音频封装格式的文件(比如mp3),播放器调用解码模型进行解码成PCM数据,最终送到音频驱动去播放。

而在录音时,音频驱动接收采样获得的PCM数据,给到应用程序,应用调用编码模型进行编码,再调用存储模型进行存储。

常见的音频压缩方法

音频压缩方式 原理 应用
PCM脉冲编码调制 将模拟音频信号转换为数字信号的技术,是一种未压缩的音频原始数据流。 可以理解为音频中类似"视频中的YUV",实际播放的音频原始数据。
MP3 利用心理声学模型去除人耳察觉不到的音频成分,编码过程在量化后增加声学分析以及霍尔曼编码等步骤。 广泛应用音频文件如音乐歌曲等。
AAC(Advanced Audio Codin) 使用预测编码和变换变化技术,实现了更高效的音频编码。 广泛应用于广播和流媒体等。

音频编解码还需要考虑音频的质量、采样率、比特率和声道数等因素。这些因素直接影响音频的听觉效果和传输效率。

4. codec片外芯片硬件

CODEC作用

Codec负责音频信号的模拟/数字转换(A/D和D/A转换),以及音频信号的编码和解码。

CODEC芯片的选择,决定了模拟音频输入输出质量的好坏,在音频加速器模块中,决定数字信号质量的好坏。

示例

以音频芯片CODEC ALC5640为例,ALC5640芯片使用i2c1接口的控制总线,数据传输通过i2s0接口。

5. 独立编解码器

以上为常见的芯片内编解码模块的方案,但是也会有一类是独立的编解码器,通过外部接口的方式实现音视频编解码,从而扩展主板的能力,提高硬件适应性。

在这里插入图片描述

海康威视DS-6700HUH音视频编码器为例。

支持HDTVI、HDCVI、CVBS和AHD的摄像头输入信号,采用H.265或者H.264标准视频编码,可同时对四路1080p分辨率的视频信号进行实时编码,支持丰富的网络协议,可以通过网口,把视频流传送到网络设备上。

网络另一端的Android终端通过网络终端接收视频信号,并把接收视频显示在Android终端的屏幕上,默认显示音视频编码器视频流的方式,通过浏览器输入默认地址192.168.1.64,并根据提示下载插件,即可实现远程摄像头视频的实时显示。

音视频编解码器的具体使用步骤如下:

\1. 给音视频编码器和操控端上电,音视频编码器网口与操控端网口相连,编码器视频口与模拟摄像头相连。

\2. 设置操控端IP与音视频编码器默认的IP在同一网段,DS-6700HUH默认的IPv4地址是192.168.1.64。

\3. 在Android操控端的浏览器中输入DS-6700HUH的默认地址192.168.1.64。

\4. 在激活界面输入默认的管理员账号,用户名是admin,并创建登录密码,首次登录要根据提示信息安装浏览器插件。

\5. 在设置界面中选择"配置->网络->基本设置->TCP/IP",可实现对音视频编码器的网络进行设置。

\6. 最后进入预览界面,单击界面的预览框即可打开或者关闭预览图像。

6. ffmpeg软件框架

通过ffmpeg实现编解码和所有软件操作。

FFmpeg是一个开源的多媒体框架,使用广泛,几乎能够解码、编码、转码、mux、demux、过滤和播放所有已知格式的音视频文件。(之后独立总结一章,这个很重要)

系列收官之作,最近陆续把一些camera相关驱动岗位的基础整理完毕,希望对你有所帮助。

计划2025多做整理,比2024翻倍的内容在路上,您点赞和支持,就是继续优化的动力,拜谢!

最后祝您2025新年快乐!

END

其他你可能感兴趣的驱动基础:

摄像头camera驱动开发基础-MIPI和V4L2

摄像头camera驱动开发基础-USB和UVC

影像显示驱动基础-MIPI和I2C

视频语音驱动基础-I2S和tinyALSA

相关推荐
EasyDSS3 小时前
视频监控从安装到优化的技术指南,视频汇聚系统EasyCVR智能安防系统构建之道
大数据·网络·网络协议·音视频
少年、潜行5 小时前
【开源】STM32HAL库移植Arduino OneWire库驱动DS18B20和MAX31850
stm32·嵌入式硬件·开源·ds18b20·max31850
阿酷tony7 小时前
将视频生成视频二维码步骤
音视频·视频格式·视频二维码·视频生成二维码
9527华安7 小时前
国产紫光同创FPGA视频采集转SDI编码输出,基于HSSTHP高速接口,提供2套工程源码和技术支持
fpga开发·音视频·紫光同创·sdi·高速接口·hssthp
四夕白告木贞8 小时前
stm32week12
stm32·单片机·嵌入式硬件·学习
潮汐退涨月冷风霜8 小时前
开发了一个b站视频音频提取器
音视频
美好的事情总会发生8 小时前
晶振不集成到芯片内部的原因分析
嵌入式硬件·硬件工程·智能硬件
qq_316837758 小时前
使用ffmpeg 将图片合成为视频,填充模糊背景,并添加两段音乐
ffmpeg·音视频
xx155802862xx8 小时前
STM32实现2小时延时的最佳方法探讨
单片机·嵌入式硬件
许有杨10 小时前
STM32 的 GPIO和中断
stm32·单片机·嵌入式硬件