• 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():写视频文件尾
    
    =========================================================================================
  • 相关阅读:
    17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication
    17.1.2 Replication Formats
    Setting the Master Configuration on the Slave
    17.1.1.9 Introducing Additional Slaves to an Existing Replication Environment
    17.1.1.8 Setting Up Replication with Existing Data
    17.1.1.7 Setting Up Replication with New Master and Slaves
    17.1.1.6 Creating a Data Snapshot Using Raw Data Files
    列出display的值,并说明它们的作用
    CSS设置DIV居中
    CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?
  • 原文地址:https://www.cnblogs.com/lidabo/p/15429279.html
Copyright © 2020-2023  润新知