讓Swing播放YouTube串流影音(三) – 使出JavaScript的看家本顉(上)
如果你想…
- 用Swing的元件操控YouTube
- 取得播放時的各項資訊在Swing上面顯示
- 播放操控其它網路影音
這篇文章應該可以幫助您 :)
要操控YouTube上面播放的影音,要先去看它的內部是如何運作的 - 說穿了,其實就是JavaScript…
當然這些網路上也有滿多的解釋,不過這邊還是稍為說明一下...
在YouTube APIs and Tools中,可容易的找到操控YouTube的 Player API。
Player API有提到說播放YouTute有二種方式
The first thing you should know is there are two kinds of players: the normal "embedded" player you've seen around the web, and a second "chromeless" player that is just a video box without any controls.
這二種方式都可以透過JavaScript或ActionScript來做操控...
第一種是利用<embed>的方式嵌入網頁,而第二種(它們稱為chromeless)是沒有任何的控制面版的 - 這正是我們想要的:)
關於第二種,網頁上有做出一個簡單的example,來說明如何利用JavaScript去控制它...
好了,前面說了這麼多廢話(?),差不多該進入主題了XD
- Swing到底是怎麼與它(YouTube)做溝通的
在先前的文章中有提到JWebBrowser有個方法可以去設置網頁的主體內容
public boolean setHTMLContent(String html)
也就是說,我們可以把在這個網頁中放置一些操控YouTube的JavaScript程式( 就如同在chromeless網頁原始檔中所見到的JavaScript ),接著再利用此方法:
public void executeJavascript(String javascript)
這個方法不但可以直接在Java程式碼執行JavaScript,也可以直接讀取HTML裡面的JavaScript Function,說到這應該有人已經知道是怎麼一回事了:)
簡單整理一下整個流程:
- 【取得】或【自行設計】一個可以用來播放YouTube的網頁。
- 在網頁內放置操控YouTube的JavaScript Function。這個網路上有很多可以參考
- 設計好一個含有JWebBrowser元件的Swing程式
- 在程式中讀取HTML檔案並傳給setHTMLContent(String html)
- 在事件中利用executeJavascript(String javascript),來呼叫HTML內控制YouTube的JavaScript Function
- 順利的話,開始放映:)
上面大部分的內容,在前一篇中有說明了,這裡把重心放在用Swing如何操控的部分...
為了讓Swing可以去操控它,在此準備了一個JLabel作為操控的媒介。
除此之外,當程式開始執行時,這時候因為YouTube還沒準備好,所以不能直接播放。如果直接在執行時就播放的話,它馬上告訴你沒有這個物件XD
要判斷YouTube是否準備完成,可以透過chromeless網頁內的這個JavaScript Function
透過它,在最後送出一個already的Command字串到sendCommand Function內。
這個sendCommand Function的主要作用就是將接收到的command寫到網址列
當command(這裡指的是already)被送出時,這時候JWebBrowser的網址列會接收到command://already
在JWebBrowser的WebBrowserListener事件中,有個方法就是用來接收command的
public void commandReceived(WebBrowserEvent arg0, String arg1, String[] arg2)
所以我們只要在這檢查一下是否有收到already就行了:)
下面是使用chromeless內的JavaScript來播放YouTube的完整程式碼
有没有更好的办法呢,毕竟djnativeswing与swing的互操作因为swt的问题,而没办法在MAC OSX下运行。。。
由...發表 blader on 九月 04, 2009 at 05:37 下午 CST #
您所謂的更好的辦法,指的是什麼 :)
由...發表 UndeadJ on 九月 05, 2009 at 02:39 上午 CST #