1. 注册所有解码器
 av_register_all();

2. Codec & CodecContext

AVCodec* codec = avcodec_find_decoder(CODEC_ID_AAC);
    if (!codec)
    {
        fprintf(stderr, "codec not found\n");
        exit(1);
    }

AVCodecContext *codec_ctx= avcodec_alloc_context();

if (avcodec_open(codec_ctx, codec) < 0)
    {
        fprintf(stderr, "could not open codec\n");
        exit(1);
    }

3. 准备好AVPacket
 AVPacket avpkt;
 av_init_packet(&avpkt);
    avpkt.size = pesdec.m_nEsLength;
    avpkt.data = pesdec.m_pEs;
    avpkt.pts = pesdec.m_nPts;

4. 准备好一个足够大的output buffer,用于存储音频解码得到的数据
奇怪的是长度要为AVCODEC_MAX_AUDIO_FRAME_SIZE *2,少了还不行(aac音频时,会crash)
 int16_t * outbuf = new int16_t[AVCODEC_MAX_AUDIO_FRAME_SIZE * 2];

5. 解码
 while(1)
 {
  // 读取一个完整的PES

// 解码
  while (avpkt.size > 0)
  {
   int out_size = AVCODEC_MAX_AUDIO_FRAME_SIZE; // 对于AAC解码器来说,长度不能小于这个
   int len = avcodec_decode_audio3(codec_ctx, (short *)outbuf, &out_size, &avpkt);
   if (len <= 0)
   {
    fprintf(stderr, "Error while decoding\n");
    break;
   }

if (out_size > 0)
   {
    double pts = (double) avpkt.pts / 45000;
    printf("[time: %.3f] sound sample \n", pts);

// fwrite(outbuf, 1, out_size, outfile);
    // printf("get %d bytes.\n", out_size);
   }

avpkt.size -= len;
   avpkt.data += len;
  }
 }

6. 释放资源
   delete [] outbuf;

avcodec_close(codec_ctx);
    av_free(codec_ctx);

FFmpeg - 音频解码过程相关推荐

  1. Android NDK开发之旅31 FFmpeg音频解码

    ###前言 #####基于Android NDK开发之旅30--FFmpeg视频播放这篇文章,我们已经学会视频解码基本过程.这篇文章就对音频解码进行分析. #####音频解码和视频解码的套路基本是一样 ...

  2. ffmpeg 音频解码二

    1. ffmpeg 视频解码一 2. ffmpeg 视频解码二 3. ffmpeg 音频解码一 4. ffmpeg 音频解码二 5. ffmpeg 音视频解码 6. ffmpeg 视频编码一 7. f ...

  3. FFMPEG音频解码浅析

    结合各种资料和自己的理解,估计有些浅显. FFMPEG解码流程: 1. 注册所有容器格式和CODEC: av_register_all() 2. 打开文件: av_open_input_file() ...

  4. FFmpeg音频解码流程详解及简单demo参考

    本文主要讲解FFmpeg的音频解码具体流程,API使用.最后再以一个非常简单的demo演示将一个mp3格式的音频文件解码为原始数据pcm文件. 本文主要基于FFmpeg音频解码新接口. 一.FFmpe ...

  5. 深入浅出:FFmpeg 音频解码与处理AVFrame全解析

    深入浅出:FFmpeg 音频解码与处理全解析 一.FFmpeg 简介 1.1 FFmpeg 的历史与发展 1.2 FFmpeg 的主要组成部分 二.音频编解码基础 (Basics of Audio E ...

  6. ffmpeg中音频解码方法(附代码)+ffmpeg音频解码播放速度快的问题(随手笔记,以供查阅)

    最近在做一款取名为变速不变调播放器的时候,解码音频遇到了些问题(ffmpeg音频解码播放速度快的问题),网络上的方法对绝大多数的音视频文件有效,但是对于某些音频会有问题,比如某些ADPCM编码的WAV ...

  7. ffmpeg 音频解码一

    1. ffmpeg 视频解码一 2. ffmpeg 视频解码二 3. ffmpeg 音频解码一 4. ffmpeg 音频解码二 5. ffmpeg 音视频解码 6. ffmpeg 视频编码一 7. f ...

  8. FFmpeg音频解码-音频可视化

    最近在做一个音频可视化的业务,网上有Java层的实现方法,但是业务需要用C实现,从原理出发其实很简单,先对音频进行解码,再计算分贝.这比把大象放进冰箱还简单.本文从音频可视化的业务为依托,以FFmpe ...

  9. ffmpeg音频解码重采样(立体声转成单声道)

    https://blog.csdn.net/qq_37003193/article/details/93870141 PCM双声道分离为单声道 https://blog.csdn.net/chinab ...

最新文章

  1. 判断小数是否相等_四年级上册数学填空+计算+判断易错题整理练习,收藏练一练!...
  2. mysql 合并分钟_mysql合并和时间函数
  3. windows10商店无法下载linux,Windows 10 Store 下载极慢
  4. 自动驾驶轻松开发?华为云ModelArts赋能智慧出行
  5. mysql数据库用doc命令_MySQl数据库常用的DOS命令
  6. 简单易学!一步步带你理解机器学习算法——马尔可夫链蒙特卡罗(MCMC)
  7. 阿里巴巴android图标素材网,阿里巴巴矢量图标库
  8. Unity3D 虚拟现实开发(一)
  9. C++后台开发技术栈
  10. 如何建立线上问题快速响应机制
  11. lighttpd 使用
  12. linux清理垃圾文件,安装及使用Sweeper从Linux系统上清除垃圾文件
  13. Technorati 2008 年度博客状况报告(第一部分)
  14. Retrofit 框架详解和使用
  15. Shodan Hacking
  16. 剑指offer之简单题(三)
  17. [论文阅读笔记14]Nested named entity recognition revisited
  18. 说说 隋唐演义 等英雄排名
  19. 科研诚信与学术规范_Mooc_2018_期末考试答案
  20. SLF4J: The requested version 1.5.8 by your slf4j binding is not compatible with [1.6] SLF4J: See htt

热门文章

  1. Java里a和b哪个大_Java中 a+=b和a=a+b有什么区别?
  2. java 取pdf 文本域_java – 使用iText从pdf文件中提取文本列
  3. java基础知识复习
  4. gnu.getopt java_c – 用于GNU getopt()的-W选项是什么?
  5. c语言辗转相除法求最大公约数_趣味探究:妙法求“最大公因数”,比书上难一点,你敢挑战吗?(适合56年级)...
  6. 添加一列_办公软件操作技巧023:如何给excel数据批量添加单位
  7. c语言第五章作业,《C语言程序设计》第五章作业.doc
  8. Eclipse 答疑:Eclipse 使用 Amateras UML 创建类图点击 Finish 没反应解决方式汇总
  9. 编译原理:文法及其二义性(判定及消除)
  10. C语言和C++的区别整理详解!