# audioAndVideo **Repository Path**: ccmmc/audio-and-video ## Basic Information - **Project Name**: audioAndVideo - **Description**: 关于音视频的学习资料,本人写的 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-12 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # audioAndVideo #### 介绍 关于音视频的学习资料,本人写的 使用这个标准模板可以为你的音频处理 均衡器,音效提高效率,避免接口参数不统一,本人亲自测试可用 并且可以使用跨编译器成功编译都支持这种 你可以对大语言模型说以下关键词帮助你设计音效,均衡器库: 。。。。。。。。。。。。。。。。。。。。。 你是音视频工程师 可以设计各种均衡器,音效算法,遵循以下规则 void process(std::vector &pcmSamples,xxxx其它参数,带默认参数) 传入的样本直接修改就行了 专门为44100和2声道设计 支持跨平台和Qt使用 。。。。。。。。。。。。。。。。。。。。 或者你可以加上说是 16位,的 注意:这个是c++语法 ,请使用c++后缀名的.cpp,不然会出错,比如.c,因为包含了std和vector,使用c++更加高效不建议磕着纯C语言 这边使用了cpp的神操作,直接修改数据,所以呢并不需要返回值,所以呢是void 这就是带有&的魅力,直接在另外一个函数,修改参数变量的值是常规操作 然后就是把处理好的音频丢给,音频输出设备 比如在Qt这边使用 **QAudioOutput**,把pcm流传递给它就行了,你还可以使用sdl2这些 如果使用QAudioOutput记得在pro文件里面 打开 输入,**QT += multimedia** ..... 不然会报错 说QAudioOutput找不到这个目录这些 QAudioOutput一般传入的都是,pcm流, 1.传入pcm源流,2.传入size 默认QAudioOutput输出是最大音量 。。。。。。。。。。。。。。。。。。。。。。。。 记得,你想玩音效,均衡器,就别用系统,框架的多媒体类,很多平台的(比如Qt,Android平台)的mediaplayer都不支持,直接获取,或者不支持拦截重写(用于处理)pcm流 pcm流就是音频的原始数据,记录了声音的信息,mp3是有损压缩,并非原始pcm流 pcm有.pcm的文件,或者wav是文件头参数+pcm内容 音频文件常见的有(我碰到的)**mp3 aac m4a flac ape ogg opus** 还有ogg和opus是开源的,缺点是老版设备不支持,手机,电脑这些可以使用ogg,opus,因为现在操作系统或者很多库都支持ogg和opus(Windows 10或者Android 6.0以上,最新版Linux发行版) **opus由于开源标准统一,所有opus 只要设备支持百分百支持解析,并不像mp3文件有各种黑魔法,可能有的mp3不遵循标准格式 在一些 mp4或者esp32的I2S库audioI2S这些播放失败** #### 记得:wma是微软的音频格式,有专利问题,不建议使用 我的ffmpeg和Qt的调通之旅,真的是花了,三天了,直接使用ffmpeg的API是特别繁琐的,比如我的基础播放功能,800行+代码才有基础播放,完成了,再次播放 暂停,获取id3信息,获取封面这些,都是让大语言模型帮我修正,我验证的,结果这大模型给我套路了好几次,bug越弄越多,开了新话题,重新上传代码,才解决了 记住:ffmpeg的版本很多会有细分差异比如 3.x 4.x 5.x,这些常用版本 很多头文件,库文件不兼容! 如果是4.2 4.3 4.4这些小版本是兼容的 记得,Qt这边 mingw的库是.a,msvc是.lib,混用编译会出错 还有32位和64位的.a也是独立的,得看看.a或者.lib标注的是几位的 **记得 dll或者so这些动态链接库,32和64位也不能混用** 在ffmpeg这边处理音视频 还得自己处理pts哦,什么是pts,我们可以叫它同步时钟 按照一定规律 进行“发”和“接” 刚开始第一个的ffmpeg和Qt的播放器,我就不了解大模型给的代码,没有pts,结果三分钟的歌,20秒放完,我说 放的速度太快 它才反应过来给我改好正常速度 原来加了pts节奏控制这些 哈哈,这其实就是没处理好**PTS(显示时间戳)**的典型问题!FFmpeg解析出的音频/视频帧都带有PTS,它标记了这一帧“应该在什么时间播放”。如果播放器忽略PTS,直接按帧的顺序快速播放,就会出现“3分钟的歌20秒放完”的情况——相当于跳过了PTS规定的“等待时间”。 后来调整正常速度,核心就是让播放器遵循PTS:每播放一帧,就根据当前帧和下一帧的PTS差值,计算出需要“等待”的时间,再按这个时间间隔播放,自然就恢复了正常时长。 简单说,PTS就像帧的“时间戳”,播放器跟着它走,节奏就不会乱啦~ 还有倍速,慢放也是 倍速播放的实现,核心是调整帧的显示节奏。正常播放时,每帧按其时间戳(PTS)依次呈现,间隔符合实际时间;倍速时,播放器会缩短帧与帧之间的显示间隔,让相同数量的帧在更短时间内播放完毕。比如2倍速下,原本10秒的内容5秒播完,并非改变时间戳本身,而是加快了处理节奏,从而实现快放效果。也是调整pts 还记得这大模型 采样率这些没有给我弄好,就变成蚊子音,萝莉音 哈哈,采样率没处理好确实容易出这种“魔音”效果!采样率本质是“每秒采集的声音样本数”,比如常用的44.1kHz就是每秒44100个样本。如果解码时搞错了采样率—— 比如把原本44.1kHz的音频,按88.2kHz去播放,相当于样本被“拉稀”了,每秒播放的样本数翻倍,声音频率变高,就成了尖锐的“蚊子音”; 反过来,把高采样率(比如88.2kHz)按低采样率(44.1kHz)播放,样本被“压缩”,频率变低,就可能变成低沉的“大叔音”,要是刚好卡在某个区间,就成了萌萌的“萝莉音”~ 这其实和磁带快放/慢放一个道理,采样率就是控制“播放速度”的隐形旋钮,一旦和原始音频不匹配,音调就彻底跑偏了。当年第一次调错采样率听到“电子猫叫版”的歌,还以为喇叭坏了(笑)。 其实变声就是这个原理 学习中发现了 核心就是通过改变“时间轴”来调整频率——不管是音频采样率的拉伸压缩,还是现实里捏着鼻子说话、用氦气变声,本质都是让声音的振动频率变高或变低。 比如萝莉音是高频振动,大叔音是低频振动,而采样率的调整就像给声音“快进”或“慢放”,硬生生把频率拧成了另一个调调。以前觉得变声很神奇,拆解开原理后,反而觉得更有意思了——原来技术里藏着这么多“小魔法”呢(笑)。 本人已经完成了Qt和ffmpeg的对接,现在正在学习Android 和ffmpeg对接,由于Android的屎山架构,还有什么jni的ndk麻烦到飞起,还有版本兼容噩梦,比如得和sdk版本适配这些,建议只生成arm的so库,x86只有在模拟器经常使用,并且x86的模拟器还有arm转译,影响不大,毕竟省一点是一点 #### 如果你学习ffmpeg API做音视频开发,请你做好,迎接无声(缓冲区数据一直没有填满),卡音,卡顿,电流声(pts没有对好), 我再说说ffmpeg播放音视频流程 先打开音频输出设备并且开始,打开音频文件,查询流信息,查找音频或者视频流,初始化解码器,打开解码器,初始化重采样上下文(swr_alloc_set_opts),分配重采样缓存,启动另外一个线程处理音视频,之后就是读包,处理是pts,等等,之后到输出设备输出设备进行播放 #### 记得处理好视频的,音视频,避免画面 ,声音不同步 虽然ffmpeg麻烦,但是它比系统,框架的多媒体库自由,可以获取pcm流,拿到pcm流真的是随便玩,混淆,均衡器,音效加上,给音乐加点料,让耳朵更加享受,记住ffmpeg只是音视频编解码的,音效,均衡器这些记得使用第三方库,或者自己实现(借助大模型,自己优化) 随便带一句,真正的均衡器大佬,会使用 十段均衡器,在很多播放器都会有的 只不过会有内置的一些,比如 **流行音乐,古典音乐,舞曲,人声,高音,低音**等等这些,想好听自己学会调呀 #### 我带你玩,音视频,直播推流,远程演示,远程协助,远程控制工具,网络视频通话,语音通话的开发呀 祝你音视频开发顺利,记得本文作者 gitee主页:https://gitee.com/ccmmc(可能同步更新音视频,知识) #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)