Java播放多媒體
Java對多媒體檔案的支援很差,自帶的庫只能播放.mp3
等有限的幾種格式的檔案,連.wma
都不支援。所以,要想用Java播放幾種常見的多媒體檔案,就得救助外部的第三方庫。
目前用Java播放.wma
等格式的多媒體檔案,主要有兩種方式。一種是通過Java的Runtime
呼叫第三方播放器,另一種是通過JNI
呼叫第三方播放器提供的動態連結庫。
呼叫第三方播放器,mplayer
支援較好。mplayer
輕量快速,支援常見的多媒體格式,而且有個slave
模式,方便外部程式通過IPC
對其進行控制。
但呼叫第三方播放器,相容性較差,需要系統裝有相應的播放器,而且不好控制。所以,最好使用動態連結庫的方式呼叫。
Java通過動態連結庫播放多媒體檔案,常用的第三方Wrapper庫主要有以下兩個:
1. gst1-java-core
ofollow,noindex">gst1-java-core 是Java對GStreamer的繫結
依賴:compile "org.freedesktop.gstreamer:gst1-java-core:0.9.3"
示例程式碼:
import org.freedesktop.gstreamer.Gst import org.freedesktop.gstreamer.elements.PlayBin import java.io.File import java.util.concurrent.TimeUnit fun main(args:Array<String>) { Gst.init() val playBin = PlayBin("") playBin.setURI(File("/mnt/d/music/test/江美琪-我心似海洋.wma").toURI()) playBin.play() Thread.sleep(100) playBin.seek(50, TimeUnit.SECONDS) Thread.currentThread().join() }
注意:
- GStreamer 使用前需要先初始化
- 從指定位置開始播放,需要Sleep以下,不知道為啥
2. vlcj
vlcj 是Java對VLC的繫結
依賴:compile "uk.co.caprica:vlcj:3.10.1"
import uk.co.caprica.vlcj.component.AudioMediaPlayerComponent fun main(args:Array<String>) { val mediaPlayer = AudioMediaPlayerComponent().mediaPlayer mediaPlayer.playMedia("/mnt/d/music/test/江美琪-我心似海洋.wma") mediaPlayer.skip(80000) Thread.currentThread().join() }