当前位置: 首页 > 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);

相关文章:

  • 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 按钮控件圆角配置及状态切换
  • 落实中美经贸高层会谈重要共识,中方调整对美加征关税措施
  • 讲一个香港儿童的故事,《劏房的天空》获“周庄杯”特等奖
  • 2025上海科技节本周六启幕,机器人和科学家同走AI科学红毯
  • 明查|印度空军“又有一架战机被巴基斯坦击落,飞行员被俘”?
  • 城市轨道交通安全、内河港区布局规划、扎实做好防汛工作……今天的上海市政府常务会议研究了这些重要事项
  • 商务部新闻发言人就中美日内瓦经贸会谈联合声明发表谈话