`

[音频处理API] ffmpeg视频文件解码代码流程分析

    博客分类:
  • C
阅读更多
通过学习网上博友“浩@子”的博客,搞懂了1)ffmpeg源码中libavformat和libaccodec之间的区别;2)ffmpeg中视频解码的代码流程。这里我先用简要语言和伪码来对这两点进行说明,然后在二楼贴出博客原文。
     libavformat库:对音频和视频流进行分离,输入是音视频文件,输出是单独的音频流和视频流。
     libavcodec库:对音频流和视频流按照其格式进行编码和解码。编码格式转换就是在这个库完成。
     视频解码的伪码流程:
     (1)打开视频文件  av_open_input_file(&pFormatCtx, filename)
          打开filename指向的文件,将文件信息存入上下文结构pFormatCtx中。
     (2)取出视频流  av_find_stream_info(pFormatCtx)
          取出的视频流也放在上下文结构中 pFormatCtx->stream field。
      (3) 根据上下文中编码信息找到对应的编码器  pCodec = avcodec_find_decoder(pFormatCtx->codec_id)
          编码器即对应libavcodec库中对应的编解码函数。
      (4) 打开编码器   avcodec_open(pCodecCtx)
      (5) 循环调用GetNextFrame将视频流转换成一帧一帧的RGB格式。
          GetNextFrame(pFormatCtx, pFrame)
          {
              avcodec_decode_video(pFormatCtx, pFrame) //将一帧解码到YUV格式的pFrame
          }
          while(GetNextFrame(pFormatCtx, pCodecCtx, pFrame))
          {
              img_covert(pFrameRGB, pFrame)  //格式从YUV转换为RGB
              DoSomething()  //帧图片存盘或播放
          }
       (6) 释放分配的资源  av_free(pFrame)
                           av_free(pFremeRGB)
                           avcodec_close(pCodecCtx) //关闭编解码器
                           av_close_input_file(pFormatCtx) //关闭原始视频文件
分享到:
评论

相关推荐

    demo4.rar:《第4课 FFmpeg播放本地mp4文件》对应源文件

    要显示视频画面,就要先用FFmpeg读取本地mp4文件,mp4...与处理rtmp流类似,要播放音频,同样要用FFmpeg对mp4文件中的音频流进行解码获取到音频帧,然后将音频帧数据喂给由Windows系统声音播放API构成的函数就可以了。

    最简单的基于FFMPEG+SDL的音频播放器 2 (修正)

    该播放器虽然简单,但是几乎包含了使用FFMPEG播放一个音频所有必备的API,并且使用SDL播放解码出来的音频。 该版本使用SDL2.0替代了原先的SDL1.2 相比旧版本的改动: *重建了工程,删掉了不必要的代码,把代码修改...

    基于 FFmpeg2.5.11 实现 g711+h264 写入 mp4 文件 ( 不支持H264编解码 )

    实现代码主要参考雷神的视音频复用器(muxer),来实现 g711+h264 写入MP4文件。 (不支持H264编解码) 雷神: https://blog.csdn.net/leixiaohua1020/article/details/39802913。

    Qt 基于FFmpeg的视频播放器 - QtFFmpegPlayer

    > `FFmpeg`是一个开源的跨平台音视频处理工具,它提供了音视频编解码、格式转换、流媒体处理等功能。`FFmpeg可以在命令行中使用,也可以通过API集成到其他应用程序中使用`。FFmpeg支持众多音视频编码格式,如MP3、...

    最简单的基于FFMPEG+SDL的音频播放器 2

    该播放器虽然简单,但是几乎包含了使用FFMPEG播放一个音频所有必备的API,并且使用SDL播放解码出来的音频。 该版本使用SDL2.0替代了原先的SDL1.2 相比旧版本的改动: *重建了工程,删掉了不必要的代码,把代码修改...

    通过ffmpeg将AAC格式转成WAV格式

    通过ffmpeg提供的API完成AAC文件的解码。 编译环境 VS2008 开发语言 C

    demo3.rar:《第3课 使用FFmpeg获取并播放音频流》对应源文件

    要显示视频画面,就要先用FFmpeg拉取rtmp流,rtmp流中既有视频流也有音频流,FFmpeg对其中的视频流进行解码获取到视频帧,然后将视频帧用openCV转换为Mat数组,最后用openCV将Mat数组显示出来就可以了。用openCV将...

    最简单的基于FFMPEG+SDL的音频播放器

    FFMPEG工程浩大,可以参考的书籍又不是很多,因此很多刚学习FFMPEG的人常常感觉到无从下手。...该播放器虽然简单,但是几乎包含了使用FFMPEG播放一个音频所有必备的API,并且使用SDL播放解码出来的音频。

    ffmpeg基础库编程开发

    ffmpeg基础库开发技术,介绍ffmpeg api的使用,多媒体开发必不可少的技能。 1. AVFormatContext:就是对容器或者媒体文件层次的抽象。 2. AVStream:在文件中(容器里面)包含了多路流(音频流、视频流、字幕流),...

    最简单的基于FFMPEG+SDL的音频播放器 (classic)

    该播放器虽然简单,但是几乎包含了使用FFMPEG播放一个音频所有必备的API,并且使用SDL播放解码出来的音频。 相比旧版的改动: 重建了工程,删掉了不必要的代码,把代码修改得更规范更易懂。 可以通过宏控制是否使用...

    最简单的基于FFMPEG+SDL的音频播放器 1.2 (修正)

    该播放器虽然简单,但是几乎包含了使用FFMPEG播放一个音频所有必备的API,并且使用SDL播放解码出来的音频。 相比旧版本的改动: 重建了工程,删掉了不必要的代码,把代码修改得更规范更易懂。 可以通过宏控制是否...

    lining1111#FFmpeg_Demo#12-使用FFmpeg SDK进行音频编解码1

    12-使用FFmpeg SDK进行音频编解码着重介绍如何调用libavcodec库中相关API,将PCM格式的原始音频采样数据编码为MP3格式或者AAC格式的音

    最简单的基于FFMPEG+SDL的音频播放器 1.2

    该播放器虽然简单,但是几乎包含了使用FFMPEG播放一个音频所有必备的API,并且使用SDL播放解码出来的音频。 相比旧版本的改动: 重建了工程,删掉了不必要的代码,把代码修改得更规范更易懂。 可以通过宏控制是否...

    WasmVideoPlayer:使用wasm和webgl和网络音频api播放文件流,使用ffmpeg来支持多编解码器,尤其是h265,支持http,websocket,http-flv流

    @[TOC](基于WASM的H265 Web播放器) 1 背景 目前这个时间点,原生支持H265(HEVC)播放的浏览器极少,可以说基本没有,主要原因一个是H265的解码...本文相关的代码使用WASM、FFmpeg、WebGL、Web Audio等组件实现了一个简易

    FFMPEG_apiexample.c_随机

    FFMPEG_apiexample.c_随机 随机产生视频 音频,分为四个模块,独立音频编码,音频解码,视频编码,视频解码。对源码未作过大改动。

    Delphi FFMpeg + BASS实例

    使用Delphi开发的FFMpeg + BASS例子,本例子简单的实现FFMpeg音视频解码播放。例子中给出了音频及视频的简单处理以及渲染方法。例子为纯FFMpeg API调用,无需安装FFVCL等控件。

    android音视频.zip

    项目是进行android音视频进阶的整个流程学习流程代码,其中包括1.在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View 2.在 Android 平台使用 AudioRecord 和 AudioTrack ...

    最简单的基于FFMPEG+SDL的音频播放器(2014.5.6)

    FFMPEG工程浩大,可以参考的书籍又不是很...该播放器代码十分简单,但是几乎包含了使用FFMPEG播放一个音频所有必备的API,并且使用SDL播放解码出来的音频。十分适合FFmpeg的初学者。 使用了2014.5.6版本的FFmpeg类库。

    Android平台点对点音视频对讲源码.zip

    1. Android Camera2 API 采集预览视频 2. MediaCodec 进行硬编码,编码成h264视频文件 3. AudioRecord采集音频PCM数据,同样利用MediaCodec编码成AAC数据 4. jrtplib库进行视频音频数据发送,本项目修改jrtplib库,...

    python ffmpeg任意提取视频帧的方法

    音/视频工具 FFmpeg 简易安装文档 2、安装 ffmpeg-python pip3 install ffmpeg-python 3、【可选】安装 opencv-python pip3 install opencv-python 4、【可选】安装 numpy pip3 install numpy 视频帧提取 准备...

Global site tag (gtag.js) - Google Analytics