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

ffmpeg面向对象——AVInputFormat与URLProtocol啥关系

《ffmpeg面向对象-rtsp拉流相关对象》和《ffmpeg面向对象——拉流协议匹配机制探索》探索过了输入格式匹配和底层协议匹配,且ffmpeg拉流是先是匹配输入格式——抽象为AVInputFormat类,然后再匹配url协议类——抽象为URLProtocol类。

它们是啥关系?为啥先匹配输入格式再匹配协议类?

前者是应用层协议,比如rtsp,http等,后者是实际协议的底层承载体,比如open,tcp等。
ffmpeg的这种设计,就是先查找匹配输入格式,然后在根据匹配的输入格式再查找对应的协议,是一环接一环的——因为具体的输入格式里会有具体的底层协议,先找到A,A才能告诉你B在哪。所以也层层递进,有先有后的。

其实还是模块化编程、分层思想。

以rtsp为例。
标准rtsp拉流的是采用tcp传输,那么rtsp协议层实现要和底层传输分离,模块化,各自并行迭代开发,耦合性降低,它们唯一的纽带就是接口——面向接口编程——软件设计5大原则的依赖倒置原则。只要接口不变,各自并行迭代开发前进就行了。

所以标准rtsp拉流协议的实现——不管ffmpeg还是各大公司,都是把应用层协议和底层传输协议分离的,所以ffmpeg把rtsp协议实现放到了rtsp.c中,把tcp放到了tcp.c中——其实以面向对象的思想和规范,各类都是一个个c/cpp文件,看看c++源文件和ffmpeg源文件起名,惊人的一致。

所以对于大型软件,如果追求极致性能,选择c语言开发,那么oopc是所有项目的必选。

http://www.lryc.cn/news/459524.html

相关文章:

  • 【高阶数据结构】二叉树进阶探秘:AVL树的平衡机制与实现详解
  • 中级软考软件设计师真题+模拟题+课件讲解+机考讲解模拟+笔记分享
  • MySQL—视图
  • 鸿蒙OS启动流程
  • 服务器数据恢复—EMC存储RAID5磁盘阵列数据恢复案例
  • 使用 `netcat`(nc)工具进行TCP数据发送和接收
  • Linux虚拟化技术嬗变综述
  • .NET 通过C#设置Excel工作表的页面设置
  • Excel日期导入数据库变为数字怎么办
  • SSL---SSL certificate problem
  • linux tar 打包文件去掉文件所在路径
  • MQ快速入门【详细】个人笔记 讲解通俗易懂
  • react实现实时计时的最简方式
  • 时尚的社会心理机制:求同和树异这对互为矛盾的心理动机,使得人们在社会生活中互相模仿、互相追逐、互相竞争,使得时尚的钟摆永不停息。
  • HarmonyOS NEXT应用开发实战(二、封装比UniApp和小程序更简单好用的网络库)
  • [Hbase]一 HBase基础
  • React.createRef(),React.forwardRef(),forwardRef()结合next.js的link进行路由跳转
  • C++从入门到起飞之——AVL树 全方位剖析!
  • 利用Fail2Ban增强Jupyter Notebook安全性以防范目录遍历攻击
  • 智能贴身监测,健康生活建议,圆道妙医智能手表体验
  • C++——AVL树
  • 极市平台 | 无人机相关开源数据集资源汇总
  • React和Vue区别,以及注意事项
  • 光伏项目难管理的问题如何解决?
  • 图片美化SDK解决方案,赋能H5与小程序极致体验
  • Kron Reduction消去法如何操作,矩阵推导过程
  • 实时开放词汇目标检测(论文复现)
  • 陪诊小程序搭建:打造便利的陪诊环境
  • Qt5.15.2静态编译 MinGW with static OpenSSL
  • Linux Ubuntu dbus CAPI ---- #include<dbus.h>出现“无法打开源文件dbus/xxx.h“的问题