音视频解码流程详解

article/2025/10/22 20:37:12


1、解码整体流程

(1) 音频解码整体流程

在这里插入图片描述

(2)视频解码整体流程
在这里插入图片描述


2、FFmpeg音视频解码详细流程

在这里插入图片描述


3、关键数据结构

AVCodecParser:⽤于解析输⼊的数据流并把它分成⼀帧⼀帧的压缩编码数据。⽐较形象
的说法就是把⻓⻓的⼀段连续的数据“切割”成⼀段段的数据。

比如:ffmpeg-4.2.1\libavcodec\aac_parser.c

 AVCodecParser ff_aac_parser = {codec_ids = { AV_CODEC_ID_AAC },priv_data_size = sizeof(AACAC3ParseContext),parser_init = aac_parse_init,parser_parse = ff_aac_ac3_parse,parser_close = ff_parse_close,
};

从AVCodecParser结构的实例化我们可以看出来,不同编码类型的parser是和CODE_ID进⾏绑定的。所以也就可以解释:parser = av_parser_init(codec->id);


4、关键函数说明

(1)avcodec_find_decoder:根据指定的AVCodecID查找注册的解码器。

(2)av_parser_init:初始化AVCodecParserContext。

(3)avcodec_alloc_context3:为AVCodecContext分配内存。

(4)avcodec_open2:打开解码器。

(5)av_parser_parse2:解析获得⼀个Packet。

(6)av_get_bytes_per_sample: 获取每个sample中的字节数。

(7)avcodec_send_packet:将AVPacket压缩数据给解码器。
原型: int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);

作用: ⽀持将裸流数据包送给解码器。

参数:
1)avctx:解码上下⽂;
2)avpkt:输⼊AVPakcet.通常情况下,输⼊数据是⼀个单⼀的视频帧或者⼏个完整的⾳频帧。调⽤者保留包的原有属性,解码器不会修改包的内容。解码器可能创建对包的引用。如果包没有引⽤计数将拷贝⼀份。跟以往的API不⼀样,输⼊的包的数据将被完全地消耗,如果包含有多个帧,要求多次调⽤avcodec_recvive_frame,直到avcodec_recvive_frame返回 VERROR(EAGAIN)或AVERROR_EOF 。输⼊参数可以为NULL,或者AVPacket的data域设置为NULL或者size域设置为0,表示将刷新所有的包,意味着数据流已经结束了。第⼀次发送刷新会总会成功,第⼆次发送刷新包是没有必要的,并且返回AVERROR_EOF,如果×××缓存了⼀些帧,返回⼀个刷新包,将会返回所有的解码包。

返回值:
1)0:表示成功;
2)AVERROR(EAGAIN):当前状态不接受输⼊,⽤户必须先使⽤ avcodec_receive_frame() 读取数据帧;
3)AVERROR_EOF:解码器已刷新,不能再向其发送新包;
4)AVERROR(EINVAL):没有打开解码器,或者这是⼀个编码器,或者要求刷新;
5)AVERRO(ENOMEN):⽆法将数据包添加到内部队列。

注意:
输⼊的avpkt-data缓冲区必须⼤于AV_INPUT_PADDING_SIZE,因为优化的字节流读取器必须⼀次读取32或者64⽐特的数据。
不能跟之前的API(例如avcodec_decode_video2)混⽤,否则会返回不可预知的错误。
在将包发送给解码器的时候,AVCodecContext必须已经通过avcodec_open2打开


(8)avcodec_receive_frame:获取到解码后的AVFrame数据。
函数:int avcodec_receive_frame ( AVCodecContext * avctx, AVFrame * frame )

作用:从解码器返回已解码的输出数据。

参数:
1)avctx: 编解码器上下⽂。
2)frame: 获取使⽤reference-counted机制的audio或者video帧(取决于解码器类型)。请注意,在执⾏其他操作之前,函数内部将始终先调⽤av_frame_unref(frame)。

返回值:
1)0: 成功,返回⼀个帧;
2)AVERROR(EAGAIN): 该状态下没有帧输出,需要使⽤avcodec_send_packet发送新的packet到解码器;
3)AVERROR_EOF: 解码器已经被完全刷新,不再有输出帧;
4)AVERROR(EINVAL): 编解码器没打开;
5)其他<0的值: 具体查看对应的错误码。


http://chatgpt.dhexx.cn/article/O3Mcwmhd.shtml

相关文章

FFmpeg 音频解码(秒懂)

1.简介 解码音频数据&#xff0c;如下图所示&#xff0c;把MP3或者AAC数据解码成原始的数据pcm。 2.流程 2.1在使用FFmpeg API之前&#xff0c;需要先注册API&#xff0c;然后才能使用API。当然&#xff0c;新版本的库不需要再调用下面的方法。 av_register_all() 2.2 构建输…

语音编解码技术演进和应用选型

本文来自现网易云音乐音视频实验室负责人刘华平在LiveVideoStackCon 2017大会上的分享&#xff0c;并由LiveVideoStack整理而成。分享中刘华平以时间为主线&#xff0c;讲述了语音编解码技术的演进路线及实际应用中的技术选型。 文 / 刘华平 整理 / LiveVideoStack 大家好&…

回访。

wyx 过来&#xff0c;还 sxt &#xff0c;拿走了几张碟。为此&#xff0c;特意收拾了房间。还是被说没地方坐。 由于事先约了 zhmm 吃饭&#xff0c;没调开时间&#xff0c;所以&#xff0c;五点多&#xff0c;大家就一起吃了。大青花&#xff0c;东北风味儿。餐厅在二楼&…

客户信息管理软件系统

拟实现一个基于文本界面的《客户信息管理软件》 进一步掌握编程技巧和调试技巧&#xff0c;熟悉面向对象编程 主要涉及以下知识点&#xff1a; ▶类结构的使用&#xff1a; ▶对象的创建与使用 ▶类的封装性 ▶声明和使用数组 ▶数组的插入、删除和替换 ▶关键字的使用&#xf…

企业如何通过CRM系统有效触达客户,获取潜在商机

“守株待兔”式坐等客户上门的时代了已经过去了&#xff0c;尤其是在存量时代&#xff0c;企业想要提高销售&#xff0c;扩大客源&#xff0c;就要不断的通过各种渠道来去拓展自己的客户和销路&#xff0c;而互联网时代&#xff0c;获客的渠道也丰富多样&#xff0c;企业选择好…

呼叫中心系统接入CRM客户管理系统

呼叫中心是企业与客户建立联系的桥梁&#xff0c;企业想要发展必须要有统一的客户管理系统&#xff0c;呼叫中心与客户管理系统对接到一起能够更高效管理客户&#xff0c;档案数据更准确。 在以前企业都是通过纸质的客户档案管理客户的&#xff0c;寻找某个客户时特别不方便&am…

CRM管理系统、教育后台、赠品管理、优惠管理、预约管理、试听课、教师、学生、客户、学员、商品管理、科目、优惠券、完课回访、客户管理系统、收费、退费、回访、账号权限、订单流水、Axure原型、rp原型

CRM管理系统、教育后台、赠品管理、优惠管理、预约管理、试听课、教师、学生、客户、学员、商品管理、科目、优惠券、完课回访、客户管理系统、收费、退费、回访、账号权限、订单流水、Axure原型、rp原型 Axure原型演示及下载地址&#xff1a;https://www.pmdaniu.com/storage…

在线云客服管理系统、会话管理、访客管理、客户管理、工单管理、会话记录、考勤统计、数据报表、工单设置、全局设置、转人工服务、自动回复、客户标签、客服监控、客服系统、前端会话、客服管理、在线客服、人工客服

在线云客服管理系统、会话管理、访客管理、客户管理、工单管理、会话记录、考勤统计、数据报表、工单设置、全局设置、转人工服务、自动回复、客户标签、客服监控、客服系统、前端会话、客服管理、在线客服 、人工客服 Axure原型演示及下载地址&#xff1a;Untitled Documenth…

CRM管理系统、教育后台、赠品管理、优惠管理、预约管理、试听课、教师、学生、客户、学员、商品管理、科目、优惠券、完课回访、客户管理系统、收费、退费、回访、账号权限、订单流水、审批、转账、rp原型

CRM管理系统、教育后台、赠品管理、优惠管理、预约管理、试听课、教师、学生、客户、学员、商品管理、科目、优惠券、完课回访、客户管理系统、收费、退费、回访、账号权限、订单流水、Axure原型、rp原型 Axure原型演示及下载地址&#xff1a;Untitled Documenthttps://f2b1hj…

客户管理系统

项目github地址&#xff1a;https://github.com/gh995836/crm 项目技术&#xff1a;SpringMVCSpringMybatisAjaxBootstrap 项目描述&#xff1a;该客户管理系统&#xff0c;前端采用Bootstrap框架 Ajax发送请求&#xff0c;后台采用JavaWeb的SpringMVCSpringMybatis框架进行…

“顾客总是对的”,客户满意从在线客服系统开始

"顾客总是对的"——马歇尔菲尔德 哈里戈登赛尔费里奇 毋庸置疑&#xff0c;赢得客户的青睐是维系自身经济长青的基础。想要客户满意&#xff0c;得到最佳的客户评价&#xff0c;企业就需要为客户提供超出他们期望的服务。 有人将客户服务分为三重境界:第一重境界&am…

一文读懂:客户管理系统平台是什么?有什么作用?

“客户管理系统平台是什么&#xff1f;” “客户管理系统平台有什么作用&#xff1f;在哪里可以应用&#xff1f;怎么用&#xff1f;” 经常可以听到企业内部关于客户管理系统平台的这些问题&#xff0c;本文将会为您一一解答&#xff1a; 一、客户管理系统平台是什么 顾名…

什么是客户自助服务门户及其搭建方法

随着信息技术的快速发展&#xff0c;越来越多的企业开始转向以客户为中心的服务模式&#xff0c;而客户自助服务门户&#xff08;Customer Self-Service Portal&#xff09;则成为了重要的服务方式。它可以让客户在不需要人工干预的情况下&#xff0c;自行解决问题&#xff0c;…

客户管理系统如何提升体验

数字化时代&#xff0c;客户与企业交互的触点爆炸式增长&#xff0c;客户体验正从单一触点走向端到端旅程。众多的产品、海量的数据&#xff0c;导致客户对体验的要求越来越多......CRM客户管理系统是企业提升客户体验的有效工具&#xff0c;它不仅可以帮助您进一步了解客户&am…

在线云客服管理系统、会话管理、访客管理、客户管理、工单管理、会话记录、考勤统计、数据报表、工单设置、全局设置、人工服务、自动回复、客户标签、客服监控、客服系统、前端会话、客服管理、在线客服 、人工客服

在线云客服管理系统、会话管理、访客管理、客户管理、工单管理、会话记录、考勤统计、数据报表、工单设置、全局设置、转人工服务、自动回复、客户标签、客服监控、客服系统、前端会话、客服管理、在线客服 、人工客服 Axure原型演示及下载地址&#xff1a;https://www.pmdani…

CRM客户管理系统

Sunsiny资产CRM客户管理系统 目录 一、 CRM系统背景 2 二、 CRM系统分类 3 三、概述 3 四、系统的技术选型 3 五、 系统模块简介 4 六、 领导驾驶舱 6 七、 客户经理驾驶舱 6 八、 客户管理 7 九、 联系人管理 8 十、 服务记录 8 十一、 公出计划 8 十二、 资管产品 9 十三、 …

CRM系统针对性的解决方案—客户管理一体化

CRM&#xff08;Customer Relationship Management&#xff09;是客户关系管理系统的英文简称。CRM系统以客户为中心&#xff0c;以信息技术为手段&#xff0c;实现营销、客户、销售、产品、服务等方面的信息化、自动化、一体化管控&#xff0c;帮助企业统一管理客户、满足个性…

保险客服系统之电子回访业务

电子回访业务就是人工回访的智能化&#xff0c;由机器人智能语音代替客服人员&#xff0c;人工回放指当客户在保险公司购买完保险之后&#xff0c;客服对客户进行的售后维护工作。其中最常见的就是新契约回访&#xff0c;就是在客户收到保险合同之后给客户去电话了解客户是否对…

客户信息管理系统

客户信息管理系统 课程设计的题目及简介设计说明程序流图程序清单Customer 类MainView类Tools类DataManager类 调试结果课程设计体会视频教程 课程设计的题目及简介 客户信息管理系统&#xff0c;功能如下&#xff1a; &#xff08;1&#xff09;添加客户信息 &#xff08;2&…

回访管理系统

背景 近年&#xff0c;国家在不断出台鼓励社会办医疗机构的一系列措施&#xff0c;积极推进社会办医&#xff0c;努力构建多元化医疗服务体系。但从去年下半年开始&#xff0c;相当比例的民营医院经营越来越困难&#xff0c;全国范围内很多民营医院的门诊量都在下降&#xff0c…