如果要从事编解码多媒体的工作,需要准备哪些更为基础的内容,这里帮你总结完。
因为数据类型不同所以编解码算法不同,分为图像、视频和音频三大类;因为流程不同,可以分为编码和解码两部分;因为编码器实现不同,分为硬编码和软编码;因为编解码硬件位置不同,可以分为片内、片外和独立编解码模块三类;软件常用的框架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