音视频多媒体编解码器基础-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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ML基础-Jupyter notebook中的魔法命令

在 Jupyter Notebook 或 IPython 环境中,“魔法命令”(Magic Commands)是一些以百分号(%)或惊叹号(!)开头的特殊命令,用于执行一些与代码运行环境相关的操作,而不仅仅是执行普通的 P…

【Unity2D 2022:UI】创建滚动视图

一、创建Scroll View游戏对象 在Canvas画布下新建Scroll View游戏对象 二、为Content游戏对象添加Grid Layout Group(网格布局组)组件 选中Content游戏物体,点击Add Competent添加组件,搜索Grid Layout Group组件 三、调整Grid La…

9-收纳的知识

[ComponentOf(typeof(xxx))]组件描述,表示是哪个实体的组件 [EntitySystemOf(typeof(xxx))] 系统描述 [Event(SceneType.Demo)] 定义事件,在指定场景的指定事件发生后触发 [ChildOf(typeof(ComputersComponent))] 标明是谁的子实体 [ResponseType(na…

数据库系统概念第六版记录 一

1.关系型数据库 关系型数据库(Relational Database,简称 RDB)是基于关系模型的一种数据库,它通过表格的形式来组织和存储数据。每个表由若干行(记录)和列(字段)组成,数据…

Vue前端开发-pinia之Actions插件

Store中的Actions部分,用于定义操作属性的方法,类似于组件中的methods部分,它与Getters都可以操作State属性,但在定义方法时,Getters是对State属性进行加工处理,再返回使用,属于内部计算;Action…

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)

今天小李哥将开启全新的技术分享系列,为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测,到2025年全球 AI 安全解决方案市场规模将突破200亿美元,年复合增长率超过30%,而Gartn…

一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI

一、GenBI AI 代理介绍(文末提供下载) github地址:https://github.com/Canner/WrenAI 本文信息图片均来源于github作者主页 在 Wren AI,我们的使命是通过生成式商业智能 (GenBI) 使组织能够无缝访问数据&…

JAVA架构师进阶之路

JAVA架构师进阶之路 前言 苦于网络上充斥的各种java知识,多半是互相抄袭,导致很多后来者在学习java知识中味同嚼蜡,本人闲暇之余整理了进阶成为java架构师所必须掌握的核心知识点,后续会不断扩充。 废话少说,直接上正…

java程序员面试自身优缺点,详细说明

程序员面试大厂经常被问到的Java异常机制问题,你搞懂了吗运行时异常:运行时异常是可能被程序员避免的异常。与检查性相反,运行时异常可以在编译时被忽略。错误(ERROR):错误不是异常,而是脱离程序员控制的问题。错误通常在代码中容易被忽略。例如:当栈溢出时,一个错误就发生了,它…

C++六大默认成员函数

C六大默认成员函数 默认构造函数默认析构函数RAII技术RAII的核心思想优点示例应用场景 默认拷贝构造深拷贝和浅拷贝 默认拷贝赋值运算符移动构造函数(C11起)默认移动赋值运算符(C11起)取地址及const取地址操作符重载取地址操作符重…

防火墙的安全策略

1.VLAN 2属于办公区;VLAN 3属于生产区,创建时间段 [FW]ip address-set BG type object [FW-object-address-set-BG]address 192.168.1.0 mask 25 [FW]ip address-set SC type object [FW-object-address-set-SC]address 192.168.1.129 mask 25 [FW]ip address-se…

windows下搭建鸿蒙OS应用开发环境

一、前言 HUAWEI DevEco Studio 是华为推出的一款集成开发环境(IDE),主要用于开发基于华为鸿蒙操作系统(HarmonyOS)的应用。作为华为开发者工具的核心之一,DevEco Studio 提供了一个多功能的开发平台&…

MacBook Pro(M1芯片)Qt环境配置

MacBook Pro(M1芯片)Qt环境配置 1、准备 试图写一个跨平台的桌面应用,此时想到了使用Qt,于是开始了搭建开发环境~ 在M1芯片的电脑上安装,使用brew工具比较方便 Apple Silicon(ARM/M1&#xf…

Sqlserver DBCC Check 遇到Msg 3853报错涉及sys.columns和sys.objects信息不匹配的解决方法

对数据库CacheDBMSIntl执行DBCC checkcatalog(‘CacheDBMSIntl’)时遇到报错如下 Msg 3853, Level 16, State 1, Line 7 Attribute (object_id1071830442) of row (object_id1071830442,column_id1) in sys.columns does not have a matching row (object_id1071830442) in sy…

VUE之组件通信(二)

1、v-model v-model的底层原理:是:value值和input事件的结合 $event到底是啥?啥时候能.target 对于原生事件,$event就是事件对象 ,能.target对应自定义事件,$event就是触发事件时,所传递的数据&#xff…

P2036 [COCI 2008/2009 #2] PERKET(dfs)

#include<bits/stdc.h> using namespace std;int n; int a[15],b[15]; int ansINT_MAX; // 初始化最小差值为一个很大的数&#xff0c;保证能找到最小值void dfs(int i,int s,int k){if(in){ // 当遍历完所有元素时if(s1&&k0) return;int difabs(s-k);ans mi…

论文解读:《基于TinyML毫米波雷达的座舱检测、定位与分类》

摘要 本文提出了一种实时的座舱检测、定位和分类解决方案&#xff0c;采用毫米波&#xff08;mmWave&#xff09;雷达系统芯片&#xff08;SoC&#xff09;&#xff0c;CapterahCAL60S344-AE&#xff0c;支持微型机器学习&#xff08;TinyML&#xff09;。提出了波束距离-多普勒…

尚硅谷课程【笔记】——大数据之Shell【一】

课程视频&#xff1a;【【尚硅谷】Shell脚本从入门到实战】 一、Shell概述 为什么要学习Shell&#xff1f; 1&#xff09;需要看懂运维人员的Shell程序 2&#xff09;偶尔编写一些简单的Shell程序来管理集群、提高开发效率 什么是Shell&#xff1f; 1&#xff09;Shell是一…

【2025】camunda API接口介绍以及REST接口使用(3)

前言 在前面的两篇文章我们介绍了Camunda的web端和camunda-modeler的使用。这篇文章主要介绍camunda结合springboot进行使用&#xff0c;以及相关api介绍。 该专栏主要为介绍camunda的学习和使用 &#x1f345;【2024】Camunda常用功能基本详细介绍和使用-下&#xff08;1&…

Java进阶学习之路

Java进阶之路 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 Java进阶之路前言一、Java入门 Java基础 1、Java概述 1.1 什…