ffmpeg4音频pcm转aac编码

简介: 本文是基于ffmpeg4开发的音频编码器开源,并对其中出现的一些bug与各界同行探讨。

     在ffmpeg版本的维护中,也给FFmpeg Programer带来更坚实的瓶颈,我们做了一类基于ffmpeg4.的pcm转aac编码器。因为不全贴代码,先提供项目链接https://download.csdn.net/download/guhongzhanchi/10815554,在编码成aac后,出现了规律的“咔咔”声,我试了下音频重采样。在

fread()之前先初始化下

image.gif

SwrContext

image.gif

//格式转换:pcm(s16)转aac(fltp)
    //asfmt = aacc->sample_fmts;
    swr_ctx = swr_alloc_set_opts(nullptr, aacctx->channel_layout, aacctx->sample_fmt,aacctx->sample_rate,
                                 aacctx->channel_layout, psfmt, aacctx->sample_rate, 0, nullptr);
    if (swr_ctx == nullptr)
    {
        fprintf(stderr, "Could not allocate resample context!\n");
        return -1;
    }
    if (swr_init(swr_ctx) < 0)
    {
        fprintf(stderr, "Failed to initialize the resampling context!\n");
        return -1;
    }

image.gif

然后在fread()之后和

avcodec_send_frame()之前

image.gif

swr_convert()

image.gif

if (swr_convert(swr_ctx, aacfr->extended_data, aacfr->nb_samples, (const uint8_t**)aacfr->data, aacfr->nb_samples) <= 0)
        {
            cout << "Audio swr_convert failed!" << endl;
            return -1;
        }

image.gif

对此就可以编码了。

     我这里出现了规律的"咔咔“杂音,社区里有朋友说是aac的buffer小了,我增加了4倍依然没解决

aacSize = av_samples_get_buffer_size(NULL, aacctx->channels,aacctx->frame_size,aacctx->sample_fmt, 1);
    aacfrBuf = (uint8_t *)av_malloc(aacSize * 4);

image.gif

也有朋友说编码时帧跟不上,从数据上分析bug我也觉得这个原因很有可能。而且这样编码后的AAC不支持原编码协议的解码,有朋友说ffmpeg4只支持硬编,根据当时的行业动态,我觉得有道理,大家有什么见解,欢迎留言。

目录
相关文章
|
4月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(三)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
157 0
|
4月前
|
存储 编解码 数据处理
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码(二)
【FFmpeg 视频基本格式】深入理解FFmpeg:从YUV到PCM,解码到编码
177 0
|
3月前
|
Java Linux
ffmpeg音频格式转换、合成、速率调整
ffmpeg音频格式转换、合成、速率调整
|
4月前
FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放
《FFmpeg开发实战》一书中,第10章示例程序playaudio.c原本仅支持mp3和aac音频播放。为支持ogg、amr、wma等非固定帧率音频,需进行三处修改:1)当frame_size为0时,将输出采样数量设为512;2)遍历音频帧时,计算实际采样位数以确定播放数据大小;3)在SDL音频回调函数中,确保每次发送len字节数据。改进后的代码在chapter10/playaudio2.c,可编译运行播放ring.ogg测试,成功则显示日志并播放铃声。
80 1
FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放
|
3月前
|
编解码 Python
音频剪裁大师:使用 Python 和 ffmpeg 分割音频的完整指南
使用 Python 和 ffmpeg 进行音频文件分割。通过 `subprocess` 模块调用 ffmpeg 命令,定义 `split_audio` 函数,输入参数包括音频文件、起始时间、持续时间和输出文件名。函数构建命令行指令进行分割,然后执行。运行脚本,即可按指定时间从音频中提取片段。简单易用,适用于多种音频处理场景。
56 1
|
4月前
|
缓存 编解码
FFmpeg开发笔记(十四)FFmpeg音频重采样的缓存
FFmpeg在视频流重编码和音频重采样中使用缓存机制。在音频文件格式转换时,特别是对于帧长度不固定的格式如ogg、amr、wma,需处理重采样缓存。通过调用`swr_convert`,传入空输入和0大小来清空缓存。在`swrmp3.c`中,修改帧样本数处理,并在循环结束后添加代码以冲刷缓存。编译并运行程序,将ogg文件重采样为MP3,日志显示操作成功,播放转换后的文件确认功能正常。
85 7
FFmpeg开发笔记(十四)FFmpeg音频重采样的缓存
|
4月前
|
编解码 API 数据处理
【摄像头数据处理】摄像头数据处理:使用FFmpeg合并、编码和封装视频流
【摄像头数据处理】摄像头数据处理:使用FFmpeg合并、编码和封装视频流
261 0
|
13天前
|
编解码 移动开发 安全
FFmpeg开发笔记(五十)聊聊几种流媒体传输技术的前世今生
自互联网普及以来,流媒体技术特别是视频直播技术不断进步,出现了多种传输协议。早期的MMS由微软主导,但随WMV格式衰落而减少使用。RTSP由网景和RealNetworks联合提出,支持多种格式,但在某些现代应用中不再受支持。RTMP由Adobe开发,曾广泛用于网络直播,但因HTML5不支持Flash而受影响。HLS由苹果开发,基于HTTP,适用于点播。SRT和RIST均为较新协议,强调安全与可靠性,尤其SRT在电视直播中应用增多。尽管RTMP仍占一定市场,但SRT等新协议正逐渐兴起。
47 8
FFmpeg开发笔记(五十)聊聊几种流媒体传输技术的前世今生
|
19天前
|
Web App开发 Java 视频直播
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
对于软件、计算机等专业的毕业生,毕业设计需实现实用软件或APP。新颖的设计应结合最新技术,如5G时代的音视频技术。示例包括: 1. **短视频分享APP**: 集成FFmpeg实现视频剪辑功能,如添加字幕、转场特效等。 2. **电商购物APP**: 具备直播带货功能,使用RTMP/SRT协议支持流畅直播体验。 3. **同城生活APP**: 引入WebRTC技术实现可信的视频通话功能。这些应用不仅实用,还能展示开发者紧跟技术潮流的能力。
51 4
FFmpeg开发笔记(四十九)助您在毕业设计中脱颖而出的几个流行APP
|
1月前
|
JavaScript 前端开发 Java
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
IT寒冬使APP开发门槛提升,安卓程序员需转型。选项包括:深化Android开发,跟进Google新技术如Kotlin、Jetpack、Flutter及Compose;研究Android底层框架,掌握AOSP;转型Java后端开发,学习Spring Boot等框架;拓展大前端技能,掌握JavaScript、Node.js、Vue.js及特定框架如微信小程序、HarmonyOS;或转向C/C++底层开发,通过音视频项目如FFmpeg积累经验。每条路径都有相应的书籍和技术栈推荐,助你顺利过渡。
39 3
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向