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

ffmpeg-api记录

ffmpeg-api记录

1. Frame

基于引用计数的frame

  • av_frame_ref: ref
  • av_frame_unref: unref
  • av_frame_move_ref:所有权转移
  • av_frame_clone: copy一份,引用计数=1

2. Packet

3. AVAudioFifo

音频重采样时,用来缓存aac的帧(1024才能送去编码)

  • av_audio_fifo_alloc
  • av_audio_fifo_size: 大小查询
  • av_audio_fifo_read: 消费fifo
  • av_audio_fifo_write: 写入fifo

4. mux

目标: 根据配置, 给定图片、音频,转码(如果需要)并mux
在这里插入图片描述

graph LRinit_muxer_using_config[根据配置初始化mux]init_muxer_using_origin_context[根据原视频初始化mux]interact_input_image_audio_saple[交替输入图像/音频] --> convert_if_need[如果需要则进行转码] --> muxconvert_if_need --> video_convert[视频转码逻辑]video_convert --> init_sws_getContext_using_format_width_height[使用src/dst像素格式、宽、高初始化]init_sws_getContext_using_format_width_height --> call_sws_scale[调用sws_scale接口得到转码过后的frame]call_sws_scale --> call_send_frame_and_mux[正常调用send_frame接口进行mux]convert_if_need --> audio_convert[音频转码设置]audio_convert --> init_swr_using_swr_alloc_set_opts2[使用src/dst布局、编码格式、采样率初始化 swr_alloc_set_opts2 转换器]audio_convert --> init_audio_fifo[使用av_audio_fifo_alloc+dst编码格式、通道布局初始化音频fifo队列]init_swr_using_swr_alloc_set_opts2 --> call_swr_convert[调用swr_convert得到转码过后的frame]call_swr_convert --> push_fifo[将结果push到audio fifo中]push_fifo --> consume_fifo[消费fifo如果samples大于1024]consume_fifo --> call_send_frame_and_mux

4.1 mux.Stream

enum class stream_type {none, video, audio};
struct Stream {stream_type type;int index{-1};AVCodecContext *codec_ctx{nullptr};// for videoSwsContext *vid_sws_ctx{nullptr};int64_t vid_next_pts{0};// for audioSwrContext *aud_swr_ctx{nullptr};int64_t handled_samples{0};AVAudioFifo *fifo{nullptr};// common frameAVFrame *frame{nullptr};
};
http://www.dtcms.com/a/274570.html

相关文章:

  • 8、鸿蒙Harmony Next开发:相对布局 (RelativeContainer)
  • PortsWiggerLab: Blind OS command injection with output redirection
  • 2D下的几何变换(C#实现,持续更新)
  • linux获取NTP方式
  • ubuntu22默认安装firefox使用snap安装还老打不开解决办法
  • 【Spring】拦截器详解
  • jenkins部署springboot+Docker项目
  • Playwright Python 教程:网页自动化
  • xAI发布Grok4+代码神器Grok4 Code,教你如何在国内升级订阅SuperGrok并使用到Grok4教程
  • 信号量机制
  • 【机器学习】保序回归平滑校准算法
  • 设计模式(结构型)-适配器模式
  • 深度学习入门教程(三)- 线性代数教程
  • 使用you-get命令下载视频/音频/图像
  • Primer Premier 5分子生物学引物设计软件 PCR引物设计工具
  • 【读代码】开源音乐分离工具Spleeter
  • RabbitMQ 之顺序性保障
  • Java大厂面试故事:谢飞机的互联网医疗系统技术面试(Spring Boot、MyBatis、Kafka、Spring Security、AI等)
  • c++——浅拷贝和深拷贝、浅赋值和深赋值
  • 动态组件和插槽
  • mysql 锁介绍
  • 分布式系统高可用性设计-负载均衡与容错机制深度解析
  • 2025年DevSecOps工具全景图:安全左移时代的国产化突围
  • AGX Xavier 搭建360环视教程【二、环境配置】
  • 【JMeter】执行系统命令
  • git restore
  • Java项目中图片加载路径问题解析
  • 多线程Java
  • Leaflet面试题及答案(1-20)
  • 《汇编语言:基于X86处理器》第7章 整数运算(2)