2013-11-27 202 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(); 
}