2012-05-03 17 views
5

我正在構建一個小的Swing應用程序,我想在其中嵌入電影。重要的是,這個應用程序是一個WebStart應用程序 - 並且該庫應該能夠在我啓動的jnlp中打包 - 即,不依賴於本地庫。用於在Swing應用程序中嵌入電影的任何簡單(和最新)Java框架?

我知道並嘗試過JMF,但是與其他框架相比,我認爲它相對較差。

是否有人可以使用他們推薦的庫提供簡單實現的示例代碼片段?

許多在此先感謝。

回答

28

JavaFX作爲基於Java的媒體播放框架的解決方案的一些注意事項。

  1. 作爲Jdk7u4的,JavaFX是共捆綁與JDK的Mac和Windows (XP,Vista中,7,32和64位)。
  2. JavaFX可以嵌入到Swing應用程序中。
  3. JavaFX包含本地庫,但任何Java Framework都需要本地庫來良好地處理視頻。
  4. JavaFX SDK附帶了一個全面的部署工具包,並且/或者包括生成基於jnlp的部署的功能。
  5. JavaFX 2.1支持vp6編碼的flvs(舊格式)以及一些更現代和經常使用的編碼格式,如mp4/aac/mp3。
  6. JavaFX僅支持有限的媒體編解碼器和容器格式,例如如果您的計算機上安裝了編解碼器,並且可以播放以該格式編碼的文件,例如chrome,windows media player或flash,但不能保證相同的文件將在JavaFX中播放。
  7. 在XP或Linux上播放mp4需要用戶手動安裝必要的編解碼器,但其他平臺(osx,win7,vista)不需要手動安裝mp4編解碼器。
  8. 在Mac上使用JavaFX需要用戶使用OpenJDK 7 for Mac,而不是Apple JDK。
  9. JavaFX對於Mac上的jnlp啓動應用程序的支持將在今年晚些時候(2012年)之前不可用,對於Linux也是如此。
  10. 您可能可以將整個JavaFX平臺與您的應用程序綁定在jnlp中(儘管我還沒有看到任何人這樣做)。
  11. jnlp部署的推薦方法是向jnlp添加一個最小JavaFX環境規範,並讓JavaFX部署工具包和webstart負責確保它在用戶計算機上正確存在並正確安裝。
  12. Swing和JavaFX之間的交互需要一些不方便和關注線程,並且Swing和JavaFX之間的應用程序啓動代碼略有不同。有些人在論壇上抱怨這個問題,大多數似乎沒有太多問題。
  13. 無論是好還是壞(我相信都會更好),JavaFX可能是Oracle正在接受持續的主要開發和新功能的唯一媒體和客戶端開發框架。
  14. 最終(今年或下一年)JavaFX將包含在運行現代版本Java SE的所有主要消費者平臺的所有新Java運行時中。
  15. 來自Oracle和第三方的JavaFX開發社區支持(我相信)很好。

下面是一個簡單的JavaFX應用程序,它播放視頻:

import javafx.application.Application; 
import javafx.scene.*; 
import javafx.scene.media.*; 
import javafx.stage.Stage; 

public class VideoPlayerExample extends Application { 
    public static void main(String[] args) throws Exception { launch(args); } 
    @Override public void start(final Stage stage) throws Exception { 
    final MediaPlayer oracleVid = new MediaPlayer(
     new Media("http://download.oracle.com/otndocs/products/javafx/oow2010-2.flv") 
    ); 
    stage.setScene(new Scene(new Group(new MediaView(oracleVid)), 540, 208)); 
    stage.show(); 

    oracleVid.play(); 
    } 
} 
+2

全面總結***和***代碼示例?這是'走多餘的距離'。 :) –

+0

絕對 - 不能同意更多。 – totalcruise

3

儘管我對格式兼容性JMF沒有任何問題,但您可以在JavaFX中查看一下設計爲Flash的競爭對手,因此應該支持所有媒體格式和編解碼器。 您還可以使用JNI/JNA將Flash播放器嵌入到Java應用程序中,但它看起來太複雜了。我建議你從JMF開始,只有在真正遇到問題時才尋找其他解決方案。

2

..have試圖JMF但相對於其他框架存在,當格式的兼容性我認爲是比較差的。

你是對的對缺乏現代編解碼器的支持,但它工作得很好,對老年人的編解碼器。這可能是一個可行的選擇,如果:

  1. 您控制格式(而不是用戶打開'任何舊視頻')。你顯然是這樣做的。
  2. 帶寬不是一個大問題。更現代的編解碼器顯着提高了壓縮率。

雖然使用本機的JMF的「性能包」版本支持更多格式,但核心Java JMF API也提供了一些基本格式。

相關問題