[ffmpeg] packet

server/2024/9/24 22:28:30/

API调用

常用API

AVPacket *av_packet_alloc(void); // 构建 packet 结构体
void av_packet_free(AVPacket **pkt); // 释放 packet 结构体
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst); // pts,dts,duration 基于前后时间基进行转换

结构体介绍

typedef struct AVPacket {AVBufferRef *buf; // data 实际保存的地方,通过 ref 控制是否真的释放int64_t pts; // 渲染时间,基于 time_base 单位,必须 pts >= dtsint64_t dts; // 解码时间,基于 time_base 单位 uint8_t *data; // 指向 buf->dataint   size;int   stream_index; // 流索引,和 avformat 上下文中的 stream 对应int   flags;AVPacketSideData *side_data;int side_data_elems;int64_t duration; // 渲染时间,基于 time_base 单位。等于 next_pts - this_ptsint64_t pos; // 在流中的位置void *opaque; // 私有数据AVBufferRef *opaque_ref;AVRational time_base; // 时间基,视频为 1/fps 
} AVPacket;
struct AVBuffer {uint8_t *data; /**< data described by this buffer */size_t size; /**< size of data in bytes */atomic_uint refcount;void (*free)(void *opaque, uint8_t *data);void *opaque;int flags;int flags_internal;
};

其他

AVPacket *av_packet_alloc(void);
AVPacket *av_packet_clone(const AVPacket *src);
void av_packet_free(AVPacket **pkt);
void av_init_packet(AVPacket *pkt);
int av_new_packet(AVPacket *pkt, int size);
void av_shrink_packet(AVPacket *pkt, int size);
int av_grow_packet(AVPacket *pkt, int grow_by);
int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size);
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size);
int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size);
uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, size_t *size);
const char *av_packet_side_data_name(enum AVPacketSideDataType type);
uint8_t *av_packet_pack_dictionary(AVDictionary *dict, size_t *size);
int av_packet_unpack_dictionary(const uint8_t *data, size_t size, AVDictionary **dict);
void av_packet_free_side_data(AVPacket *pkt);
int av_packet_ref(AVPacket *dst, const AVPacket *src);
void av_packet_unref(AVPacket *pkt);
void av_packet_move_ref(AVPacket *dst, AVPacket *src);
int av_packet_copy_props(AVPacket *dst, const AVPacket *src);
int av_packet_make_refcounted(AVPacket *pkt);
int av_packet_make_writable(AVPacket *pkt);
void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);

http://www.ppmy.cn/server/121534.html

相关文章

手写流程图元素检测系统源码分享

手写流程图元素检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

[Golang] Context

[Golang] Context 文章目录 [Golang] Context什么是context创建context创建根context创建context context的作用并发控制context.WithCancelcontext.WithDeadlinecontext.WithTimeoutcontext.WithValue 什么是context Golang在1.7版本中引入了一个标准库的接口context&#xf…

多颜色绘制语义分割/变化检测结果图

在论文绘图时&#xff0c;传统的二元语义分割结果图颜色单一&#xff08;下图左&#xff09;&#xff0c;所以论文中常根据混淆矩阵类别使用多颜色进行绘制&#xff08;下图右&#xff09;&#xff0c;可以看到&#xff0c;结果的可视化效果更好。 以下是绘制代码&#xff1a; …

结构设计模式 -装饰器设计模式 - JAVA

装饰器设计模式 一. 介绍二. 代码示例2.1 抽象构件&#xff08;Component&#xff09;角色2.2 具体构件&#xff08;Concrete Component&#xff09;角色2.3 装饰&#xff08;Decorator&#xff09;角色2.4 具体装饰&#xff08;Concrete Decorator&#xff09;角色2.5 测试 结…

数理统计(第一章)

数理统计核心问题&#xff1a;有子样推断母体 1.1 母体和子样 母体&#xff1a;研究对象的全体&#xff08;关心个体的一项或者几项&#xff09;数量指标及总体的分布情况。 比如&#xff1a;一批灯泡的使用寿命&#xff0c;班级学生的身高&#xff0c;体重等。 1.2 母体分布…

Spring MVC 基本配置步骤 总结

1.简介 本文记录Spring MVC基本项目拉起配置步骤。 2.步骤 在pom.xml中导入依赖&#xff1a; <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.0.6</version><scope>…

类型转换与RTTI

类型转换 一、类型转换1、C语言2、C3、注意 二、static_cast1、介绍2、示例 三、reinterpret_cast1、介绍2、示例代码3、运行结果 四、const_cast1、介绍2、示例 五、dynamic_cast1、介绍2、示例代码3、运行结果 六、RTTI1、介绍2、typeid&#xff08;1&#xff09;介绍&#x…

LabVIEW提高开发效率技巧----合理使用数据流与内存管理

理使用数据流和内存管理是LabVIEW开发中提高性能和稳定性的关键&#xff0c;特别是在处理大数据或高频率信号时&#xff0c;优化可以避免内存消耗过大、程序卡顿甚至崩溃。 1. 使用 Shift Register 进行内存管理 Shift Register&#xff08;移位寄存器&#xff09; 是 LabVIE…