Kurento架构
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
Kurento架構(gòu)
Kurento和大多數(shù)的媒體通信技術(shù)一樣,它把所有的交互通信系統(tǒng)的關(guān)鍵功能抽象成兩層(或平臺(tái)):
-
信令平臺(tái): 負(fù)責(zé)系統(tǒng)通信管理部分,它的組成模塊提供的功能有媒體協(xié)商,QoS參數(shù)協(xié)商,呼叫建立,用戶注冊(cè),用戶呈現(xiàn)等,都是信令層的功能。
-
媒體平臺(tái): 功能包括媒體傳輸,媒體編碼/解碼和媒體處理,它關(guān)心的是媒體的處理。它和電話的區(qū)別在于聲音的處理以及媒體信息的處理,包括音調(diào),響鈴等。
下圖顯示了Kurento的高級(jí)系統(tǒng)架構(gòu)。
上圖的右邊是應(yīng)用服務(wù)器端,它負(fù)責(zé)信令平臺(tái),包含有業(yè)務(wù)邏輯和特定多媒體應(yīng)用的連接。它可以由像Java, Node.js, PHP, Ruby, .NET等任何一種編程技術(shù)實(shí)現(xiàn)。應(yīng)用服務(wù)端也可以使用成熟的技術(shù),像HTTP,SIP Servlet, Web服務(wù),數(shù)據(jù)庫連接,消息服務(wù)等。可以這樣認(rèn)為,這一平臺(tái)給終端提供了多媒體信令協(xié)議的訪問接口,如SIP, RESTful,和原始HTTP格式,SOAP, RMI, CORBA或JMS。這些信令協(xié)議被用于應(yīng)用程序客戶端,用來命令要求創(chuàng)建媒體會(huì)話,并協(xié)商各種行為的特性。因此,它是架構(gòu)的一部分,用來和應(yīng)用開發(fā)者交互。基于這個(gè)原因,它的設(shè)計(jì)必須簡單而靈活。
上圖的左邊Kurento媒體服務(wù)器,它實(shí)現(xiàn)了媒體平臺(tái)功能,用以提供底層媒體功能的訪問:媒體傳輸,媒體編碼/解碼,媒體轉(zhuǎn)碼,媒體混合,媒體處理等。Kurento媒體服務(wù)器必須具有以最小的延遲和最大的吞吐量管理媒體流的能力。因此,Kurento必須對(duì)效率進(jìn)行優(yōu)化。
Kurento APIs and interfaces
媒體平臺(tái)( Kurento媒體服務(wù)器 )和信令平臺(tái)(應(yīng)用程序服務(wù)端)的能力是通過一系列API實(shí)現(xiàn)的,它提供了越來越多的抽象級(jí)別。
依據(jù)這個(gè)方式,不同API的角色可以通過下面的方式來總結(jié)分類:
-
Kurento 協(xié)議: 它是通過WebSocket網(wǎng)絡(luò)協(xié)議展現(xiàn)Kurento媒體服務(wù)器能力。
-
Kurento API: 它是kurento協(xié)議的對(duì)象實(shí)現(xiàn)。這個(gè)API可以通過引用(ids)來創(chuàng)建和管理媒體元素和管道。 可以使用大多數(shù)的編程語言或框架訪問Kurento API。
-
Kurento Java Client:它是一個(gè)Java SE層,它用來消費(fèi)Kurento API,它通過一個(gè)基于Java POJO的簡單易用并模塊化表示媒體元素和媒體管道的方式暴露它的功能。這個(gè)API的抽象了Kurento內(nèi)部協(xié)議運(yùn)作中所有非直觀的復(fù)雜性,使得開發(fā)人員在創(chuàng)建應(yīng)用程序時(shí),不需要處理這些媒體情況。使用Kurento Java客戶端只需要請(qǐng)求對(duì)maven項(xiàng)目添加一個(gè)合適的依賴并下載對(duì)應(yīng)的jar包到應(yīng)用程序開發(fā)者的CLASSPATH。需要提醒的是,Kurento Java客戶端只是一個(gè)媒體平臺(tái)控制的API。換句話說,它是目標(biāo)是暴露管理媒體對(duì)象的能力,它并沒有提供任何信令平臺(tái)的能力。
-
Kurento JavaScript Client:它是一個(gè)JavaScript層,用來消費(fèi)Kurento API并將其能力暴露給JavaScript開發(fā)者。它可以用來創(chuàng)建node.js和瀏覽器的基本應(yīng)用。在未來,會(huì)創(chuàng)建更多的Kurento客戶端并以同樣的模塊的方式提供給其它語言,如Python, C/C++, PHP等。
從架構(gòu)的角度來說,應(yīng)用程序開發(fā)人員唯一要關(guān)心的是如何使用Kurento客戶端或Kurento API直接創(chuàng)建他們的多媒體應(yīng)用程序。 從頁面應(yīng)用(使用Kurento JavaScript客戶端開發(fā)), 桌面應(yīng)用(使用Kurento Java客戶端開發(fā)),分布式應(yīng)用(使用Kurento協(xié)議開發(fā)) 為它的潛在應(yīng)用場景打開了一個(gè)廣闊的空間。
Kurento 模塊
Kurento設(shè)計(jì)實(shí)現(xiàn)了一個(gè)插件化的框架。默認(rèn)地,Kurento媒體服務(wù)器使用多個(gè)模塊,命名為kms-core, kms-elements 和 kms-filters。另外,Kurento媒體服務(wù)器還有一些內(nèi)建模塊來提升其能力, 這些模塊分別是 kms-crowddetector, kms-pointerdetector, kms-chroma, and kms-platedetector。最后,Kurento媒體服務(wù)器還可以使用定制化模塊來擴(kuò)展。
更多模塊請(qǐng)參考 Kurento Modules 頁面。
使用Kurento創(chuàng)建應(yīng)用程序
Kurento可以按照 WWW 的架構(gòu)原則使用。也就是說,可以使用創(chuàng)建網(wǎng)頁應(yīng)用程序的經(jīng)驗(yàn)和框架來創(chuàng)建媒體應(yīng)用。
在最高級(jí)的抽象層面上,網(wǎng)頁應(yīng)用架構(gòu)由三個(gè)不同的層構(gòu)成:
-
表示層(客戶端): 在這一層上,我們可以找到所有負(fù)責(zé)終端用戶交互的應(yīng)用程序代碼,因此,這些信息都要表示成用戶可以理解的方式。它通常由HTML頁面組成。
-
應(yīng)用程序邏輯層(服務(wù)端): 這一層負(fù)責(zé)給應(yīng)用程序執(zhí)行的指定功能的實(shí)現(xiàn)。
-
服務(wù)層(服務(wù)端或網(wǎng)絡(luò)端): 這一層提供應(yīng)用程序邏輯需要使用的能力,應(yīng)用程序邏輯包括數(shù)據(jù)庫,通信,安全等。這些服務(wù)可以部署在同一臺(tái)服務(wù)器,也可以由外部提供。
類似的,使用Kurento創(chuàng)建的多媒體應(yīng)用也是以同樣的架構(gòu)實(shí)現(xiàn):
-
表示層(客戶端): 負(fù)責(zé)媒體表示和媒體捕捉。它通常是基于客戶端特定的內(nèi)建的能力。例如,我們可以創(chuàng)建一個(gè)基于瀏覽器的應(yīng)用程序,它的表示層可以使用<video> HTML標(biāo)簽或WebRTC JavaScript API。
-
應(yīng)用程序邏輯: 這一層提供了指定的媒體邏輯。換句話說,這一層負(fù)責(zé)創(chuàng)建合適的管道(通過鏈接希望的媒體元素),它包括應(yīng)用程序需要都遍歷到的媒體流。
-
服務(wù)層: 這一層提供了用來支持應(yīng)用程序邏輯的媒體服務(wù),包括媒體錄制,媒體加密等。Kurento媒體服務(wù)器( 如特定媒體元素組成的管道 )負(fù)責(zé)這一層。
這個(gè)討論有興趣的方面在于,對(duì)WWW開發(fā)來說,Kurento應(yīng)用程序可以將表示層部署在客戶端, 把服務(wù)層部署在服務(wù)端。然而,應(yīng)用邏輯層,在這兩種應(yīng)用中,可以部署在這兩端或分布式服務(wù)端, 如下圖所示:
頁面和媒體應(yīng)用的層級(jí)架構(gòu)。使用Kurento(右邊)創(chuàng)建的應(yīng)用程序和標(biāo)準(zhǔn)WWW應(yīng)用(左邊)類似。兩種類型的應(yīng)用程序都可以將應(yīng)用程序邏輯層部署在客戶端或服務(wù)端。
這意味著Kurento開發(fā)者可以在客戶端(使用合適的Kurento客戶端或直接使用Kurento協(xié)議)通過請(qǐng)求應(yīng)用程序來創(chuàng)建指定的媒體管道,也可以部署在服務(wù)端。
上述這兩個(gè)選擇都是可行的,但是它們代表了不同的開發(fā)風(fēng)格。需要注意的是,WWW開發(fā)者通常傾向于維護(hù)盡可能簡單的客戶端,而將大多數(shù)的應(yīng)用程序邏輯層部署在服務(wù)端。Kurento通常也會(huì)復(fù)用這種經(jīng)驗(yàn)而將媒體應(yīng)用邏輯層部署服務(wù)端。因此,可以為你想要的語言使用Kurento客戶端來創(chuàng)建指定的媒體管道。
NOTE: 下面的章節(jié)是將Kurento的處理都部署在服務(wù)端,這是Kurento比較通用的方式。但也可以把媒體邏輯在客戶端使用 Kurento JavaScript Client實(shí)現(xiàn)。
客戶端,服務(wù)端和Kurento的通信
如上圖所示,Kurento應(yīng)用程序的交互在主要的三個(gè)模塊之間:
-
客戶端應(yīng)用程序: 它包括客戶端平臺(tái)原生的媒體能力加上指定的客戶端的應(yīng)用程序邏輯層。它可以在客戶端平臺(tái)使用Kurento客戶端(例如,Kurento JavaScript客戶端)設(shè)計(jì)實(shí)現(xiàn)。
-
應(yīng)用程序服務(wù)端: 它包括一個(gè)應(yīng)用程序服務(wù)端和服務(wù)端的應(yīng)用程序邏輯層。它可以在服務(wù)端平臺(tái)使用Kurento 客戶端(如Kurento Java Client for Java EE and Kurento JavaScript Client for Node.js)設(shè)計(jì)實(shí)現(xiàn)。
-
Kurento媒體服務(wù)器: 它接收命令,用來創(chuàng)建指定的媒體能力(如指定的管道以適應(yīng)于特定應(yīng)用的需要)。
保持這些模塊間的交互要視特定的應(yīng)用程序而定。然而,通常來說,大多數(shù)的應(yīng)用都可以精簡到如下的概念框架:
在架構(gòu)模塊間的主要交互。主要的交互分為兩個(gè)階段: 協(xié)調(diào)和媒體交換。不同的箭頭和顏色都有不同的示意。紅色的是和Kurento媒體服務(wù)器有關(guān),綠色是和應(yīng)用程序相關(guān)。
1. 媒體協(xié)商階段 (信令)
如圖所示,在第一步上,一個(gè)客戶端(一個(gè)PC上的瀏覽器,或一個(gè)移動(dòng)端應(yīng)用等)提交給應(yīng)用程序一個(gè)消息來請(qǐng)求某種媒體能力。這個(gè)消息可以使用任何協(xié)議(http, websocket, SIP等)實(shí)現(xiàn)。例如,這個(gè)請(qǐng)求可以是對(duì)給定視頻片斷的可視化。
當(dāng)應(yīng)用程序收到這個(gè)請(qǐng)求后,如果合適,它將交付給指定的服務(wù)端應(yīng)用程序邏輯層,它包含身份驗(yàn)證,授權(quán)和統(tǒng)計(jì)(AAA),CDR生成,某些Web服務(wù)的消費(fèi)等。
這之后,應(yīng)用程序處理這個(gè)請(qǐng)求,并依據(jù)由開發(fā)者指定的程序,命令kurento媒體服務(wù)器實(shí)例化合適的媒體元素并組成合適的媒體管道。當(dāng)管道創(chuàng)建成功后,Kurento媒體服務(wù)器會(huì)回應(yīng)給應(yīng)用程序,應(yīng)用程序會(huì)再回應(yīng)給客戶端。
上面的過程沒有實(shí)際的媒體數(shù)據(jù)的交換。所有的交互都是協(xié)商要交換什么,如何,在哪,什么時(shí)候的媒體。因此,我們可以稱之為協(xié)商階段。因此,這個(gè)階段只包含有信令協(xié)議。
2 . 媒體交換階段
上一階段之后,新的階段開始實(shí)現(xiàn)實(shí)際的媒體數(shù)據(jù)交換。在協(xié)商階段,客戶端使用信息收集向Kurento媒體服務(wù)器發(fā)送了媒體請(qǐng)求。正如上面提到的視頻截圖可視化示例中,瀏覽器將向Kurento媒體服務(wù)器的IP地址和端口發(fā)送一個(gè)GET請(qǐng)求,在Kurento媒體服務(wù)器上可以獲得這個(gè)截圖,然后,就可以收到這個(gè)媒體的HTTP響應(yīng)。
下面的討論是和一個(gè)簡單的例子相關(guān),有些人可能會(huì)奇怪,為什么如此復(fù)雜的主題只是為了播放一個(gè)視頻,在一些很常見的場景中,客戶端只需要對(duì)視頻的合適的URL發(fā)送一個(gè)請(qǐng)求就可以了,而不需要請(qǐng)求任何協(xié)商。答案很簡單,因?yàn)镵urento是設(shè)計(jì)為了包括復(fù)雜媒體處理的媒體應(yīng)用程序的。答案很簡單,因?yàn)镵urento是設(shè)計(jì)為了包括復(fù)雜媒體處理的媒體應(yīng)用程序的。這樣做的代價(jià)是,對(duì)于很簡單的應(yīng)用,即便如下載一個(gè)視頻,也需要經(jīng)過這兩個(gè)階段。
然后,它的優(yōu)勢是在創(chuàng)建更高級(jí)的服務(wù)時(shí),這套同樣簡單的邏輯一樣可行。例如,如果我們想對(duì)視頻截圖添加虛擬現(xiàn)實(shí)或計(jì)算機(jī)視覺功能,我們只需要在協(xié)商階段選擇需要的媒體元素就可以創(chuàng)建合適的管道來滿足需求。總之,從客戶端角度來看,處理過的截圖會(huì)和其它視頻一樣接收。
使用kurento實(shí)現(xiàn)實(shí)時(shí)WebRTC應(yīng)用
Kurento可以在瀏覽器和Kurento媒體服務(wù)器間,通過使用WebRTC創(chuàng)建實(shí)時(shí)媒體會(huì)話。另外,Kurento媒體服務(wù)器可以被用作媒體代理,以實(shí)現(xiàn)不同客戶端間的通信,它們都通過Kurento設(shè)備做為中轉(zhuǎn)站。因此,Kurento媒體服務(wù)器可以用作會(huì)議橋(Multi-Conference Unit, MCU),如用在機(jī)器到機(jī)器的通信系統(tǒng),視頻呼叫系統(tǒng)等。
如下圖所示,客戶端通過SDP(Session Description Protocol)發(fā)請(qǐng)求來暴露其媒體能力。因此,應(yīng)用程序可以實(shí)例化合適的WebRTC終端,并請(qǐng)求以獲得一個(gè)相應(yīng)的SDP。當(dāng)獲得SDP回答時(shí),它就返回給客戶端。
應(yīng)用程序開發(fā)人員可以在協(xié)商階段創(chuàng)建想要的管道,因此實(shí)時(shí)媒體流會(huì)依據(jù)應(yīng)用需要被處理。 舉例來說,我們想創(chuàng)建一個(gè)WebRTC應(yīng)用程序來錄制從客戶端收到的媒體流并判斷其中是否有需要尋找的人臉,并且找到人臉后就會(huì)給他戴上一頂帽子。這個(gè)管道的主體框架如下圖所示,其中我們假設(shè)濾鏡元素可以進(jìn)行面部識(shí)別并添加一頂帽子。
一個(gè)WebRTC會(huì)話的示例管道。在協(xié)商階段,應(yīng)用程序開發(fā)人員可以創(chuàng)建一個(gè)管道來提供想要的功能。例如,這個(gè)管道使用WebRtcEndpoint 來和客戶端通信,同時(shí),它還連接有一個(gè)RecorderEndpoint 用來存儲(chǔ)收到的媒體流,對(duì)于一個(gè)增強(qiáng)現(xiàn)實(shí)濾鏡來說,它將媒體流返回給客戶端。結(jié)果是,終端用戶將收到它自己的圖像濾鏡(如添加帽子的頭像)并且流被紀(jì)錄到了存儲(chǔ)系統(tǒng)并可以為以后使用。
Kurento 設(shè)計(jì)原則
Kurento的設(shè)計(jì)基于下面的原則:
獨(dú)立的媒體和信令平臺(tái):
信令和媒體是兩個(gè)獨(dú)立的平臺(tái),Kurento設(shè)計(jì)成這樣是為了應(yīng)用程序能獨(dú)立地進(jìn)行媒體處理。
分布式的媒體和應(yīng)用服務(wù):
Kurento Media Server and applications can be collocated, scalated or distributed among different machines.
A single application can invoke the services of more than one Kurento Media Server. The opposite also applies, that is, a Kurento Media Server can attend the requests of more than one application.
** 適合于云處理方式 **
Kurento is suitable to be integrated into cloud environments to act as a PaaS (Platform as a Service) component.
** 媒體管道 **
Chaining Media Elements via Media Pipelines is an intuitive approach to challenge the complexity of multimedia processing.
** 應(yīng)用程序開發(fā) **
Developers do not need to be aware of internal Kurento Media Server complexities, all the applications can deployed in any technology or framework the developer like, from client to server. From browsers to cloud services.
** 端到端的通信能力 **
Kurento provides end-to-end communication capabilities so developers do not need to deal with the complexity of transporting, encoding/decoding and rendering media on client devices.
** 完全可處理的媒體流 **
Kurento enables not only interactive interpersonal communications (e.g. Skype-like with conversational call push/reception capabilities), but also human-to-machine (e.g. Video on Demand through real-time streaming) and machine-to-machine (e.g. remote video recording, multisensory data exchange) communications.
** 模塊化的媒體處理 **
Modularization achieved through media elements and pipelines allows defining the media processing functionality of an application through a “graph-oriented” language, where the application developer is able to create the desired logic by chaining the appropriate functionalities.
** 審查處理 **
Kurento is able to generate rich and detailed information for QoS monitoring, billing and auditing.
** IMS無縫集成 **
Kurento is designed to support seamless integration into the IMS infrastructure of Telephony Carriers.
** 透明媒體適配層 **
Kurento provides a transparent media adaptation layer to make the convergence among different devices having different requirements in terms of screen size, power consumption, transmission rate, etc. possible.
轉(zhuǎn)載于:https://my.oschina.net/997155658/blog/839895
總結(jié)
- 上一篇: 阿尔法狗要逆天!韩专家称其故意输李世石一
- 下一篇: 《算法设计手册》面试题解答 第三章:数据