2012-06-19 82 views
2

我試圖播放使用JMF的視頻文件,但它給我No Media Player found exception使用jmf播放視頻

這是我的代碼,任何人都可以告訴我我在做什麼錯在這裏?

public class MediaPanel extends JPanel { 
public MediaPanel(URL mediaURL) { 
    setLayout(new BorderLayout()); 

    try { 
     Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true); 
     Player mediaPlayer = Manager.createRealizedPlayer(mediaURL); 
     Component video = mediaPlayer.getVisualComponent(); 
     Component controls = mediaPlayer.getControlPanelComponent(); 

     if (video != null) 

      add(video, BorderLayout.CENTER); 

     if (controls != null) 
      add(controls, BorderLayout.SOUTH); 

     mediaPlayer.start(); 
    } catch (NoPlayerException noPlayerException) { 
     System.err.println("No media player found"); 
    } // end catch 
    catch (CannotRealizeException cannotRealizeException) { 
     System.err.println("Could not realize media player"); 
    } // end catch 
    catch (IOException iOException) { 
     System.err.println("Error reading from the source"); 
    } 
} 
} 



public class MediaTest { 

public static void main(String args[]) { 
    // create a file chooser 
    JFileChooser fileChooser = new JFileChooser(); 

    // show open file dialog 
    int result = fileChooser.showOpenDialog(null); 

    if (result == JFileChooser.APPROVE_OPTION) // user chose a file 
    { 
     URL mediaURL = null; 
     Player mediaPlayer = null; 

     try { 
      // get the file as URL 
      mediaURL = fileChooser.getSelectedFile().toURL(); 
     } catch (MalformedURLException malformedURLException) { 
      System.err.println("Could not create URL for the file"); 
     } 

     if (mediaURL != null) { 
      JFrame mediaTest = new JFrame("Media Tester"); 
      mediaTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

      MediaPanel mediaPanel = new MediaPanel(mediaURL); 
      mediaTest.add(mediaPanel); 

      mediaTest.setSize(300, 300); 
      mediaTest.setVisible(true); 
     } 
    } 
} 
} 

例外,我得到的是No media player found

+0

http://www.coderanch.com/t/537089/java/java/do-you-include-libraries-JMF –

+0

@KazekageGaara是的,我確實添加了jmf.jar,mediaplayer.jar..is there anything否則我必須包括除了這兩個罐子.. – Ruby

+0

你是否經歷了整個鏈接?此外,您應該執行'yourExceptionVariable.printStackTrace()'以更好地瞭解到底發生了什麼問題。 –

回答

7

是你要玩什麼類型的影片? JMF是一個非常古老的圖書館,不能播放大多數現代視頻格式,只有幾個舊的(我甚至不知道哪些是什麼)。實際上,如果我是對的,要玩特定的東西,你必須將自己的視頻編碼器寫入/添加到JMF中,或者至少下載和使用現有的視頻編碼器,這些通常是過時的。

如果你真的想擁有像可調視頻播放器,可以播放任何現代視頻有兩種選擇(在我看來):

  1. 使用vlcj庫嵌入VLC視頻播放器到您的Java的應用

  2. 使用JavaFX的media player

我只承認那些提供因爲前段時間我已經挖掘了大量的圖書館,甚至沒有其他的東西與這兩個圖書館很接近。此外,大多數其他庫和JMF本身都已過時,而且這兩個庫正在頻繁更新並得到大量用戶的支持,因此這兩個庫是最佳選擇。

如果您不介意將Java FX播放器嵌入您的應用程序 - 這可能是您的選擇。另一方面 - vlcj是穩定的並且很容易集成到Swing應用程序中(它不像Java FX那樣硬,但vlcj在某些情況下可能更好)。

無論如何,這是你的電話什麼選擇。

+0

臭臭的死魚( JMF)+1 – mKorbel

+0

@Mikle Garin感謝您的回覆,實際上我正在嘗試使用vlcj ...我的主要任務是捕獲來自ip camera的實時視頻流並在我的應用程序中顯示視頻...任何建議或使用vlcj的簡單代碼示例將非常有用 – Ruby

+0

@Ruby,其實我對vlcj並不擅長 - 在很久以前就在我自己的項目中使用過它,它對於簡單的視頻重放案例(即使在非-win OS)。也許這個(http://code.google.com/p/vlcj/wiki/Streaming)特定的教程和一些其他資源可能會幫助您開始使用vlcj。 –