這幾天在研讀JMF API. JMF 是 Java Media Framework 的縮寫。其主要是用在處理 vedio 以及 audio 用的。為什麼
突然會想到要去讀這個API呢?原因是這幾天在玩Skype這個軟體。其實也沒玩什麼,裝好了跟在美國的弟弟玩了一下,絕得
還不錯,利用它可以省下很多的電話費用。不過,我倒是一直在想這樣的軟體是如何寫成的.....
Google了五,六個小時,終於發現到 Sun 有提供 JMF 這個套件,它提供了處理靜態以及即時的(real-time)的 audio 和 vedio 的功能。如果想要做一個類似 Skype 的軟體,這個 JMF API 可要好好拿來仔細讀一讀。所以,又花了三個多小時 Google 了一些範例程式,基本上,我只想要看看如何在一台電腦上(電腦A)執行程式,它可以捕捉麥克風的輸出,然後將聲音傳送到
另一台電腦(電腦B),電腦B這一端必須能夠聽到電腦A所傳來的對話。(就是單方的,一方講,另一方可以聽到他在講啥。)
Sun 的網站提供了兩個範例程式:
AVReceive2.java
以及 AVTransmit2.java。因此,剛好可以拿來
驗證及實作上面的想法。
花了好多時間測試,可是一直無法達到目標,所以,跑去把整本API看過一遍,然後跑去 Java Soft 的 Fourm 找看看別人如何解決的,慢慢地有了一些頭緒了。
發現到在我的電腦A上,我必須用如下的方式啟動才行:
java AVTransmit2 dsound:// 192.168.0.255 22222 (p.s. using 255 for subnet broadcasting)
我怎麼會知道第一個參數呢?當你安裝完 JMF API 後,在檔案夾中有一個檔案叫做 jmfregistry.exe,可以用它來看看這台機器支援哪些捕捉裝置(Capture Devices)。
在我的電腦A中,它顯示出有兩個:一個是 JavaSound 另一個是 DirectSound。之前我一直用 JavaSound,可是怎麼都試不出來,還出現一堆錯誤,可能是電腦A本身的
裝置就沒有安裝好。所以我就把第一個參數改成使用 DirectSound。接著啟動電腦A的程式(AVTransmit2),然後也啟動電腦B的程式(AVReceive2)。
java AVReceive2 192.168.0.104/22222 (p.s. 104 is the IP of computer A)
敲了老半天
電腦A的麥克風,可是電腦B中的耳機還是沒聲音。弄到這裡,真的有點給它頭暈了,跑去跟神貓祈禱給我力量,上來後突然想到:會不會是B中的耳機音量沒開呢?哈!果真如此,
總算在電腦B聽到了電腦A傳來的聲音了。雖然兩者相距只有兩公尺,但是,能夠藉由Internet配合JMF API聽到遠方的聲音,那種感覺真的很高興。好累喔.....,不過,
似乎讓我想到了一個不錯的專題來了。Audio Conferencing - Using JMF。