ffmpeg(1) 基础框架
媒体的整体的处理流程大概如上,从存储/网络中读入数据,解析格式进行解封装然后进行解码,对解码后的数据进行处理,重新编码,进行封装,进行存储输出
首先从输入输出入手,ffmpeg以AVFormatContext为中心,左侧是举了一个输出的类图格式,输入也类似,如下:
AVFormatContext中打开文件的时候首先会根据打开的文件名字以及文件内容进行封装格式猜测,根据不同文件的类型生成AVOutputFormat,其中实现了写的函数,写的时候会根据不同的封装格式进行写(读数据的时候也同理);
读和写都需要最终的对象, ffmpeg通过AVIOContext来进行管理,通过打开对象的名字不同,自动识别属于http还是rtmp或者是一个文件等等,对应的它们都在ffmpeg中作为一个URLContext,对于一个文件而言,URLContext中的priv_data存储了打开的fd,而prot则是读写操作的接口。
右侧则是对媒体帧数据的属性管理,ffmpeg使用stream来进行管理, streams中存储了帧数据中的相应属性,对于视频,譬如编解码器信息,帧率,分辨率,时间戳等,对于音频,有编码器信息,采样率等等; 当从输入流读取数据之后,需要根据这些属性对输出流进行相应的的设置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界