2

を使用してビデオファイルを再生しようとしていますJMFが、No Media Player found exception.

これが私のコードです。誰かが私がここで間違っていることを教えてもらえますか?

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

4

1 に答える 1

7

どんな動画を再生しようとしていますか?JMFはかなり古いライブラリであり、最新のビデオ形式のほとんどを再生できず、いくつかの古い形式しか再生できません(どれかはわかりません)。

実際、私が正しければ、特定の何かを再生するには、独自のビデオエンコーダーをJMFに書き込む/追加するか、少なくとも、通常は古くなっている既存のエンコーダーをダウンロードして使用する必要があります。

最新のビデオを再生できる調整可能なビデオプレーヤーのようなものが本当に必要な場合は、2つのオプションがあります(私の意見では)。

  1. vlcjライブラリを使用して、 VLCビデオプレーヤーをJavaアプリケーションに埋め込みます

  2. JavaFXメディアプレーヤーを使用する

しばらく前にたくさんの図書館を調べたことがあり、これら2つに近いものは他になかったので、私はこれら2つだけを提供しています。さらに、他のほとんどのライブラリはJMF自体と同様に古く、これら2つは頻繁に更新され、多くのユーザーでサポートされているため、これら2つが最良の選択です。

アプリケーションにJavaFXプレーヤーを埋め込んでもかまわない場合は、それが選択になる可能性があります。

一方、vlcjは安定しており、Swingアプリケーションに簡単に統合できます(Java FXでのハードとは異なりますが、場合によってはvlcjの方が適している場合があります)。

とにかく、何を選ぶかはあなたの呼びかけです。

于 2012-06-19T08:42:32.043 に答える