2010-12-08 138 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中获得缓冲区指针。