首页 > 其他分享 >关于FFmpeg释放 AVFormatContext*解码上下文的一些问题

关于FFmpeg释放 AVFormatContext*解码上下文的一些问题

时间:2023-08-11 18:45:24浏览次数:40  
标签:视频 FFmpeg AVFormatContext 解码 视频文件 格式 上下文 音频

关于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

相关文章

  • ffmpeg使用avformat_close_input()函数释放结构体时崩溃的问题
    先看一下我调试时,发现程序崩溃的代码位置  //这是我的程序释放流上下文时的操作 if(m_pAvFormatContext) { //释放视频解码器上下文 if(m_iVideoStreamIndex>=0) avcodec_free_context(&m_pVideoDecodeContext);//此处是发生崩溃......
  • nginx源码分析之http解码实现
    分析nginx是如何解析并且存储http请求的。对非法甚至恶意请求的识别能力和处理方式。可以发现nginx采用状态机来解析http协议,有一定容错能力,但并不全面相关配置 跟解码有关的配置 merge_slashes 语法merge_slasheson|off默认值on上下文httpserver说明支持解析请求行时,合并相......
  • 自定义feign 解码器Decoder
    直接上代码packagecom.haier.hibp.stock.config;importcom.alibaba.fastjson.JSON;importcom.haier.hibp.stock.constant.WebConstants;importcom.haier.hibp.stock.service.form.FeignResultDto;importfeign.FeignException;importfeign.Response;importfeign.Uti......
  • java 字符串中的编码和解码问题
     ......
  • 终于搞懂了python2和python3的encode(编码)与decode(解码)
    终于搞懂了python2的编码在python2下碰到非常多次的中文乱码,这次来梳理一下编码问题。在python2中默认编码是ASCII,而在python3中默认编码是unicode。unicode是中间编码,任何字符编码之前的转换都必须解码成unicode,再编码成目标字符编码在python2读取文件时,如果文件编码......
  • Linux开发板调用摄像头(V4L2编程,含YUYV解码RGB)
    本文是基于Linux开发板的V4L2摄像头调用程序,包括YUYV解码为RGB,以及将摄像头数据显示在开发板屏幕上。代码未封装,可直接在linux下编译使用。 工作流程:打开设备—>检查和设置设备属性—>设置帧格式—>设置一种输入输出方法(缓冲区管理)—>循环获取数据—>数据解码—>显......
  • C# 使用FFmpeg.Autogen对byte[]进行编解码
    C#使用FFmpeg.Autogen对byte[]进行编解码,参考:https://github.com/vanjoge/CSharpVideoDemo入口调用类:usingSystem;usingSystem.IO;usingSystem.Drawing;usingSystem.Runtime.InteropServices;usingFFmpeg.AutoGen;namespaceFFmpegAnalyzer{publicclassFFm......
  • rocky linux:安装ffmpeg(ffmpeg 5.1.3/rocky linux 9.2)
    一,ffmpeg官网:网址:http://ffmpeg.org/如图:说明:最新版本出到了6.0,我们从dnf通道安装,版本可能略低二,安装rpmfusion库[root@img~]#dnfinstall--nogpgcheckhttps://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm[root@img~]#dnfinstall......
  • FAST协议详解1 不同数据类型的编码与解码
    一、概述FAST协议里不同的数据类型在编码时有非常大的区别,比如整数只需要将二进制数据转为十进制即可,而浮点数则需要先传小数点位数,再传一个整数,最后将二者结合起来才是最终结果。本篇使用openfast自设了一些数据并编码成FAST数据,再对这些FAST数据进行人工解码,以图看懂FAST协议是......
  • clang 静态编译 ffmpeg
    文档说明:只记录关键的地方;发文时间:2023-08-06意义:静态编译ffmpeg,可自由裁剪,使用libc构建;支持macos、linux构建;生成库依赖库图环境:alpine:3.17dockerclang备注:大部分软件源代码来源于github.com,下载过程断断续续的。请自备代理借助swoole-cli已经编写好......