博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AAC--ffmpeg解码
阅读量:3920 次
发布时间:2019-05-23

本文共 2143 字,大约阅读时间需要 7 分钟。

新版ffmpeg 解码aac 默认output 为 AV_SAMPLE_FMT_FLTP//无法播放,要转格式才能播放----即重采样swr转换格式

通过ffmpeg对acc音频解码后,音频的存储格式为AV_SAMPLE_FMT_FLTP,需要将其转换为AV_SAMPLE_FMT_S16P后,用dsound进行播放。

AV_SAMPLE_FMT_FLTP转AV_SAMPLE_FMT_S16P,参考官网:

写wav文件头//后续只要嫁给你ffmpeg得到的pkt.data写进去就行了

static int write_wav_header(int iBitPerSample,int iChans,   unsigned char ucFormat         ,int iSampleRate,int iTotalSamples,FILE*pFile){
unsigned char header[44]; unsigned char* p = header; unsigned int bytes = (iBitPerSample + 7) / 8; float data_size = (float)bytes * iTotalSamples; unsigned long word32; *p++ = 'R'; *p++ = 'I'; *p++ = 'F'; *p++ = 'F'; word32 = (data_size + (44 - 8) < (float)MAXWAVESIZE) ? (unsigned long)data_size + (44 - 8) : (unsigned long)MAXWAVESIZE; *p++ = (unsigned char)(word32 >> 0); *p++ = (unsigned char)(word32 >> 8); *p++ = (unsigned char)(word32 >> 16); *p++ = (unsigned char)(word32 >> 24); *p++ = 'W'; *p++ = 'A'; *p++ = 'V'; *p++ = 'E'; *p++ = 'f'; *p++ = 'm'; *p++ = 't'; *p++ = ' '; *p++ = 0x10; *p++ = 0x00; *p++ = 0x00; *p++ = 0x00; if (ucFormat == AV_SAMPLE_FMT_FLT) {
*p++ = 0x03; *p++ = 0x00; } else {
*p++ = 0x01; *p++ = 0x00; } *p++ = (unsigned char)(iChans >> 0); *p++ = (unsigned char)(iChans >> 8); word32 = (unsigned long)(iSampleRate + 0.5); *p++ = (unsigned char)(word32 >> 0); *p++ = (unsigned char)(word32 >> 8); *p++ = (unsigned char)(word32 >> 16); *p++ = (unsigned char)(word32 >> 24); word32 = iSampleRate * bytes * iChans; *p++ = (unsigned char)(word32 >> 0); *p++ = (unsigned char)(word32 >> 8); *p++ = (unsigned char)(word32 >> 16); *p++ = (unsigned char)(word32 >> 24); word32 = bytes * iChans; *p++ = (unsigned char)(word32 >> 0); *p++ = (unsigned char)(word32 >> 8); *p++ = (unsigned char)(iBitPerSample >> 0); *p++ = (unsigned char)(iBitPerSample >> 8); *p++ = 'd'; *p++ = 'a'; *p++ = 't'; *p++ = 'a'; word32 = data_size < MAXWAVESIZE ? (unsigned long)data_size : (unsigned long)MAXWAVESIZE; *p++ = (unsigned char)(word32 >> 0); *p++ = (unsigned char)(word32 >> 8); *p++ = (unsigned char)(word32 >> 16); *p++ = (unsigned char)(word32 >> 24); return fwrite(header, sizeof(header), 1, pFile);}

转载地址:http://dbhrn.baihongyu.com/

你可能感兴趣的文章
dotNET:怎样处理程序中的异常(实战篇)?
查看>>
What is 测试金字塔?
查看>>
.Net Core HttpClient处理响应压缩
查看>>
十分钟搭建自己的私有NuGet服务器-BaGet
查看>>
efcore 新特性 SaveChanges Events
查看>>
龙芯3A5000初样顺利交付流片
查看>>
用了Dapper之后通篇还是SqlConnection,真的看不下去了
查看>>
ABP快速开发一个.NET Core电商平台
查看>>
[NewLife.Net]单机400万长连接压力测试
查看>>
使用Azure人脸API对图片进行人脸识别
查看>>
快醒醒,C# 9 中又来了一堆关键词 init,record,with
查看>>
【招聘(深圳)】轻岁 诚聘.NET Core开发
查看>>
欢迎来到 C# 9.0(Welcome to C# 9.0)
查看>>
Dapr微服务应用开发系列1:环境配置
查看>>
使用 Visual Studio 2019 批量添加代码文件头
查看>>
【BCVP更新】StackExchange.Redis 的异步开发方式
查看>>
.NET5.0 Preview 8 开箱教程
查看>>
真・WPF 按钮拖动和调整大小
查看>>
做权限认证,还不了解IdentityServer4?不二话,赶紧拥抱吧,.NET Core官方推荐!...
查看>>
编写第一个 .NET 微服务
查看>>