FFMpeg 中比较重要的函数以及数据结构如下:

  1. 数据结构:

    (1) AVFormatContext

    (2) AVOutputFormat

    (3) AVInputFormat

    (4) AVCodecContext

    (5) AVCodec

    (6) AVFrame

    (7) AVPacket

    (8) AVPicture

    (9) AVStream
  2. 初始化函数:

    (1) av_register_all()

    (2) avcodec_open()

    (3) avcodec_close()

    (4) av_open_input_file()

    (5) av_find_input_format()

    (6) av_find_stream_info()

    (7) av_close_input_file()
  3. 音视频编解码函数:

    (1) avcodec_find_decoder()

    (2) avcodec_alloc_frame()

    (3) avpicture_get_size()

    (4) avpicture_fill()

    (5) img_convert()

    (6) avcodec_alloc_context()

    (7) avcodec_decode_video()

    (8) av_free_packet()

    (9) av_free()
  4. 文件操作:

    (1) avnew_steam()

    (2) av_read_frame()

    (3) av_write_frame()

    (4) dump_format()
  5. 其他函数:

    (1) avpicture_deinterlace()

    (2) ImgReSampleContext()

AVFormatContext

一般在使用 ffmpeg sdk 的代码中 AVFormatContext 是一个贯穿始终的数据结构,很多函数都要用到它 作为参数。FFmpeg 代码中对这个数据结构的注释是:format I/O context 。

此结构包含了一个视频流的格式内容。其中存有了 AVInputFormat(or AVOutputFormat 同一时间 AVFormatContext 内只能存在其中一个),和 AVStream、AVPacket 这几个重要的数据结构以及一些其他的 相关信息,比如 title,author,copyright 等。还有一些可能在编解码中会用到的信息,诸如:duration, file_size, bit_rate 等。参考 avformat.h 头文件。

Useage: 声明:

AVFormatContext *oc; (1)

初始化:

由于 AVFormatConext 结构包含许多信息因此初始化过程是分步完成,而且有些变量如果没 有值可用,也可不初始化。但是由于一般声明都是用指针因此一个分配内存过程不可少:

oc = av_alloc_format_context(); (2)

结构中的 AVInputFormat(或 AVOutputFormat)是一定要初始化的,基本上这是编译码要使用什么 codec 的依据所在:

oc->oformat = fmt; or oc->iformat = fmt; (3)

其中 AVOutputFormat* fmt 或 AVInputFormat* fmt。(AVInputFormat and AVOutputFormat 的初始化在后 面介绍。随后在参考代码 output_example.c 中有一行:

snprintf(oc->filename, sizeof(oc->filename), “%s”, filename); (4)

还不是十分清楚有什么作用,估计是先要在输出文件中写一些头信息。

FFMpeg 中的数据结构的更多相关文章

  1. 零基础学习视频解码之FFMpeg中比较重要的函数以及数据结构

    http://www.cnblogs.com/tanlon/p/3879081.html 在正式开始解码练习前先了解下关于FFmpeg中比较重要的函数以及数据结构. 1. 数据结构:  (1) AVF ...

  2. [原]零基础学习视频解码之FFMpeg中比较重要的函数以及数据结构

    在正式开始解码练习前先了解下关于FFmpeg中比较重要的函数以及数据结构. 1. 数据结构:  (1) AVFormatContext  AVFormatContext是一个贯穿始终的数据结构,很多函 ...

  3. FFmpeg 中AVPacket的使用

    AVPacket保存的是解码前的数据,也就是压缩后的数据.该结构本身不直接包含数据,其有一个指向数据域的指针,FFmpeg中很多的数据结构都使用这种方法来管理数据. AVPacket的使用通常离不开下 ...

  4. FFmpeg中subtitle demuxer实现

    [时间:2019-01] [状态:Open] [关键词:字幕,ffmpeg,subtitle,demuxer,源码] 0 引言 本文重心在于FFmpeg中subtitle demuxer的实现逻辑. ...

  5. java中的数据结构(集合|容器)

    对java中的数据结构做一个小小的个人总结,虽然还没有到研究透彻jdk源码的地步.首先.java中为何需要集合的出现?什么需求导致.我想对于面向对象来说,对象适用于描述任何事物,所以为了方便对于对象的 ...

  6. Python 中的数据结构总结(一)

    Python 中的数据结构 “数据结构”这个词大家肯定都不陌生,高级程序语言有两个核心,一个是算法,另一个就是数据结构.不管是c语言系列中的数组.链表.树和图,还是java中的各种map,随便抽出一个 ...

  7. FFmpeg中HLS文件解析源码

    不少人都在找FFmpeg中是否有hls(m3u8)解析的源码,其实是有的.就是ffmpeg/libavformat/hlsproto.c,它依赖的文件也在那个目录中. 如果要是单纯想解析HLS的话,建 ...

  8. ffmpeg中的sws_scale算法性能测试

    经常用到ffmpeg中的sws_scale来进行图像缩放和格式转换,该函数可以使用各种不同算法来对图像进行处理.以前一直很懒,懒得测试和甄 别应该使用哪种算法,最近的工作时间,很多时候需要等待别人.忙 ...

  9. ffmpeg 中添加264支持

    转自:http://blog.sina.com.cn/s/blog_513f4e8401011yuq.html ffmpeg 中带有264的解码,没有编码,需要添加x264: 参考百度上的“windo ...

  10. [转]详细介绍java中的数据结构

    详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...

随机推荐

  1. 我第一个开源AI小产品-video2blog即将正式发布

    前言 首先它是为了解决我自己的个人问题.不管能不能帮到你,或者对于看到的你是否有点利用价值,也没太大的关系,最起码你可以来看看我开发小产品的整个过程. 一段时间以来,我开始通过youtube平台来获取 ...

  2. 如何在M1 MACBOOK上准备好ORB-SLAM2的环境

    1. 环境 M1 Macbook Air Parallels Desktop 17 关于虚拟机,在之前尝试了UTM,但是性能欠佳,卡顿情况比较多,而且未能解决联网问题,最终只能含泪放弃 Paralle ...

  3. java引入jep实现四则运算包含负数且规范两位小数

    1.在pom中引入依赖 <!--四则运算--> <dependency> <groupId>jep</groupId> <artifactId&g ...

  4. Mac安装mysql5.7

    1.下载文件(访问就直接下载了) http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.10-osx10.10-x86_64.dmg 2.打开下 ...

  5. ARM64: ARDP

    1 指令语法 ardp <Xd>, <lable> 2 指令语义 1 获取程序计数器PC寄存器的值: 2 将PC寄存器值的低12位全部取0; 3 将lable的值乘以4096, ...

  6. 使用c#强大的表达式树实现对象的深克隆

    一.表达式树的基本概念 表达式树是一个以树状结构表示的表达式,其中每个节点都代表表达式的一部分.例如,一个算术表达式 a + b 可以被表示为一个树,其中根节点是加法运算符,它的两个子节点分别是 a ...

  7. windows远程桌面和远程协助有什么区别

    一言以蔽之: windows远程桌面是被动式的,只要你开启了这个功能选项,对方有地址和密码就能使用这台计算机. windows远程协助是主动式的,需要向对方提出协助请求,对方答应后即可登录电脑,协助操 ...

  8. Windows有自带的远程桌面 为啥还要商业远程桌面

    网上有一类观点:最好的远程桌面就是windows自带的远程桌面. 那我们打破砂锅问到底,亲手实践下看看. 首先,我们来到了windows官网-远程桌面介绍页面. 如何使用远程桌面 设置你想要连接以使其 ...

  9. C语言:删除顺序表中重复的信息—(删除顺序表中重复的单词)

    如何删除顺序表中的重复单词: (开始看内容之前容朕说一句:如果你最后怎么都运行不了你想要的结果,①我敢保证大概率是你的下标越界你的下标越界了你的下标越界了.②在我这程序里面你肯定打少了p--,少了p- ...

  10. .NET6 Minimal API 集成Autofac

    前提 集成Autofac前需要先添加两个依赖包 可以通过 NuGet 进行安装,使用以下命令: dotnet add package Autofac dotnet add package Autofa ...