音视频多媒体编解码器基础-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变换到频域,再量化以减少数据量网页图片、数码相机
HEIFHEVC(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/963297.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openmv运行时突然中断并且没断联只是跟复位了一样

就是 # 内存不足时硬件复位 except MemoryError as me: print("Memory Error:", me) pyb.hard_reset() # 内存不足时硬件复位 很有可能是你的代码加了内存溢出的复位,没加的话他会报错的

Redis集群理解以及Tendis的优化

主从模式 主从同步 同步过程: 全量同步(第一次连接):RDB文件加缓冲区,主节点fork子进程,保存RDB,发送RDB到从节点磁盘,从节点清空数据,从节点加载RDB到内存增量同步&am…

77-《欧耧斗菜》

欧耧斗菜 欧耧斗菜(学名:Aquilegia vulgaris L. )是毛茛科耧斗菜属植物,株高30-60厘米。基生叶有长柄,基生叶及茎下部叶为二回三出复叶,小叶2-3裂,裂片边缘具圆齿。最上部茎生叶近无柄。聚伞花序…

为AI聊天工具添加一个知识系统 之83 详细设计之24 度量空间之1 因果关系和过程:认知金字塔

本文要点 度量空间 在本项目(为AI聊天工具添加一个知识系统 )中 是出于对“用”的考量 来考虑的。这包括: 相对-位置 力用(“相”)。正如 法力,相关-速度 体用 (“体”)。例如 重…

Unity 2D实战小游戏开发跳跳鸟 - 跳跳鸟碰撞障碍物逻辑

在有了之前创建的可移动障碍物之后,就可以开始进行跳跳鸟碰撞到障碍物后死亡的逻辑,死亡后会产生一个对应的效果。 跳跳鸟碰撞逻辑 创建Obstacle Tag 首先跳跳鸟在碰撞到障碍物时,我们需要判定碰撞到的是障碍物,可以给障碍物的Prefab预制体添加一个Tag为Obstacle,添加步…

记录 | Docker的windows版安装

目录 前言一、1.1 打开“启用或关闭Windows功能”1.2 安装“WSL”方式1:命令行下载方式2:离线包下载 二、Docker Desktop更新时间 前言 参考文章:Windows Subsystem for Linux——解决WSL更新速度慢的方案 参考视频:一个视频解决D…

[SAP ABAP] 在ABAP Debugger调试器中设置断点

在命令框输入/H,点击回车以后,调试被激活,点击触发任意事件进入ABAP Debugger调试器界面 点击按钮,可以在Debugger调试器中新增临时断点 我们可以从ABAP命令、方法、功能、表单、异常、消息、源代码等多个维度在Debugger调试器中设…

深度学习之“线性代数”

线性代数在深度学习中是解决多维数学对象计算问题的核心工具。这些数学对象包括标量、向量、矩阵和张量,借助它们可以高效地对数据进行操作和建模。以下将详细介绍这些数学对象及其在深度学习中的典型用途。 数学对象概述 标量 标量是最简单的数学对象&#xff0…

【面经】字节南京一面部分题目记录

南京字节一面题,可能因为项目不太匹配,全程八股比较多,也有两道手撕代码题,强度还是有的。为了方便大家学习,大部分答案由GPT整理,有些题给出了我认为回答比较好的博客链接。 文章目录 一、python2 和 pyth…

17.3.4 颜色矩阵

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 17.3.4.1 矩阵基本概念 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,类似于数组。 由…

LabVIEW在电机自动化生产线中的实时数据采集与生产过程监控

在电机自动化生产线中,实时数据采集与生产过程监控是确保生产效率和产品质量的重要环节。LabVIEW作为一种强大的图形化编程平台,可以有效实现数据采集、实时监控和自动化控制。详细探讨如何利用LabVIEW实现这一目标,包括硬件选择、软件架构设…

mybatis(78/134)

前天学了很多&#xff0c;关于java的反射机制&#xff0c;其实跳过了new对象&#xff0c;然后底层生成了字节码&#xff0c;创建了对应的编码。手搓了一遍源码&#xff0c;还是比较复杂的。 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE …

【NLP251】Transformer精讲 残差链接与层归一化

精讲部分&#xff0c;主要是对Transformer的深度理解方便日后从底层逻辑进行创新&#xff0c;对于仅应用需求的小伙伴可以跳过这一部分&#xff0c;不影响正常学习。 1. 残差模块 何凯明在2015年提出的残差网络&#xff08;ResNet&#xff09;&#xff0c;Transformer在2016年…

全程Kali linux---CTFshow misc入门(25-37)

第二十五题&#xff1a; 提示&#xff1a;flag在图片下面。 直接检查CRC&#xff0c;检测到错误&#xff0c;就直接暴力破解。 暴力破解CRC的python代码。 import binascii import struct def brute_force_ihdr_crc(filename): # 读取文件二进制数据 with open(filen…

OpenAI深夜反击:o3-mini免费上线,能否撼动DeepSeek的地位?

还在为寻找合适的 AI 模型而烦恼吗&#xff1f;chatTools 平台为您精选 o1、GPT4o、Claude、Gemini 等顶尖 AI 模型&#xff0c;满足您不同的 AI 应用需求。立即体验强大的 AI 能力&#xff01; 深夜反击&#xff0c;OpenAI祭出o3-mini 在DeepSeek异军突起&#xff0c;搅动AI行…

蓝桥杯备考:模拟算法之字符串展开

P1098 [NOIP 2007 提高组] 字符串的展开 - 洛谷 | 计算机科学教育新生态 #include <iostream> #include <cctype> #include <algorithm> using namespace std; int p1,p2,p3; string s,ret; void add(char left,char right) {string tmp;for(char ch left1;…

NLP深度学习 DAY5:Sequence-to-sequence 模型详解

Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;模型是一种用于处理输入和输出均为序列任务的深度学习模型。它最初被设计用于机器翻译&#xff0c;但后来广泛应用于其他任务&#xff0c;如文本摘要、对话系统、语音识别、问答系统等。 核心思想 Seq2Seq 模型的目标是将…

于动态规划的启幕之章,借 C++ 笔触绘就算法新篇

注意&#xff1a;代码由易到难 P1216 [IOI 1994] 数字三角形 Number Triangles 题目链接&#xff1a;[IOI 1994] 数字三角形 Number Triangles - 洛谷 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每…

Three.js 后期处理(Post-Processing)详解

目录 前言 一、什么是后期处理&#xff1f; 二、Three.js 后期处理的工作流程 2.1 创建 EffectComposer 2.2 添加渲染通道&#xff08;Render Pass&#xff09; 2.3 应用最终渲染 三、后期处理实现示例 3.1 基础代码 四、常见的后期处理效果 4.1 辉光效果&#xf…

低代码系统-产品架构案例介绍、炎黄盈动-易鲸云(十二)

易鲸云作为炎黄盈动新推出的产品&#xff0c;在定位上为低零代码产品。 开发层 表单引擎 表单设计器&#xff0c;包括设计和渲染 流程引擎 流程设计&#xff0c;包括设计和渲染&#xff0c;需要说明的是&#xff1a;采用国际标准BPMN2.0&#xff0c;可以全球通用 视图引擎 视图…