2013-11-27 119 views
1

我正在使用Xuggle库在JPanel上播放mp4视频,但视频加载需要3秒。或者更多。你有没有建议如何以正确的方式在JPanel或JLabel上播放视频?如何在JPanel上播放mp4视频?

这是显示mp4视频的好方法吗? VideoCodec是一个Xuggle编解码器。这工作,但我有几秒钟的延迟。

public void setVideoName(final String videoName) { 
    imageAndVideoPanel.removeAll(); 
    final VideoPanel videoPanel = new VideoPanel(); 
    videoPanel.setPreferredSize(Const.Dimensions.VIDEO_SIZE); 
    videoPanel.setMinimumSize(Const.Dimensions.VIDEO_SIZE); 
    videoPanel.setMaximumSize(Const.Dimensions.VIDEO_SIZE); 
    imageAndVideoPanel.add(videoPanel); 

    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      VideoCodec videoCodec = 
        new VideoCodec(videoPanel, videoName + TextsDao.getText("videoFilesExtension")); 
     } 
    }).start(); 
} 
+1

是什么让你认为一个3秒负载是慢?视频有多大?无论如何,这里有几个建议http://stackoverflow.com/search?tab=relevance&q=play%20video%20swing – DSquare

+0

这是一个comercioanal应用程序,所以它应该以更好的方式完成。在我的电脑上3秒(赢8,核心i7),但在较慢的电脑上它是5-6秒。视频 - mp4(5-10MB)。也许这是更好的展示视频的方式。我会找到它。谢谢。 –

+0

我找到了解决方案。我用VLCJ库,现在视频加载1秒。谢谢 :) –

回答

2

我找到了解决方案。 VLCJ库和EmbeddedMediaPlayer。代码播放视频/图像很简单:

public class ExamQuestionsLeftPanel extends JPanel { 
private EmbeddedMediaPlayerComponent component; 
private EmbeddedMediaPlayer player; 

...

public ExamQuestionsLeftPanel() { 
    setUpPanel(); 
    initializeComponents(); 
} 

private void setUpPanel() { 
    NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "VLCx86"); 
    component = new EmbeddedMediaPlayerComponent(); 
    player = component.getMediaPlayer(); 

    Border emptyBorder = BorderFactory.createEmptyBorder(10, 10, 10, 10); 

    setLayout(null); 
    setBackground(Const.Colors.EXAM_BACKGROUND_COLOR); 
    setAlignmentX(Component.LEFT_ALIGNMENT); 
    setBorder(emptyBorder); 
} 

...

public void setImageName(String imageName) { 
    player.stop(); 
    player.prepareMedia("media" + File.separator + imageName); 
    player.parseMedia(); 
    player.play(); 
} 

public void setVideoName(final String videoTitle) { 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      player.stop(); 
      player.prepareMedia("media" + File.separator + videoTitle); 
      player.parseMedia(); 
      player.play(); 
     } 
    }).start(); 
}