Kurento實戰之三:知識點小導遊

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

內容:所有原創文章分類彙總及配套源碼,涉及Java、Docker、Kubernetes、DevOPS等;

本篇概覽

  • 作爲《Kurento實戰》的第三篇,咱們一起將重要的知識點梳理清楚,並從整體上觀察和理解Kurento,這樣後面的學習和開發能更好的融會貫通,還能高效發揮Kurento的能力;

WebRTC很重要

  1. Kurento 是一個 WebRTC 媒體服務器和一組客戶端API,因此,基礎WebRTC知識儲備是強制的、必要的,建議您提前有所瞭解;
  2. 沒有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的客戶端

  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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章