必须要掌握的音视频编码、解码基础!

news/2024/7/10 20:45:41 标签: 音视频, ffmpeg

一、音视频为什么要编码?

音视频编码技术在音视频领域有着举足轻重的地位,这是由于音视频原始数据量较大,在传输的过程中如果不进行编码的话,则无法进行传输。比方说,一张普通的图片的大小大概是1-2M,假设我们传输的帧率是30帧,则相当于一秒钟三十张2M的图片,那这个传输量是不得了的。所以此时我们就要引入视频编码技术进行压缩处理,目前常见的视频压缩技术有H264/H265两种压缩技术(这方面我们后面再慢慢介绍),音频编码技术是AAC,这两种压缩格式可以使得每一帧数据的大小能够压缩100-200倍,这使得传输效率大大提高。

二.音视频编码总体框图

9922e1f65d454dc365a845cbe8545da1.png

这框图就是音视频从采集到编码到推流的全流程,

2.1.第一步:采集摄像头、麦克风的数据:

编码的第一步基本上都是采集视频、音频的数据,并把采集到的数据送到对应的音视频编码器。视频数据送到H264/H265编码器,音频数据送到AAC编码器,编码处理过后分别送到视频编码队列和音频编码队列。

2.2.第二步:音视频编码数据封装:

从视频编码队列和音频编码队列拿出数据,并进行音视频的封装,所谓的音视频封装相当于把视频裸流和音频裸流合并在一起成为一个既有视频也有音频的复合流。常见的复合流有flv封装复合流、mpegts封装复合流(这两种具体的区别,在后面会说到)。

2.3.第三步:把复合流推送到对应的流媒体服务器:

把复合流拿到之后,就每一帧音频和视频数据往对应的流媒体服务器发送数据(这里要注意:不同的流媒体协议,用不同的封装格式。比方说RTMP用的是FLV格式,SRT/RTSP用的是mpegts复合流格式)。

三.什么是音视频解码:

音视频解码,顾名思义就是把已经压缩过后的音视频(视频:H264/H265,音频:AAC、MP3)数据还原成原始数据(视频原始数据:YUV,音频原始数据:PCM)的过程。

1.音视频解码的大体框图:

5a8bb246195324f82d671112d0152676.png

1.1:读取流媒体地址:并进行解封装操作 先读取音视频的流媒体地址,并把流媒体获取到的音视频进行解封装处理。所谓解封装处理就相当于把flv、mpegts等复合流分割成视频裸流(H264/H265视频流)和音频裸流(AAC音频流)。并把每个裸流分别存放到不同的队列,视频裸流存放到VideoPacket Queue,音频裸流存放到Audio Queue。(注:这里的队列名称都是自己命名的)

1.2:把队列的裸流数据取出来,进行每一帧的解码操作 把视频裸流队列和音频裸流队列的数据取出来,并一帧一帧送到解码器进行视频解码和音频解码。并把解码后的数据分别进入视频解码队列和音频解码队列。

1.3:从解码队列拿数据,并进行音视频同步处理 把第二步解码队列的音视频拿出来,分别进行音视频同步的算法处理。目前的话音视频同步,基本上都是基于音频作为参考时钟,而视频基于音频的节奏进行同步操作。音视频同步处理后,音视频基本上可以做到声音和画面完全同步了。

1.4:把音视频同步过后的数据分别播放出来 经过音视频同步处理后,视频数据(YUV数据)就直接送到SDL或者drm显示出来。而音频数据(PCM)则直接送到alsa框架进行音频播放。

四.音视频解码的难点:

音视频解码总体来说还是比较难的,其中最大的一个难点就是音视频同步的算法控制。很多音视频的初学者,对音视频的节奏总是把握不好。所以经常会出现视频比音频快十几个毫秒或者音频比视频快个十几个毫秒,这都会导致音视频不同步的重要原因。关于这部分如何控制好,还需要多去看看源代码才能更好地解决。

最后:

今天的分享就到这里,更多交流,可以加作者微信进行深度交流:

6565f677a67a0de6a697573780454392.png

http://www.niftyadmin.cn/n/330621.html

相关文章

专业的图像编辑软件Affinity Photo 2.04版本在win10系统的下载与安装配置教程

目录 前言一、Affinity Photo安装二、使用配置总结 前言 Affinity Photo 是一款专业的图像编辑软件,提供了很多强大的工具和功能。 一些常用工具的介绍: 选择工具 ——矩形选择工具:用于选择矩形区域。 ——椭圆选择工具:用于选…

macOS Ventura 13.4 RC3(22F66)发布

系统介绍 5 月 17 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.4 RC 3 更新(内部版本号:22F66),本次更新距离上次发布隔了 5 天。 macOS Ventura 带来了台前调度、连续互通相机、FaceTime 通话接力等功能。其中&…

Mybatis基础操作

文章目录 一. Mybatis单表操作删除操作查询操作#{} 与 ${}的区别更新操作新增操作 二. Mybatis多表操作 一. Mybatis单表操作 删除操作 我们接着使用昨天的表和程序,我们来实现通过id删除数据: 我们这样就可以实现将id 1的数据进行删除了,…

让孩子们零基础也能学习人工智能,这家科技企业是这样做的

在偏远地区的孩子,即便没有任何人工智能知识和理论基础,也可以一步步迈入人工智能科技的殿堂? 你没有看错,这就是亚马逊云科技推出的“AI在未来”公益计划项目,如今已经进入了第二个学年。 “AI在未来”公益计划走进宁…

【C++ 入坑指南】(08)循环

文章目录 一、while 循环二、do...while 循环三、for 循环四、嵌套循环五、跳转语句5.1 break 语句5.2 continue 语句5.3 goto 语句 有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行&#xff0c…

LCHub:网易数帆汪源:低代码仍然被“误会”,市场明年会迎拐点

LCHub:2023年四月底,在北京见到网易副总裁、网易杭州研究院执行院长、网易数帆总经理汪源,他展现出对于低代码、生成式AI技术非常开放的分享状态。汪源是网易杭州研究院执行院长,他负责的研究院在2006年已经成立,早期的网易数帆就是研究院的技术团队,支撑网易公司的数个主…

企业实践 | 如何从VMWare ESXi Shell中挂载以及拷贝NTFS或者FAT32分区格式的USB闪存驱动器...

欢迎关注「WeiyiGeek」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 涉及 网络安全运维、应用开发、物联网IOT、学习路径 、个人感悟 等知识 “ 花开堪折直须折,莫待无花空折枝。 ”…

什么是鉴权?这些postman鉴权方式你又知道多少?

一、什么是鉴权? 鉴权也就是身份认证,就是验证您是否有权限从服务器访问或操作相关数据。发送请求时,通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就是一个门禁,您想要进入室内,必须通过…