草庐IT

C++音视频开发技能树(初级)

大气层煮月亮 2024-01-11 原文

前言

        来整理一下C++音视频开发从初级阶段到高级阶段要学习的知识点吧!


C++音视频开发技能树(初级)

第一阶段 音视频基础

音频基础知识

01.如何采集声音-模数转换原理

02.为什么高品质音频采样率>=44.1Khz

03.什么是PCM

04.一个采样点用多少位表示

05.采样值用整数还是浮点数表示

06.音量大小和采样值大关系

07.多少个采样点作为一帧数据

08.左右通道的采样数据如何排列

09.什么是PCM(脉冲编码调制)

10.音频编码原理

视频基础知识

01.RGB彩色原理

02.为什么需要YUV格式

03.什么是像素

04.分辨率、帧率、码率

05.YUV数据存储格式区别

06.YUV内存对齐问题

07.为什么画面显示绿屏

08.H264编码原理

09.H264 IPB帧的关系

解复用基础知识

01.什么是解复用,比如MP4格式

02.为什么需要不同格式的解复用格式MP4/FLV/TS

03.常见的服用格式MP4/FLV/TS

FFmpeg开发环境搭建

01.Windows、Ubuntu、MAC三大平台

02.QT安装

03.FFmpeg 命令行环境

04.FFmpeg API环境

05.FFmpeg 编译

06.vs2019安装(win平台)

音视频开发常用工具

01.MediaInfo-——分析视频文件

02.VL播放器——播放测试

03.EasyICE——分析TS流

04.flvAnalyser——分析FLV

05.mp4box——分析MP4

06.audacity——分析音频PCM

07.Elecard_streamEye——分析H264

08.海康YUVPlayer——分析YUY

第二阶段 FFmpeg实战

FFmpeg命令

01.音频PCM/AAC文件提取

02.视频YUY/H264文件提取

03.解复用、复用

04.音视频录制

05.视频裁剪和合并

06.图片/视频转换

07.直播推流和拉流

08.水印/画中画/九宫格滤镜

SDL跨平台多媒体开发库实战

01.SDL环境搭建

02.SDL事件处理

03.SDL线程处理

04.视频YUV画面渲染

05.音频PCM声音输出

FFmpeg的基石

01.FFmpeg 框架

02.FFmjpg 内存引用计数模型

03.解复用相关AVFormat XXX等

04.编解码相关AVCodec XXX等

05.压缩数据AVPacket

06.未压缩数据AVFrame

07.FFmpeg面向对象思想

08.Packet/Frame数据零拷贝

FFmpeg过滤器

01.FFmpeg过滤chain框架

02.音频过滤器框架

03.视频规律器框架

04.多路音频混音amix

05.视频水印watermark

06.视频区域裁剪和翻转

07.视频添加logo

FFmpeg音视频解复用+解码

01.解复用流程

02.音频解码流程

03.视频解码流程

04.FLV封装格式分析

05.MP4封装格式分析

06.FLV和MP4 seek有什么区别

07.为什么FLV格式能用于直播

08.为什么MP4不能用于直播

09.MP4能否用来做点播

10.AAC ADTS分析

11.H264 NALU分析

12.AVIO内存输入模式

13.音频重采样实战

14.重采样后的数据播放时长是否一致

15.重采样后PTS如何表示

16.视频解码后YUV内存对齐问题

17.音频解码后PCM排列格式问题

18.硬件解码dxva2/nvdec/cuvid/qsv

19.硬件gpu数据转移到cpu

20.H265解码

ffplay播放器

01.掌握ffplay.c的意义

02.ffplay框架分析

03.解复用线程

04.音频解码线程

05.视频解码线程

06.声音输出回调

07.画面渲染时间间隔

08.音频重采样

09.画面尺寸格式变换

10.音频、视频、外部时钟、同步区别

11、以视频为基准时音频重采样补偿

12、音量静音、调节大小的本质

13、音视频packet队列大小限制

14、音视频packet队列线程安全

15、音视频frame队列大小限制

16、音视频frame队列线程安全

17、暂停、播放实现机制

18、seek播放导致的画面卡主问题

19、seek播放数据队列、同步时钟处理

20、如何做到逐帧播放

21、播放器退出的流程要点

FFmpeg音视频解码+复用合成视频 

01.AAC音频编码

02.H264视频解码

03.PCM+YUV复用合成MP4/FLV

04.H264编码原理

05.IDR帧和I帧的区别

06.动态修改编码码率

07.GOP间隔参考值

08.复用合成MP4音视频不同步问题

09.编码、复用timebase问题

10.MP4合成IOS不能播放问题

11.重采样后PTS如何表示

12.视频编码YUV内存对齐问题

13.硬件编码dxva2/nvenc/cuvid/qsv

14.H265编码原理

15.H264、H265编码互转

ffmpeg多媒体视频处理工具

01.掌握ffmpeg.c的意义

02.ffmpeg框架分析

03.音视频编码

04.封装格式转换

05.提取音频

06.提取视频

07.logo叠加

08.音视频文件拼接

09.filter机制

10.命令行解析流程

11.MP4转FLV不重新编码逻辑

12.MP4转FLV重新编码逻辑

13.MP4转FLV timebase

14.MP4转FLV scale

FFmpeg+QT QMplay2播放器

01.QMplay2开源播放器讲解

02.QMplay2框架分析

03.播放器模块划分

04.解复用模块

05.音视频解码

06.播放器控制

07.音视频同步

08.CUVID/D3D11VA硬解

09.音量频谱展示

10.音频均衡器

11.画面旋转、翻转

12.画面亮度、饱和度调节

13.画面4:3 16:9切换

14.码流信息分析

OBS推流录制源码分析

01.OBS vs2019+QT5.15.2编译

02.音视频配置和初始化分析

03.音视频线程模块采集和编码分析

04.视频配置和初始化分析

05.视频线程模块采集和编码分析

06.OBS初始化过程分析

07.录制流程分析

08.麦克风采集分析

09.桌面采集分析

10.X264编码分析

11.系统声音+麦克风混音

12.推流模块分析


第一阶段 音视频基础

音频基础知识

01.如何采集声音-模数转换原理

02.为什么高品质音频采样率>=44.1Khz

03.什么是PCM

04.一个采样点用多少位表示

05.采样值用整数还是浮点数表示

06.音量大小和采样值大关系

07.多少个采样点作为一帧数据

08.左右通道的采样数据如何排列

09.什么是PCM(脉冲编码调制)

10.音频编码原理

视频基础知识

01.RGB彩色原理

02.为什么需要YUV格式

03.什么是像素

04.分辨率、帧率、码率

05.YUV数据存储格式区别

06.YUV内存对齐问题

07.为什么画面显示绿屏

08.H264编码原理

09.H264 IPB帧的关系

注:具体H264编码格式见FFmpeg章节

解复用基础知识

01.什么是解复用,比如MP4格式

02.为什么需要不同格式的解复用格式MP4/FLV/TS

03.常见的服用格式MP4/FLV/TS

注:具体复用格式详解见FFmpeg章节

FFmpeg开发环境搭建

01.Windows、Ubuntu、MAC三大平台

02.QT安装

03.FFmpeg 命令行环境

04.FFmpeg API环境

05.FFmpeg 编译

06.vs2019安装(win平台)

音视频开发常用工具

01.MediaInfo-——分析视频文件

02.VL播放器——播放测试

03.EasyICE——分析TS流

04.flvAnalyser——分析FLV

05.mp4box——分析MP4

06.audacity——分析音频PCM

07.Elecard_streamEye——分析H264

08.海康YUVPlayer——分析YUY

第二阶段 FFmpeg实战

FFmpeg命令

01.音频PCM/AAC文件提取

02.视频YUY/H264文件提取

03.解复用、复用

04.音视频录制

05.视频裁剪和合并

06.图片/视频转换

07.直播推流和拉流

08.水印/画中画/九宫格滤镜

注:掌握FFmpeg的目的:1、快速掌握FFmpeg能做什么;2、加深对音视频的理解

SDL跨平台多媒体开发库实战

01.SDL环境搭建

02.SDL事件处理

03.SDL线程处理

04.视频YUV画面渲染

05.音频PCM声音输出

注:SDL兼容Win、Ubuntu、Mac三大平台,主要用于后续项目的画面显示和声音输出

FFmpeg的基石

01.FFmpeg 框架

02.FFmjpg 内存引用计数模型

03.解复用相关AVFormat XXX等

04.编解码相关AVCodec XXX等

05.压缩数据AVPacket

06.未压缩数据AVFrame

07.FFmpeg面向对象思想

08.Packet/Frame数据零拷贝

注:目的熟悉FFmpeg常用结构体和函数接口

FFmpeg过滤器

01.FFmpeg过滤chain框架

02.音频过滤器框架

03.视频规律器框架

04.多路音频混音amix

05.视频水印watermark

06.视频区域裁剪和翻转

FFmpeg音视频解复用+解码

01.解复用流程

02.音频解码流程

03.视频解码流程

04.FLV封装格式分析

05.MP4封装格式分析

06.FLV和MP4 seek有什么区别

07.为什么FLV格式能用于直播

08.为什么MP4不能用于直播

09.MP4能否用来做点播

10.AAC ADTS分析

11.H264 NALU分析

12.AVIO内存输入模式

13.音频重采样实战

14.重采样后的数据播放时长是否一致

15.重采样后PTS如何表示

16.视频解码后YUV内存对齐问题

17.音频解码后PCM排列格式问题

18.硬件解码dxva2/nvdec/cuvid/qsv

19.硬件gpu数据转移到cpu

20.H265解码

注:FFmpeg API学习:视频解复用->解码->编码->复用合成视频

ffplay播放器

01.掌握ffplay.c的意义

02.ffplay框架分析

03.解复用线程

04.音频解码线程

05.视频解码线程

06.声音输出回调

07.画面渲染时间间隔

08.音频重采样

09.画面尺寸格式变换

10.音频、视频、外部时钟、同步区别

11、以视频为基准时音频重采样补偿

12、音量静音、调节大小的本质

13、音视频packet队列大小限制

14、音视频packet队列线程安全

15、音视频frame队列大小限制

16、音视频frame队列线程安全

17、暂停、播放实现机制

18、seek播放导致的画面卡主问题

19、seek播放数据队列、同步时钟处理

20、如何做到逐帧播放

21、播放器退出的流程要点

注:ffplay.c是ffplay命令的源码,掌握ffplay对于我们自己开发播放器有事半功倍的效果

FFmpeg音视频解码+复用合成视频 

01.AAC音频编码

02.H264视频解码

03.PCM+YUV复用合成MP4/FLV

04.H264编码原理

05.IDR帧和I帧的区别

06.动态修改编码码率

07.GOP间隔参考值

08.复用合成MP4音视频不同步问题

09.编码、复用timebase问题

10.MP4合成IOS不能播放问题

11.重采样后PTS如何表示

12.视频编码YUV内存对齐问题

13.硬件编码dxva2/nvenc/cuvid/qsv

14.H265编码原理

15.H264、H265编码互转

ffmpeg多媒体视频处理工具

01.掌握ffmpeg.c的意义

02.ffmpeg框架分析

03.音视频编码

04.封装格式转换

05.提取音频

06.提取视频

07.logo叠加

08.音视频文件拼接

09.filter机制

10.命令行解析流程

11.MP4转FLV不重新编码逻辑

12.MP4转FLV重新编码逻辑

13.MP4转FLV timebase

14.MP4转FLV scale

注:ffmpeg.c是ffmpeg命令的源码,掌握ffmpeg.c的大体框架对于我们要实现一些不知道怎么编写代码的功能(用ffmpeg命令行可以但不知道怎么调用ffmpeg api时可以参考ffmpeg.c的逻辑)有极大的帮助,比如要裁剪视频的长度

FFmpeg+QT QMplay2播放器

01.QMplay2开源播放器讲解

02.QMplay2框架分析

03.播放器模块划分

04.解复用模块

05.音视频解码

06.播放器控制

07.音视频同步

08.CUVID/D3D11VA硬解

09.音量频谱展示

10.音频均衡器

11.画面旋转、翻转

12.画面亮度、饱和度调节

13.画面4:3 16:9切换

14.码流信息分析

OBS推流录制源码分析

01.OBS vs2019+QT5.15.2编译

02.音视频配置和初始化分析

03.音视频线程模块采集和编码分析

04.视频配置和初始化分析

05.视频线程模块采集和编码分析

06.OBS初始化过程分析

07.录制流程分析

08.麦克风采集分析

09.桌面采集分析

10.X264编码分析

11.系统声音+麦克风混音

12.推流模块分析

有关C++音视频开发技能树(初级)的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  8. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  9. 动漫制作技巧如何制作动漫视频 - 2

    动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、

  10. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

随机推荐