因為最近工作的關係,接觸到Kurento這個服務,這個Kurento的服務是用來當直播使用的其中一種Server,它是一個非常有用的服務,

尤其是當我們想要自己架可以直播用的Server,Kurento是一個很好的選擇,它使用的是GStreamer的串流技術,更詳細的內容大家可以參考它的網站說明。

 

我們通常的需求不會只有直播就結束,很常的情況是我們必需在直播的同時,加上一些東西在畫面上,例如:文字、時間...等等的畫面處理,

因為我們開發時都是站在巨人的肩膀上,所以不可能從底層將串流轉成一張一張的圖片後,再一張一張的去做圖片處理,最後再轉成串流,

基本上如果你可以達成這樣的功能的話,你應該也不需要看這篇文章了;

所以,我們需要的是Kurento的Filter的功能,這個功能可以達成我們在串流的畫面上進行一些特殊的處理。

 

而如同官網所說,Kurento可以利用GStreamer的Filter功能,不過詳細看過官網就可以知道,官網寫的完全不足以讓我們簡單的明瞭怎麼去使用這種功能,

所以這邊特地寫一篇關於Kurento如何使用GStreamer的Filter功能。

挑選要使用的Fileter

首先,我們要先挑選我們要使用的Filter,而GStreamer的Filter在Kurento叫做Filter,但在GStreamer中叫做Plugin,所以我們必須使用"GStreamer plugin"的關鍵字來找到網站。

假設我們要使用Gamma這個Plugin(如下圖)

我們就點進去這個連結後,可以看到下圖:

可以看到如果要在GStreamer中使用這個gamma的plugin的話,透過gamma gamma=2.0這樣的指令就可以使用了,接下來的問題就是,

我們要怎麼將這行指令利用在Kurento中了。

Kurento的JAVA程式

接下來我們要利用Kurento的JAVA程式,來使用GStreamer的Plugin,JAVA的程式,我們就使用Kurento提供的Hello World的程式來示範吧。

首先下載Hello World的程式後,並啟動這支程式來看效果:

這是正常的效果,接下來我們開啟其中的HelloWorldHandler.java後,移到start的程式碼,

原本的程式如下:

修改後的程式:

修改後的結果:

可以看到我們改的程式不多,但是已經達到使用GStreamer plugin的效果了。

 

修改的程式說明:

首先要import org.kurento.client.GStreamerFilter,再來是99行的

      GStreamerFilter gf = new GStreamerFilter.Builder(pipeline, "gamma gamma=2.0").build();

在 GStreamerFilter.Builder中帶入pipeline及GStrreamer plugin的指令,再來是100行,

      webRtcEndpoint.connect(gf);

這個webRtcEndpoint是接收網頁的webrtc資料的input,之後要將這個串流進行connect,連接到我們建立的GStremerFilter,最後是101行,

      gf.connect(webRtcEndpoint);

經過GStremerFilter後的串流,再回流到webRtcEndpoint,最後這個webRtcEndpoint會將資料再回送給網頁。

 

簡單來說,首先建立GStreamerFilter,再來就是將串流來源連接到這個Filter,最後再將Filter的串流,流到要輸出的地方即可完成。

arrow
arrow

    JAVA Programmer 發表在 痞客邦 留言(0) 人氣()