欢送拜访我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等;

本篇概览

  • 作为《Kurento实战》的第三篇,咱们一起将重要的知识点梳理分明,并从整体上察看和了解Kurento,这样前面的学习和开发能更好的死记硬背,还能高效施展Kurento的能力;

WebRTC很重要

  1. Kurento 是一个 WebRTC 媒体服务器和一组客户端API,因而,根底WebRTC常识储备是强制的、必要的,建议您提前有所理解;
  2. 没有Kurento时基于WebRTC的点对点音视频流解决逻辑如下:

  1. 有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的客户端

  1. 为了更好的应用KMS的能力,Kurento官网提供了java和nodejs两个版本的客户端;
  2. 如果您善于的编程语言不是java或nodejs也没关系,能够参考Kurento Protocol本人来实现客户端(作为java程序员的欣宸涌现出一丝自卑感...);
  3. 客户端的作用:提供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工程中)
  • 几千字写完,已经的纳闷和记录的笔记都成了这篇文章的一部分,心愿本文能帮忙您疾速抓住重点,少走弯路少踩坑,接下来就要开始编码实战了,您筹备好了么?

你不孤独,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

欢送关注公众号:程序员欣宸

微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游Java世界...
https://github.com/zq2599/blog_demos