FFMPEG笔记

# FFMPEG结构体和函数笔记

FFMPEG 是一套可以用来记录,转换数字音频,视频,并能将其转化为流的开源计算机程序

入门前辈:雷神——雷霄骅

雷霄骅个人简介:

         雷霄骅,,中国传媒大学通信与信息系统专业博士生,荣获2014、2015年度CSDN博客之星,2015年于美国微软总部荣膺微软大中华区MVP称号。

         2016年7月 16日晚9点多进实验室,凌晨3时倒在电梯口,时年26岁。

         各个网站论坛对雷神去世一事评论:

  1. https://www.zhihu.com/question/49211380 
  2. https://blog.csdn.net/machh/article/details/52109231?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160430564019725222416930%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160430564019725222416930&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-2-52109231.pc_first_rank_v2_rank_v28&utm_term=%E9%9B%B7%E9%9C%84%E9%AA%85&spm=1018.2118.3001.4449      
  3.  https://www.cnblogs.com/huxiaopeng/p/5735354.html     

雷霄骅个人CSDN专栏: https://blog.csdn.net/leixiaohua1020       

知乎: https://blog.csdn.net/machh/article/details/52109231?ops_request_misc=%257B%2522req   uest%255Fid%2522%253A%2522160430564019725222416930%2522%252C%2522scm%25        22%253A%252220140713.130102334..%2522%257D&request_id=16043056401972522241 ank_v28-2-52109231.pc_first_rank_v2_rank_v28&utm_term=%E9%9B%B7%E9%9C%84%E9      %AA%85&spm=1018.2118.3001.4449  

OSCHINA::https://my.oschina.net/leixiaohua1020     

     

 

 

 

FFMPEG源代码结构图

链接:https://img-my.csdn.net/uploads/201503/12/1426134989_1189.jpg      

 

 

 

FFMPEG官方文档:https://www.ffmpeg.org/doxygen/4.1/index.html      

一.结构体

 

 

链接:https://blog.csdn.net/leixiaohua1020/article/details/41181155

详细链接:https://blog.csdn.net/leixiaohua1020/article/details/11693997

AVFormatContext:统领全局的基本结构体。主要用于处理封装格式(FLV/MKV/RMVB等)。

AVIOContext:输入输出对应的结构体,用于输入输出(读写文件,RTMP协议等)。

AVCodec:

AVStream,AVCodecContext:视音频流对应的结构体,用于视音频编解码。

AVFrame:存储非压缩的数据(视频对应RGB/YUV像素数据,音频对应PCM采样数据)

AVPacket:存储压缩数据(视频对应H.264等码流数据,音频对应AAC/MP3等码流数据)

 

二.函数解析

  1. av_register_all()

函数体:void av_register_all(void);

函数功能:注册解码器,复用器等

官方:av_register_all() to register all compiled muxers, demuxers and protocols.

总结:必须第一个调用,但4.0版本已经弃用

链接:https://blog.csdn.net/leixiaohua1020/article/details/12677129

  1. avdevice_register_all()

函数体:void avdevice_register_all(void);

函数功能:对设备进行注册

官方:* To use libavdevice, simply call avdevice_register_all() to register all

        * compiled muxers and demuxers. They all use standard libavformat API.

 * @}

   总结:调用摄像头之类设备必须先对设备进行注册

   链接:https://blog.csdn.net/leixiaohua1020/article/details/41211121

  1. avformat_network_init()

函数体:int avformat_network_init(void);

函数功能:初始化网络库以及网络加密协议相关的库(openssl)

官方:Undo the initialization done by avformat_network_init.

总结:在使用rtsp等网络视频流时使用

链接:https://blog.csdn.net/leixiaohua1020/article/details/12677265

  1. avformat_alloc_context()

函数体:AVFormatContext *avformat_alloc_context(void);

函数功能:负责申请一个AVFormatContext结构的内存,并进行简单初始化

官方:To create an * AVFormatContext, use avformat_alloc_context

总结:AVFormatContext的初始化函数,对应的销毁函数为avformat_free_context()

链接:https://blog.csdn.net/leixiaohua1020/article/details/41181155

  1. avformat_open_input()

函数体:int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options);

参数说明:

ps:函数调用成功之后处理过的AVFormatContext结构体。
file:打开的视音频流的URL。
fmt:强制指定AVFormatContext中AVInputFormat的。这个参数一般情况下可以设置为NULL,这样FFmpeg可以自动检测AVInputFormat。

dictionay:附加的一些选项,一般情况下可以设置为NULL。

函数功能:打开输入视频文件

官方:

总结:函数执行成功,返回值>=0

链接:https://blog.csdn.net/leixiaohua1020/article/details/44064715 

  1. av_dump_format()

函数体:void av_dump_format(AVFormatContext *ic,int index,const char *url,   int is_output)

函数功能:打印关于输入和输出格式的详细信息,检查下初始化过程中设置的参数是否符合规范

官方参数说明:

 * @param ic already initialized Format Context, must not be NULL.

 * @param index index of the stream to dump information about

 * @param url name of file or URL of stream to print information about

 * @param is_output Select whether specified context is of input(0) or output(1)

总结: 输出详细信息

链接:https://blog.csdn.net/yao_hou/article/details/104102235   

  1. avformat_find_stream_info()

函数体:int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);

函数功能:读取一部分视音频数据获取相关信息,位于libavformat\avformat.h

官方:

            * @param ic    media file handle

             * @param last  the last found program, the search will start after this

            *              program, or from the beginning if it is NULL

            * @param s     stream index

            * @return the next program which belongs to s, NULL if no program is found or

            * the last program is not among the programs of ic.

总结: 读取信息,函数执行成功,返回值值大于等于0

链接:https://blog.csdn.net/leixiaohua1020/article/details/44084321

  1. avcodec_find_decoder()

函数体:AVCodec *avcodec_find_decoder(enum AVCodecID id);

函数功能:查找FFMPEG的解码器

官方:

         * Find a registered decoder with a matching codec ID.

         * @param id AVCodecID of the requested decoder

      * @return A decoder if one was found, NULL otherwise.

总结: 根据ID找到对应的解码器,也可使用avcodec_find_decoder_by_name()

链接:https://blog.csdn.net/leixiaohua1020/article/details/44084557 

  1. avcodec_open2()

函数体:int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);

函数功能:初始化一个视音频解码器的AVCodecContext,位于libavcodec\avcodec.h

参数:

codec:输入的AVCodec
       options:一些选项。例如使用libx264编码的时候,“preset”,“tune”等都可以通过该参 数设置。

总结: 初始化解码器格式

链接:https://blog.csdn.net/leixiaohua1020/article/details/44117891     

  1. av_frame_alloc()

函数体:AVFrame *av_frame_alloc(void);

函数功能:分配AVFrame内存空间

官方:

         * Allocate an AVFrame and set its fields to default values.  The resulting

         * struct must be freed using av_frame_free().

      * @return An AVFrame filled with default values or NULL on failure.

总结: 分配内存空间

链接:https://blog.csdn.net/qq_25333681/article/details/89743660

11.sws_getContext()

函数体:初始化一个SwsContext

    struct SwsContext *sws_getContext(int srcW, int srcH, enum AVPixelFormat srcFormat,

                                  int dstW, int dstH, enum AVPixelFormat dstFormat,

                                  int flags, SwsFilter *srcFilter,

                              SwsFilter *dstFilter, const double *param);

函数功能:初始化一个SwsContext,为图像处理做准备

官方:* @param srcW the width of the source image

         * @param srcH the height of the source image

         * @param srcFormat the source image format

         * @param dstW the width of the destination image

         * @param dstH the height of the destination image

         * @param dstFormat the destination image format

         * @param flags specify which algorithm and options to use for rescaling

      * @return a pointer to an allocated context, or NULL in case of error

总结:后三个常见为NULL

链接:https://blog.csdn.net/leixiaohua1020/article/details/44305697 

  1. av_read_frame()

函数体:

函数功能:

官方:

总结:

链接:

  1. avcodec_decode_video2()

函数体:

函数功能:

官方:

总结:

链接:

  1. sws_scale()

函数体: int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[],

                       const int srcStride[], int srcSliceY, int srcSliceH,

               uint8_t *const dst[], const int dstStride[]);

函数功能:处理图像数据

官方:

         * @param c         the scaling context previously created with

         *                  sws_getContext()

         * @param srcSlice  the array containing the pointers to the planes of

         *                  the source slice

         * @param srcStride the array containing the strides for each plane of

         *                  the source image

         * @param srcSliceY the position in the source image of the slice to

         *                  process, that is the number (counted starting from

         *                  zero) in the image of the first row of the slice

         * @param srcSliceH the height of the source slice, that is the number

         *                  of rows in the slice

         * @param dst       the array containing the pointers to the planes of

         *                  the destination image

         * @param dstStride the array containing the strides for each plane of

         *                  the destination image

         * @return          the height of the output slice

总结: 图像处理执行函数

链接:https://blog.csdn.net/leixiaohua1020/article/details/44346687 

15.avpicture_fill()

函数体:int avpicture_fill(AVPicture *picture, const uint8_t *ptr,

                 enum AVPixelFormat pix_fmt, int width, int height);

函数功能:将ptr指向的数据填充到picture内,但并没有拷贝,只是将picture结构内的data指针指向了ptr的数据

 

 

官方:

     @param dst_data         要填充的数据指针

     @param dst_linesize     dst_data中要被填充的线条大小(即linesize, 行宽)

     @param src              包含实际图像的缓冲区(可以为空).

     @param pix_fmt          图像的像素格式

     @param width         图像的像素宽度

     @param height            图像的像素高度

     @param align         在src中用于行宽对齐的值

     @return the size in bytes required for src, a negative error code in case of failure

             该函数返回src所需的大小(以字节为单位), 失败时返回一个负数(错误代码).

总结:在FFMPEG4.2.2被抛弃,被av_image_fill_arrays()替代

链接:https://blog.csdn.net/macmacip/article/details/105463390?utm_medium=distribute.pc_relevant.none-task-blog-title-3&spm=1001.2101.3001.4242

16.av_free_packt()

函数体:void av_free_packet(AVPacket *pkt);

函数功能:释放AVPacket对象

官方:@param pkt packet to free

总结:

链接:

17.XXXXXX

 

函数体:

函数功能:

官方:

总结:

链接:

 

 

Demo程序学习

1.100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x)

 https://blog.csdn.net/leixiaohua1020/article/details/8652605  

2.

 

 

图像视频编码和FFMPEG学习

  1. luotuo44  https://blog.csdn.net/luotuo44/category_2275719.html  
  2. 雷霄骅  https://blog.csdn.net/leixiaohua1020/article/details/15811977    

 

posted @   我才不是老家伙  阅读(78)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示