Kurento实战之三:知识点小导游
欢迎访问我的GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
本篇概览
- 作为《Kurento实战》的第三篇,咱们一起将重要的知识点梳理清楚,并从整体上观察和理解Kurento,这样后面的学习和开发能更好的融会贯通,还能高效发挥Kurento的能力;
WebRTC很重要
- Kurento 是一个 WebRTC 媒体服务器和一组客户端API,因此,基础WebRTC知识储备是强制的、必要的,建议您提前有所了解;
- 没有Kurento时基于WebRTC的点对点音视频流处理逻辑如下:
3. 有Kurento后变成下面这种,客户端实际上和KMS(Kurento Media Server)建立了点对点连接,收到的数据也来自KMS,这些数据可以是原生的,又或许是被KMS处理过的(如上一篇文章中戴一顶帽子的demo):
和GStreamer的关系
- 对WebRTC有了了解后,应该对GStreamer有基本的了解,然后再去学习Kurento会有更好的效果,这样当你在学习Kurento的过程中,遇到pipeline、element、src、sink这些概念时会有种本该如此的感觉:这些概念在GStream中同样存在且十分重要,它们发挥的作用和在Kurento中十分相似;
- Kurento的KMS中,录制、播放、编解码等能力都来自GStream库;
- GStreamer 是个开源多媒体框架,可以构建流媒体应用,以管道(Pipeline)方式将各步骤串联,每个步骤的元素(Element)基于GObjec通过插件(plugins)方式实现;
- 下面是个典型的pipeline,功能是将一个多媒体文件的音视频分离,再分别输出到音频和视频设备上:
- 作为对比,再来看看Kurento的pipeline,下面是滤镜demo的pipeline示意图,功能是给视频中的人头上戴一顶帽子:
- 上面两个图对比可见,基于GStreamer的Kurento也有pipeline、element、src、sink,但Kurento有自己的特点:KMS、WebRtcEndpoint、JsonRpc这些概念都和网络服务相关,回到Kurento的官方文档首页看看它的定位,如下图所示:
- 看到这里,聪明的您对GStreamer和Kurento应该有了更深刻全面的认识:Kurento在设计上和GStreamer基本对齐,并且将GStreamer的已有能力和WebRtc实时音视频技术在Pipeline+Element机制下整合组装,打造出高效可扩展的音视频技术方案;
- 随着Kurento学习的深入,会接触到更多的GStreamer知识,如下图是Kurento源码的脚手架文件夹中的模板代码:
Kurento的客户端
- 为了更好的使用KMS的能力,Kurento官方提供了java和nodejs两个版本的客户端;
- 如果您擅长的编程语言不是java或nodejs也没关系,可以参考Kurento Protocol自己来实现客户端(作为java程序员的欣宸涌现出一丝优越感...);
- 客户端的作用:提供API给业务调用,通过这些API可以向KMS发送指令,让KMS为业务服务,例如编排pipeline,如下图,重点是业务应用服务,集成了Kurento的客户端后就能向KMS发送指令了:
基本概念梳理
Kurento中涉及的概念并不算多,且很多都向GStreams对其了,总的来说比较好理解,在此将所有重要概念梳理出来便于后面的学习:
- module:Kurento本身是插件化的框架,所有插件(plugin)都被称为module;
- 官方将所有module分为三大类:main、built-in、custome,下图很形象的解释了它们在Kurento中的定位:
- 紧接着官方抛出了Kurento toolbox的概念,并且将熟悉的各种能力都展现在toolboox中:
- toolbox中的所有element与前面划分的module都是有归属关系的,我这里用思维导图整理好了,希望能帮助您梳理清楚这些关系:
上述思维导图中唯有Group Communications的位置无法从前面的信息中得到,最终通过翻阅源码的方法确定了属于kms-elements(因为其源码在kms-elements工程中)
几千字写完,曾经的疑惑和记录的笔记都成了这篇文章的一部分,希望本文能帮助您快速抓住重点,少走弯路少踩坑,接下来就要开始编码实战了,您准备好了么?
你不孤单,欣宸原创一路相伴
欢迎关注公众号:程序员欣宸
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos
Kurento实战之三:知识点小导游的更多相关文章
- [原创].NET 分布式架构开发实战之三 数据访问深入一点的思考
原文:[原创].NET 分布式架构开发实战之三 数据访问深入一点的思考 .NET 分布式架构开发实战之三 数据访问深入一点的思考 前言:首先,感谢园子里的朋友对文章的支持,感谢大家,希望本系列的文章能 ...
- Kurento实战之四:应用开发指南
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- kubebuilder实战之三:基础知识速览
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 【转】HTML5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...
- html5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于< ...
- 疯狂VirtualBOX 实战讲学录:小耗子之VirtualBOX修炼全程重现
疯狂VirtualBOX 实战讲学录:小耗子之VirtualBOX修炼全程重现 神级虚拟技术&云计算专家”小耗子”老师震撼分享 全球第—部完整深入的中文VirtualBox技术全程实战手册 全 ...
- Python数据分析实战视频教程【小蚊子数据分析实战课程】
点击了解更多Python课程>>> Python数据分析实战视频教程[小蚊子数据分析实战课程] [课程概述] Python数据分析实战' 适用人群:适合需提升竞争力.提升工作效率.喜 ...
- [Java聊天室server]实战之三 接收循环
前言 学习不论什么一个稍有难度的技术,要对其有充分理性的分析,之后果断做出决定---->也就是人们常说的"多谋善断":本系列尽管涉及的是socket相关的知识.但学习之前,更 ...
- Flink的sink实战之三:cassandra3
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- Linux:jar服务部署
1.进入jar包所在文件夹中 2.启动jar,将jar在后台运行,并且记录jar的pid 命令为 : nohup java -jar test.jar (同jar包的配置文件要在jar包同级目录 ...
- 2020年MySQL数据库面试题总结(50道题含答案解析)
1.MySQL 中有哪几种锁? (1)表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最 高,并发度最低. (2)行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最 ...
- ESP32-任务看门狗笔记
看门狗机制用于监控嵌入式系统运行并在发生不可知的软硬件故障时将系统复位.系统正常运行时,看门狗定时器溢出之前会被重置计数值,也就是"喂狗".定时器溢出意味着无法"喂狗&q ...
- JUnit5依赖注入与测试接口
依赖注入 以前的JUnit的类构造方法和测试方法都是不能有参数的,JUnit Jupiter有一个颠覆性的改进,就是允许它们有入参,这样就能做依赖注入了. 如果你对pytest的fixture有了解的 ...
- 「AGC010F」 Tree Game
「AGC010F」 Tree Game 传送门 切了一个 AGC 的题,很有精神. 于是决定纪念一下. 首先如果任意一个人在点 \(u\),他肯定不会向点权大于等于 \(a_u\) 的点走的,因为此时 ...
- ADB命令 连接WIFI检测序列号
利用ADB 电脑与手机相连 查看序列号: adb shell getprop ro.serialno 查看机器的SN号 adb shell getprop 查看机器的全部信息参数 查看IP地址: a ...
- Kettle——shell交互命令
Kettle--shell交互命令 在kettle上开发了job或transform可以以单独的文件存在,也可以存放在资源库中.调用这些程序可以通过shell脚本调用,记录下: 资源库中的job: . ...
- springMVC-5-视图解析器
视图和视图解析器工作流程 第一步:获取到ModelAndView对象 请求处理方法执行完成后,无论返回是String,View 还是 ModeMap 类型,Spring MVC 也会在内部将它们装配成 ...
- R语言客户端RStudio快捷键大全
Console Description Windows & Linux Mac 将光标定位到控制台 Ctrl+2 Ctrl+2 清空控制台 Ctrl+L Command+L 将光标定位到行首 ...
- [NOIp2017]宝藏 题解
非常巧妙的 \(O(n^23^n)\) 做法. 题目的本质是要求一棵生成树,使得其每条边的长度与这条边的起点深度乘积的和最小. 我们使用状压 DP,考虑到当前状态与已经打通的点和深度有关,不妨设 \( ...