因為最近工作的關係,接觸到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的串流,流到要輸出的地方即可完成。
留言列表