FFmpeg打开媒体流或者网络流以及写媒体流时,各结构体创建、释放方式

  1. 前言

在这里记录下FFmpeg各主要结构体创建、释放的方式
2. 取流参数AVDictionary
创建:
AVDictionary* opts = NULL;
配置:(官方参数列表)
av_dict_set(&opts, “rtsp_transport”, “tcp”, 0);
释放:
av_dict_free(&opts);
3. 媒体流AVFormatContext
创建:
AVFormatContext* ictx = NULL;
释放:
avformat_close_input(&ictx);
4. 压缩视频帧AVPacket
创建:
AVPacket* pkt = av_packet_alloc();
释放:
av_packet_unref(pkt);
av_packet_free(&pkt);
5. 编码器AVCodec
创建:
AVCodec* codec = avcodec_find_encoder(AV_CODEC_ID_H264);
释放:编码器不需要单独释放,输出流结构体AVCodecContext释放的时候,会顺便释放编码器
6. 输出流结构体AVCodecContext
创建:
AVCodecContext* output = avcodec_alloc_context3(codec);
释放:
av_write_trailer(output);//写文件尾
avio_close(output->pb);
avformat_free_context(output);
7. AVFrame结构
内存申请:
AVFrame *decoded_frame = av_frame_alloc();
释放内存:
av_frame_free(&decoded_frame);
容易混淆的是av_frame_unref,它的作用是释放音视频数据资源,而av_frame_free是释放所有资源,包括音视频数据资源和结构体本身的内存。可以从源码中看到,av_frame_free函数体内是先调用了av_frame_unref释放数据缓存,再free本身结构体内存。
8.SwsContext结构
sws_getContext():初始化一个SwsContext。
sws_scale():处理图像数据。
sws_freeContext():释放一个SwsContext。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值