当前位置: 首页 > news >正文

[ffmpeg] packet

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 >= dts
    int64_t dts; // 解码时间,基于 time_base 单位 
    uint8_t *data; // 指向 buf->data
    int   size;
    int   stream_index; // 流索引,和 avformat 上下文中的 stream 对应
    int   flags;
    AVPacketSideData *side_data;
    int side_data_elems;
    int64_t duration; // 渲染时间,基于 time_base 单位。等于 next_pts - this_pts
    int64_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.dtcms.com/a/12950.html

相关文章:

  • rabbitmq整合skywalking并编写自定义插件增强
  • .netCore运行的环境WindowsHosting和dotnet-sdk区别
  • 2024个人简历模板免费可编辑,可能是整理最全的简历(支持Word格式下载)
  • 【C#生态园】一文详解:NHibernate、Entity Framework Core、Dapper 等 .NET ORM 框架优劣对比
  • 使用Django 搭建自动化平台
  • 卷积神经网络
  • es由一个集群迁移到另外一个集群es的数据迁移
  • Vue使用Vue Router路由:通过URL传递与获取参数
  • 自动化测试概念篇
  • 【ARM】A64指令介绍及内存屏障和寄存器
  • 《拿下奇怪的前端报错》:nvm不可用报错`GLIBC_2.27‘‘GLIBCXX_3.4.20‘not Found?+ 使用docker构建多个前端项目实践
  • 3.2 USART 通用同步/异步收发器
  • ELK日志分析系统
  • 50页PPT麦肯锡精益运营转型五步法
  • 蓝桥杯2024省C
  • 基于DeepFace深度学习模型的离线版人脸识别API接口实现(类似百度在线API接口)
  • Qt clicked()、clicked(bool)、toggled(bool)信号的区别和联系
  • 轻型DXF文件格式
  • 【WebGIS实例】(17)下载瓦片底图并实现离线加载——以天地图为例
  • 【WPF】02 按钮控件圆角配置及状态切换
  • c#的委托、事件
  • Html css样式总结
  • 【SemeDrive】【X9H】SPI 通讯 —— 应用层到驱动层的调用
  • ByteCinema(1):用户的登录注册
  • Leetcode—1014. 最佳观光组合【中等】
  • Win11家庭版找不到gpedit.msc文件怎么办
  • 植物大战僵尸【源代码分享+核心思路讲解】
  • 深度学习02-pytorch-06-张量的形状操作
  • C++离线查询
  • 变压器设备漏油数据集 voc txt