转自:http://blog.csdn.net/oldmtn/article/details/20830285
我自己解码的时候遇到点问题,暂时先占位。后面若搞定了,再添加。

// 2014/3/9 -- 19:24更新

[cpp] view plaincopy print?
  1. FILE *pFile;
  2. pFile = fopen("wavinflag.pcm", "wb");
  3. while( av_read_frame(pFormatCtx, packet) >= 0 ) {
  4. if( packet->stream_index == audioStream ) {
  5. int got_picture;
  6. int ret = avcodec_decode_audio4( audioCodecCtx, audioFrame, &got_picture, packet);
  7. if( ret < 0 ) {
  8. printf("Error in decoding audio frame.\n");
  9. exit(0);
  10. }
  11. if( got_picture ) {
  12. int in_samples = audioFrame->nb_samples;
  13. short *sample_buffer = (short*)malloc(audioFrame->nb_samples * 2 * 2);
  14. memset(sample_buffer, 0, audioFrame->nb_samples * 4);
  15. printf("in_samples = %d\n", in_samples);
  16. int i=0;
  17. float *inputChannel0 = (float*)(audioFrame->extended_data[0]);
  18. // Mono
  19. if( audioFrame->channels == 1 ) {
  20. for( i=0; i<in_samples; i++ ) {
  21. float sample = *inputChannel0++;
  22. if( sample < -1.0f ) {
  23. sample = -1.0f;
  24. } else if( sample > 1.0f ) {
  25. sample = 1.0f;
  26. }
  27. sample_buffer[i] = (int16_t)(sample * 32767.0f);
  28. }
  29. } else { // Stereo
  30. float* inputChannel1 = (float*)(audioFrame->extended_data[1]);
  31. for( i=0; i<in_samples; i++) {
  32. sample_buffer[i*2] = (int16_t)((*inputChannel0++) * 32767.0f);
  33. sample_buffer[i*2+1] = (int16_t)((*inputChannel1++) * 32767.0f);
  34. }
  35. }
  36. fwrite(sample_buffer, 2, in_samples*2, pFile);
  37. }
  38. }
  39. // Free the packet that was allocated by av_read_frame
  40. av_free_packet(packet);
  41. }

在使用ffmpeg解码aac的时候,如果使用avcodec_decode_audio4函数解码,那么解码出来的会是AV_SAMPLE_FMT_FLTP 格式的数据( float, 4bit , planar), 如果我们希望得到16bit的数据(如AV_SAMPLE_FMT_S16P数据),那么我们需要转换一下:

解決方式: 
   將 samples 由 32bits 转为16bits. 参考 ffmpeg samplefmt.h 
   若 sample 是 AV_SAMPLE_FMT_FLTP,則 sample 會是 float 格式,且值域为 [-1.0, 1.0] 
   若 sample 是 AV_SAMPLE_FMT_S16, 則 sample 會是 int16 格式,且值域为 [-32767, +32767]

这里SDL2.0播放pcm有点问题,还没弄会。

将FLTP转为S16代码,详细代码这里下载。

ffmpeg (三):ffmpeg结合SDL2.0解码音频流相关推荐

  1. ffmpeg (二):ffmpeg结合SDL2.0解码视频流

    转自:http://blog.csdn.net/oldmtn/article/details/20284721 看了http://blog.csdn.NET/leixiaohua1020/articl ...

  2. VScode配置ffmpeg+sdl2.0开发环境(window+MinGW)

    目录 VScode下载及安装: 下载 安装c/c++扩展包 MinGW-64下载及安装: 下载: 安装: 测试: VScode配置c++编译调试环境 新建测试工程 配置c/c++环境配置文件文件c_c ...

  3. 最简单的基于FFMPEG+SDL的视频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的视频播放器系列文章列表: 100行代码实现最简单的基于FFMPEG ...

  4. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  5. 用FFMpeg5.0解码SDL2.0播放制作跨平台音乐播放器

    在此我以windows为例,用FFMpeg解码SDL作为音频播放制作一个简单的播放器.同样的做法可以在linux,MacOS,Andriond等系统都是可行的.因为FFMpeg和SDL都是开源的多平台 ...

  6. 【Qt+FFmpeg】 - FFmpeg解码详细流程

    目录 一:视频解码流程 二:FFMPEG解码流程 三:FFmpeg解码函数 四:FFmpeg解码的数据结构 五:FFmpeg数据结构简介 六:FFmpeg数据结构分析 七:像素数据转换 八:FFMPE ...

  7. 【Qt+FFmpeg】FFmpeg解码本地视频流程

    目录 一.视频播放器的实现框架 1.解封装(Demuxing) 2.解码(Decode) 3.音视频同步 二.FFmpeg解码视频流程 1.FFmpeg解码视频流程图 2. 代码实现 一.视频播放器的 ...

  8. 【七】【vlc-android】vlc的decoder控制层传输数据与ffmpeg音频解码模块decoder层进行解码的数据交互流程源码分析

    [以mp4文件格式和AAC.H264编码的本地文件为例展开分析] 由第六章节可知音频解码器的加载方式与视频解码器也是类似的. 通过此前分析过的模块加载方式,可找到ffmpeg解码和编码模块的初始化加载 ...

  9. FFmpeg再学习 -- 硬件加速编解码

    为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...

最新文章

  1. JAVA高级特性--自动拆箱-装箱,枚举类型
  2. java线程——join
  3. 计算机视觉(AI)的算法有哪些,具体都有哪些特点?
  4. 对ActiveRecord的评论
  5. mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析
  6. SAP标准培训课程C4C10学习笔记(三)第三单元
  7. 使用IndexReader.repen提高搜索速度
  8. QLive EULA
  9. python正则匹配找到所有的浮点数_如何利用Python抓取静态网站及其内部资源
  10. 谈PaaS平台建设:如何应对企业架构多元异构资源的挑战
  11. 内置函数——hasattr() 函数
  12. python中字典的知识讲解
  13. 一个屌丝程序猿的人生(五十三)
  14. Java内存模型(JMM)
  15. 写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息
  16. 水货苹果笔记本(Mac Book)验机流程
  17. 大数据随记 —— Hadoop 环境搭建
  18. 橱柜选购要简约实用 合理配置能够节省成本
  19. win10默认网关不可用解决
  20. php文件怎么打开你知道吗?

热门文章

  1. SQL*Plus环境下创建PLUSTRACE角色
  2. Java 操作MySql Blob 字段
  3. 机器学习--详解基于梯度下降的Logistic回归算法原理
  4. mft文件记录属性头包括_学懂主流NTFS分区文件系统,你也可以成为MM眼中的大神!...
  5. 虚拟仪器的python实现_基于Python的虚拟仪器技术探究及实现.pdf
  6. python精彩编程200例百度_完整word版,python经典例题100道
  7. LeetCode 985 Sum of Even Numbers After Queries 解题报告
  8. linux安装svn(yum安装)
  9. Vue.js(2.x)之插值
  10. [BZOJ4542] [Hnoi2016] 大数 (莫队)