• ffmpeg重要函数和结构体整理


    自己学习记录,方便以后查看。 

    =======================================================================================================================
    ffmpeg关键结构体类型:
    
    1)解协议
    
    AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。
    
    每种协议都对应一个URLProtocol结构。(注意:FFMPEG中文件也被当做一种协议“file”)。
    
    2)解封装
    
    AVFormatContext主要存储视音频封装格式中包含的信息;AVInputFormat存储输入视音频使用的封装格式。
    
    每种视音频封装格式都对应一个AVInputFormat 结构。
    
    3)解码
    
    每个AVStream存储一个视频/音频流的相关数据;每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据;
    
    每个AVCodecContext中对应一个AVCodec,包含该视频/音频对应的解码器。每种解码器都对应一个AVCodec结构。
    
    4)存数据
    
    视频的话,每个结构一般是存一帧;音频可能有好几帧
    
    解码前数据:AVPacket
    
    解码后数据:AVFrame
    
    ------------------------------------------------------------------------------------------------------------------------
    
    AVOutputFormat:输出文件容器,包含音频、视频、字幕编码器ID
    
    AVInputFormat: 输入文件容器
    
    ------------------------------------------------------------------------------------------------------------------------
    
    AVFormatContext:它是FFMPEG解封装(flv,mp4,rmvb,avi)功能的结构体,
    
    	包含:输入数据缓存、视音频流个数、视音频流、文件名、时长、码率,元数据等信息。
    
    AVCodecContext:封装编解码器功能的结构体。包括:编解码器的类型(视频,音频...)、编解码器、平均码率、视频宽高、
    
    	运动估计参考帧个数、采样率(音频)、声道数(音频)、采样格式、
    
    AVIOContext:FFMPEG管理输入输出数据的结构体。包括:缓存开始位置、缓存大小、当前指针读到的位置、
    
    	缓存结束位置、URLContext结构体。
    
    -------------------------------------------------------------------------------------------------------------------------
    
    AVPacket:存储压缩编码数据相关信息的结构体。包括压缩编码的数据、数据大小、显示时间戳(PTS)、解码时间戳(dts)。
    
    	对于H.264来说,1个AVPacket的data通常对应一个NAL。在使用FFMPEG进行视音频处理的时候,
    
    	常可以将得到的AVPacket的data数据直接写成文件,从而得到视音频的码流文件
    
    AVFrame:一般用于存储原始数据(即非压缩数据,例如对视频来说是YUV,RGB,对音频来说是PCM),
    
    	包括:解码后的原始数据、视频宽和高、音频帧数、是否为关键帧、帧类型(I/P/B)、宽高比、
    
    	显示时间戳(pts)、帧序号、QP表等
    
    AVStream:存储每一个视频/音频流信息的结构体。包括:视音频流序号、视音频流长度、元数据、帧率等
    
    AVCodec:存储编解码器信息的结构体。包括:编解码器名字、媒体类型(视频、音频还是字幕)、编解码器ID、
    
    	支持的帧率(视频)、支持的像素格式(视频)、采样率(音频)、采样格式(音频)、声道数(音频)、私有数据大小。
    
    AVDictionary:一个结构体,简单的key/value存储,经常使用AVDictionary设置或读取内部参数
    
    ===========================================================================================================================

    =========================================================================================
    重要结构体对应的函数:
    
    AVFormatContext 初始化函数是avformat_alloc_context(),销毁函数是avformat_free_context()。
    
    AVIOContext:	初始化函数是avio_alloc_context(),    销毁的时候使用av_free()释放掉其中的缓存
    
    AVStream:	    初始化函数是avformat_new_stream(),   销毁函数使用销毁AVFormatContext的avformat_free_context()
    
    AVFrame:	    初始化函数是av_frame_alloc(),        销毁函数是av_frame_free()
    
    AVPacket:	    初始化函数有两个:av_init_packet(),av_new_packet()。销毁函数是av_free_packet()。
    
    AVOutputFormat  初始化函数av_guess_format(),
    
    =========================================================================================
    ffmpeg通用函数:
    
    1)av_register_all():fmpeg注册复用器,编码器等。包括:
    	(a)avcodec_register_all():注册了和编解码器有关的组件。
    	(b)av_register_output_format():注册复用器
    	(c)av_register_input_format():注册解复用器
    	(d)ffurl_register_protocol():注册协议处理器
    
    2)av_malloc()、av_free():内存的分配和释放
    
    3)avio_open2():用于打开FFmpeg的输入输出文件
    
    4)av_find_decoder():查找FFmpeg的编码器。输入参数编码器的ID
    
    5)av_find_encoder():查找FFmpeg的解码器。输入参数解码器的ID
    
    6)avcodec_open2():初始化一个视音频编解码器的AVCodecContext
    
    7)avcodec_close():关闭编码器。
    
    8)av_dump_format(): 打印关于输入或输出格式的详细信息,例如持续时间,比特率,流,容器,程序,
    
    元数据,边数据,编解码器和时基。
    
    9)avpicture_get_size():获取一帧图像的大小,p1:像素格式,p2和p3分别为宽和高。
    
    10)avpicture_fill():为已经分配空间的AVFrame挂上一段用于保存数据的buffer。
    
    11)av_sample_get_buffer_size():计算音频占用的字节数。
    
    12)avcodec_fill_audio_frame():将分配空间后的buffer挂到AVFrame中
    
    13) avformat_open_input():该函数用于打开多媒体数据并且获取一些信息
    
    14) avformat_close_input():对应于13
    
    15) avcodec_copy_context():拷贝输入视频码流的AVCodecContex的数值t到输出视频的AVCodecContex
    
    16) avformat_alloc_output_context2(): 负责分配输出 AVFormatContext
    
    17) av_compare_ts(): 比较时间戳,决定写入视频还是写入音频
    
    18) av_read_frame(): 从输入文件读取一个AVPacket。
    
    19) av_interleaved_write_frame(): 写入一个AVPacket到输出文件
    -----------------------------------------------------------------------------------------
    解码相关函数:
    
    1)avformat_open_input():打开多媒体数据并且获得一些相关的信息
    
    2)avformat_find_stream_info():读取一部分视音频数据并且获得一些相关的信息
    
    3)av_read_frame():读取码流中的音频若干帧或者视频一帧
    
    4)avcodec_decode_video2():解码一帧视频数据。输入一个压缩编码的结构体AVPacket,
    
                        输出一个解码后的结构体AVFrame
    
    5)avformat_close_input():关闭一个AVFormatContext
    
    -----------------------------------------------------------------------------------------
    编码相关函数:
    
    1)avformat_alloc_output_context2():初始化一个用于输出的AVFormatContext结构体
    
    2)avformat_write_header():写视频文件头
    
    3)av_write_frame():写视频数据
    
    4)av_write_trailer():写视频文件尾
    
    =========================================================================================
  • 相关阅读:
    翻转整数
    无重复字符的最长子串
    字节问题
    django model中get()和filter()方法的区别
    leetcode 290 Word Pattern(map的应用)
    leetcode 130 Surrounded Regions(BFS)
    leetcode 27 Remove Element
    leetcode 102 Binary Tree Level Order Traversal(DFS||BFS)
    leetcode 111 Minimum Depth of Binary Tree(DFS)
    leetcode 104 Maximum Depth of Binary Tree(DFS)
  • 原文地址:https://www.cnblogs.com/lidabo/p/15429279.html
Copyright © 2020-2023  润新知