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 ...
随机推荐
- TestComplete 64位和32位之间的区别
在64位系统上,有两种版本的TestComplete:32位和64位.本主题描述了TestComplete x64及其32位版本之间的区别.关于TestComplete x64启动TestComple ...
- 计算机基础 | 文档神器docsify安装及基本使用
为啥要用docsify? 神器Docsify让你的文档变得美观,配合typora,从此爱上看文档,各种优点:小巧.快速.美观.方便.快捷.上手快,可以浏览如下优秀案例 ve-charts pyecha ...
- 使用BeautifulSoup自动爬取微信公众号图片
爬取微信分享的图片,根据不同的页面自行修改,使用BeautifulSoup爬取,自行格局HTML修改要爬取图片的位置 import re import time import requests imp ...
- 【剑指offer】42.和为S的两个数字
42.和为S的两个数字 题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 示例: 输入:[1,2,4,7,11 ...
- Scala学习——模式匹配
scala模式匹配 1.基础match case(类似java里switch case,但功能强大些) object MatchApp { def main(args: Array[String]): ...
- Docker安装和常用配置【Linux】
Linux下安装配置docker 安装指南:https://developer.aliyun.com/article/110806 一.配置国内镜像源 1.1 设置国内阿里巴巴下载源 [root@lo ...
- windows安装Laravel框架经验心得(一)
作为一个程序员,要活到老学到老.虽然自己水平很菜,但是也要继续往前走,所以打算利用一些空闲时间在学习一些新知识,比如Laravel框架. 看书费劲,好不容易找到了一些关于Laravel的教学视频.不过 ...
- HCNA Routing&Switching之OSPF度量值和基础配置命令总结
前文我们了解了OSPF的网络类型,OSPF中的DR和BDR的选举规则.作用等相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15054938.html: ...
- Java程序员必学知识点
JVM无论什么级别的Java从业者,JVM都是进阶时必须迈过的坎.不管是工作还是面试中,JVM都是必考题.如果不懂JVM的话,薪酬会非常吃亏(近70%的面试者挂在JVM上了) 详细介绍了JVM有关于线 ...
- webpack 安装使用简例
1. 新建项目文件夹,如 webpack-demo 2. cd 到安装项目根目录,即进入webpack-demo文件夹,命令行工具输入"npm install webpack webpack ...