关于FFmpeg释放 AVFormatContext*解码上下文的一些问题 FFmpeg的一些常用函数用途 结构体 释放解码上下文 FFmpeg的一些常用函数用途 av_register_all() 注册所有组件。 avformat_open_input() 打开输入视频文件。 avformat_find_stream_info() 获取视频文件信息。 avcodec_find_decoder() 查找解码器。 avcodec_open2() 打开解码器。 av_read_frame() 从输入文件读取一帧压缩数据。 avcodec_decode_video2() 解码一帧压缩数据。 avcodec_close() 关闭解码器。 avformat_close_input() 关闭输入视频文件 详细的可以看这个。 原文链接:https://blog.csdn.net/qq_29350001/article/details/75529620 使用avformat_open_input() 函数可以打开一个视频文件,获取时网络摄像头的rtsp地址。详解这里就不多说了,可以看雷神的该函数的解析。 结构体 AVFormatContext 封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息。 iformat:输入视频的AVInputFormat nb_streams :输入视频的AVStream 个数 streams :输入视频的AVStream []数组 duration :输入视频的时长(以微秒为单位) bit_rate :输入视频的码率 AVInputFormat 每种封装格式(例如FLV, MKV, MP4, AVI)对应一个该结构体。 name:封装格式名称 long_name:封装格式的长名称 extensions:封装格式的扩展名 id:封装格式ID 一些封装格式处理的接口函数 AVStream 视频文件中每个视频(音频)流对应一个该结构体。 id:序号 codec:该流对应的AVCodecContext time_base:该流的时基 r_frame_rate: 该流的帧率 AVCodecContext 编码器上下文结构体,保存了视频(音频)编解码相关信息。 codec:编解码器的AVCodec width, height:图像的宽高(只针对视频) pix_fmt:像素格式(只针对视频) sample_rate:采样率( 只针对音频) channels:声道数(只针对音频) sample_fmt:采样格式(只针对音频) AVCodec 每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。 name:编解码器名称 long_name:编解码器长名称 type:编解码器类型 id:编解码器ID 一些编解码的接口函数 AVPacket 存储一帧压缩编码数据。 pts:显示时间戳 dts :解码时间戳 data :压缩编码数据 size :压缩编码数据大小 stream_index :所属的AVStream AVFrame 存储一帧解码后像素(采样)数据。 data:解码后的图像像素数据(音频采样数据)。 linesize:对视频来说是图像中一行像素的大小;对音频来说是整个音频帧的大小。 width, height:图像的宽高(只针对视频)。 key_frame:是否为关键帧(只针对视频) 。 pict_type:帧类型(只针对视频) 。例如I, P, B。 释放解码上下文 下面是释放上下文的 代码。 sws_freeContext(pSwsContext); av_frame_free(&pAVFrame); avcodec_close(pAVCodecContext); avformat_close_input(&pAVFormatContext); 这个顺序不能错,如果想关闭一个摄像头的取流地址不能单独调用avformat_close_input(&pAVFormatContext);因为你释放掉这个内存,里面的一些结构体没有被释放会导致程序崩溃。
标签:视频,FFmpeg,AVFormatContext,解码,视频文件,格式,上下文,音频 From: https://www.cnblogs.com/lidabo/p/17623739.html