当前位置: 首页 > 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.lryc.cn/news/585529.html

相关文章:

  • UC浏览器PC版自2016年后未再更新不支持vue3
  • 小旺AI截图1.2.1版本上线:新增录屏音频、Mac长截屏
  • Docker高级管理--Dockerfile 镜像制作
  • 手把手一起使用Miniforge3+mamba平替Anaconda(Win10)
  • 机器学习week2-线性回归加强
  • Java的extends通配符
  • netdxf—— CAD c#二次开发之(netDxf 处理 DXF 文件)
  • 和鲸社区深度学习基础训练营2025年关卡2(3)pytorch
  • 利用Claude code,只用文字版系统设计大纲,就能轻松实现系统~
  • 免费应用分发平台的安全漏洞和防护机制是什么?
  • 60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)
  • Windows解决 ping 127.0.0.1 一般故障问题
  • 【Linux网络】深入理解HTTP/HTTPS协议:原理、实现与加密机制全面解析
  • 信号量机制
  • 聊聊AI大模型的上下文工程(Context Engineering)
  • Spring 声明式事务:从原理到实现的完整解析
  • 运行ssh -T git@github.com报错
  • 多端协作白板:如何改变传统会议模式!
  • 设计模式 - 面向对象原则:SOLID最佳实践
  • 多态 使用场景
  • 【三维重建工具】NeRFStudio、3D GaussianSplatting、Colmap安装与使用指南
  • VOB如何转换成MP4格式?3种快速转换教程推荐
  • GT IP核仿真测试
  • Kubernetes 高级调度特性
  • 基于kafka的分布式日志收集与实时监控平台(原理,框架)
  • Spring MVC中异常处理
  • unity VR linerenderer的线会被UI盖住
  • 博客系统开发全流程解析(前端+后端+数据库)与 AI 协作初体验
  • [electron]升级功能
  • Android 12系统源码_分屏模式(一)从最近任务触发分屏模式