欢送拜访我的 GitHub
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,波及 Java、Docker、Kubernetes、DevOPS 等;
本篇概览
- 作为《Kurento 实战》的第三篇,咱们一起将重要的知识点梳理分明,并从整体上察看和了解 Kurento,这样前面的学习和开发能更好的死记硬背,还能高效施展 Kurento 的能力;
WebRTC 很重要
- Kurento 是一个 WebRTC 媒体服务器和一组客户端 API,因而,根底 WebRTC 常识储备是强制的、必要的,建议您提前有所理解;
- 没有 Kurento 时基于 WebRTC 的点对点音视频流解决逻辑如下:
- 有 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 中的定位:
- 紧接着官网抛出了 <font color=”blue”>Kurento toolbox</font> 的概念,并且将相熟的各种能力都展示在 toolboox 中:
- toolbox 中的所有 element 与后面划分的 module 都是有归属关系的,我这里用思维导图整顿好了,心愿能帮忙您梳理分明这些关系:
- 上述思维导图中唯有 <font color=”blue”>Group Communications</font> 的地位无奈从后面的信息中失去,最终通过翻阅源码的办法确定了属于 <font color=”blue”>kms-elements</font>(因为其源码在 kms-elements 工程中)
- 几千字写完,已经的纳闷和记录的笔记都成了这篇文章的一部分,心愿本文能帮忙您疾速抓住重点,少走弯路少踩坑,接下来就要开始编码实战了,您筹备好了么?
你不孤独,欣宸原创一路相伴
- Java 系列
- Spring 系列
- Docker 系列
- kubernetes 系列
- 数据库 + 中间件系列
- DevOps 系列
欢送关注公众号:程序员欣宸
微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游 Java 世界 …
https://github.com/zq2599/blog_demos