2010-12-08 140 views
2

我想爲我的Java Swing應用程序啓用高清視頻播放功能,但我擔心可擴展性和明顯缺乏直接屏幕寫入訪問。我有一個本地C++庫,它將進行編碼和解碼(h.264)我將通過JNI訪問這個庫,它將返回一個int [],我將呈現給屏幕。在Java Swing中渲染高清視頻?太慢了?

迄今爲止,通過JNI,編碼/解碼性能相當不錯。然而,我擔心渲染開銷。我想同時打開多個視頻效果圖,所以我想確保我以最有效的方式做事。

這是使用Java/Swing渲染視頻的最有效方式嗎?有什麼方法可以直接寫入屏幕,而不必通過Java繪製系統?

這是我的代碼的外觀: ` 公共類的VideoDisplay擴展JLabel {

BufferedImage m_bufferedImage = null; 


public VideoDisplay(Dimension frameSize) { 
    // If there is nothing to show, make sure the widget is black. 
    setBackground(Color.black); 

    m_bufferedImage = new BufferedImage(frameSize.width, frameSize.height, 
      BufferedImage.TYPE_INT_ARGB); 

    ImageIcon frameIcon = new ImageIcon(m_bufferedImage); 
    setIcon(frameIcon); 

} 

public void displayNewFrame(int[] newPixels, Dimension imageSize) { 
    m_bufferedImage.setRGB(0, 0, imageSize.width, imageSize.height, 
      newPixels, 0, imageSize.width); 
    repaint(); 

} 

}`

現在我在24FPS顯示720p視頻的開銷似乎是約6% Core2 Quad 6600 CPU上的CPU。

有沒有更快的方法來做到這一點?

+0

查看JMF(Java Media Framework):http://en.wikipedia.org/wiki/Java_Media_Framework – Jesper 2010-12-08 11:00:08

回答

1

你應該完全繞過Java的,要麼使用表面,或把數據直接緩衝區和不穩定的圖像回來了。

編輯:看起來你可能很容易做後者。無論如何,通過直接字節緩衝區通過JNI傳輸圖像數據。您可以在C中獲得緩衝區指針。