3

以下のような安全な Java アプリケーションを構築したいと考えています。

  1. *.mp4 またはその他の形式の HD メディア ファイルを再生 (フルスクリーン モード 1920x1080)
  2. アプレットにイベント バインディングを追加します (タッチスクリーン モニターを使用します)。

いろいろ検索してみましたが、古い JMF の例 (VLCJ など) しか見つかりませんでした。そこで、このアプレットの構築をどこから始めるべきかをお聞きしたいと思います。含めることができるライブラリ。

ここで同様のプロジェクトを見つけました:メディア シャッフル しかし、メディア ファイルを 1 つのフォルダーに配置し、選択したビデオ (VLC フルスクリーンまたは他のクロスプラットフォーム メディア プレーヤー) を開始するアイコンとしてアプリケーションに表示して、1 回目のタッチで再生するようにします。2 回目のタッチでプレーヤーを停止し、メイン ページに移動する必要があります。

どうすればそれができるか、アイデアを共有してください。コード例はどれも素晴らしいでしょう。

4

3 に答える 3

3

vlcj をお勧めします。必要な、または持っている可能性のあるすべてのフォーマットが含まれていると確信しているためです。まったく時代遅れではなく、使い始めるのも簡単です。言及しますが、私が言及し、より詳細に説明するすべてのステップを整理すると、vlcj がそのようなメディアを処理するための最良のオプションであることがわかります (私の意見ではそうです)。それで作ることはできますが、そのようなものをセットアップしてコーディングするのは難しすぎます。

それでは始めましょう。まず、Swing ベースのアプリケーション (Windows) に vlcj を実装したことをお伝えしたいと思います。ビデオ サーフェスを contentPane に配置します。

手順

1)最初に行うべきことは、vlc メディア プレーヤーをダウンロードすることです (32 ビットまたは 64 ビットの両方のコンピューター環境で再生できる 32 ビット バージョンが必要です)。 jar 実行可能ファイルを実行すると、32 ビット jvm で実行されることがわかりました (Eclipse では 64 ビット jvm で実行され、すべてが問題ありませんでした。そのため、32 ビット バージョンが必要です)。とにかく、32ビットvlcメディアプレーヤーをダウンロードしてインストールする場合は、MyProject内にプロジェクト(「C:/ MyProject」としましょう)を含めるフォルダーをどこかに作成し、別のフォルダーを作成して、たとえば「Needed」と呼びます(ここにすべてを配置しますvlcj が適切に動作するために必要なライブラリ)。C の内容から:\Program Files (x86)\VideoLAN\VLC プラグイン ディレクトリと 4 つの dll (axvlc.dll、libvlc.dll、libvlccore.dll、npvlc.dll) をコピーし、必要なフォルダー内に貼り付けます。

2) Eclipse IDE などで作業している場合は、プロジェクト内にフォルダー (「lib」としましょう) を作成し、その中に別のフォルダー (「jars」という名前) を作成する必要があります。jars フォルダーに次の jar を配置します。 jna-3.5.1.jar、platform-3.5.1.jar、vlcj-2.2.0.jar。これらの jar は vlcj google プロジェクトから見つけることができます。次に、それらをクラスパスに含めます (それらを選択して右クリックします)。 -> ビルド パスに追加するか、プロジェクトのプロパティに移動します -> Java ビルド パスに移動し、これら 3 つの jar を追加します。プレーヤーのセットアップでコーディングを開始する前のセットアップはこれですべてです。

3) 使用を開始する前に vlcj をロードする必要があります。

public void LoadLibrary(){
    SwingWorker loadWorker;     


    loadWorker = new SwingWorker(){

        @Override
        protected Object doInBackground() throws Exception {
            // TODO Auto-generated method stub

            Thread.sleep(2000);

            path = new File("").getAbsolutePath().toString();
            path = path.replace(".", "");
            path = path.replace("\\", "//");
            path = path+"//Needed";

            if(RuntimeUtil.isWindows()){
                NativeLibrary.addSearchPath(
                        "libvlc",path



                            );
                            Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);




                    }
            else if(RuntimeUtil.isNix()){
                    NativeLibrary.addSearchPath(
                            "libvlc",path

                            );
            }



            mediaPlayerFactory = new MediaPlayerFactory();
            player = mediaPlayerFactory.newEmbeddedMediaPlayer();
            CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas);
            player.setVideoSurface(videoSurface);


            return null;
        }

    };
    loadWorker.execute();

}

Swing ベースのアプリ用のスレッドを作成するのは、メディア キャンバスが表示可能でなく、コードが完成したときにコンストラクター内のすべてが完全にビルドされている場合、メディアを再生できないためです。つまり、プレーヤーを作成する前に、まずコンストラクターがジョブを終了し、JFrame (または jWindow や jDialog など) が表示可能になるまでの遅延 (私の場合は 2 秒) を作成します。 Eclipse) を入力し、必要なネイティブ ライブラリを実装するために必要なフォルダーを入力します。if ステートメント内で、計算した特定のパスで libvlc.dll を検索し、それをロードして、メディア ファイルを再生するために一歩前進するようにシステムに指示します。if-else ステートメントの外側で、実際にプレーヤーを作成し、その VideoSurface のキャンバスを配置します (canvas はキャンバス java.awt オブジェクトです。Windows でのみ作業するため、WindowsCanvas を使用します。Linux または Mac で同様のキャンバスを見つけることができます (心配しないでください) that!)) Swing-Worker フィールド (スレッド) の外では、スレッドに実行するように指示するだけです (call-function 命令として重要です)。

4)ファイルを再生するには、アプリのどこかでボタンを使用して、ボタンが押されるたびにアクションイベントを呼び出し、その中で何かを行います.たとえば、JFileChooserを作成してメディアファイルを選択します.簡単に検索できますそのためですが、ここに私のコードがあります:

final JFileChooser chooser = new JFileChooser();

            FileNameExtensionFilter filter0 = new FileNameExtensionFilter(".wav", "wav");
            FileNameExtensionFilter filter1 = new FileNameExtensionFilter(".mp3","mp3");
            FileNameExtensionFilter filter2 = new FileNameExtensionFilter(".mpg","mpg");
            FileNameExtensionFilter filter3 = new FileNameExtensionFilter(".mp4","mp4");
            FileNameExtensionFilter filter4 = new FileNameExtensionFilter(".avi","avi");
            FileNameExtensionFilter filter5 = new FileNameExtensionFilter(".flv","flv");
            FileNameExtensionFilter filter6 = new FileNameExtensionFilter(".wmv","wmv");
            FileNameExtensionFilter filter7 = new FileNameExtensionFilter(".3gp", "3gp");
            FileNameExtensionFilter filter8 = new FileNameExtensionFilter(".swf", "swf");
            FileNameExtensionFilter filter9 = new FileNameExtensionFilter(".mkv", "mkv");
            FileNameExtensionFilter filter10 = new FileNameExtensionFilter(".flac", "flac");
            FileNameExtensionFilter filter11 = new FileNameExtensionFilter("Music & Videos","wav","mp3","mpg","mp4","avi","flv","wmv","3gp","swf","mkv","flac","VOB");
            FileNameExtensionFilter filter12 = new FileNameExtensionFilter("Music","wav","mp3","flac");
            FileNameExtensionFilter filter13 = new FileNameExtensionFilter(".VOB", "VOB");
            FileNameExtensionFilter filter14 = new FileNameExtensionFilter("Videos","mpg","mp4","avi","flv","wmv","3gp","swf","mkv","VOB");


            chooser.setFileFilter(filter14);
            chooser.setFileFilter(filter2);
            chooser.setFileFilter(filter3);
            chooser.setFileFilter(filter4);
            chooser.setFileFilter(filter5);
            chooser.setFileFilter(filter6);
            chooser.setFileFilter(filter13);
            chooser.setFileFilter(filter7);
            chooser.setFileFilter(filter8);
            chooser.setFileFilter(filter9);
            chooser.setFileFilter(filter12);
            chooser.setFileFilter(filter0);
            chooser.setFileFilter(filter1);
            chooser.setFileFilter(filter10);
            chooser.setFileFilter(filter11);   



            int returnVal = chooser.showOpenDialog(getParent());
            if(returnVal == JFileChooser.APPROVE_OPTION) {
                System.out.println("You chose to open this file: " +
                chooser.getSelectedFile().getName());
                File myfile1 = chooser.getSelectedFile();
                myfilepath1 = chooser.getSelectedFile().getAbsolutePath();
}

        player.startMedia("file:///"+myfilepath1);
                player.pause();     

これらのファイル フィルターは、vlcj が再生できるメディア ファイルの種類の一部です。ファイル ダイアログを開いてファイルを選択し、ファイルを選択した場合は、そのパスを保持します (vlcj が検索する場所を指定するのに便利です)。 )。

5)ファイルを再生するには、次のコードを入力するだけです:

player.play();

たぶん、別のボタンの別のアクションイベントの中にあります。

6) これらを書き終えたら、最初に作成した MyProject フォルダーにプロジェクトを実行可能な jar ファイルにエクスポートして実行するだけです (コンソールからではなくダブルクリックしてください (それ以外の場合は 64 ビットで実行されます)。 jvm と、32 ビットのネイティブがあり、vlcj がそれらの競合を受け入れないため、それは望ましくありません)))

結論として、これらの手順はうまくいったと言わざるを得ません。アプリ開発をさらに進めるのに役立つことを願っています。

よろしく、 PeGiannOS

于 2013-04-05T20:59:38.360 に答える
2

まず、あなたがしなければならない

// URL で指定されたメディアを再生するプレーヤーを作成します

Player mediaPlayer = Manager.createRealizedPlayer( mediaURL );

mediaPlayer.start(); // start playing the media clip

うまくいくことを願っています!

于 2012-04-10T08:45:13.387 に答える
0

VLCJは時代遅れではなく、積極的に開発されており、非常に柔軟で強力です。私はこれをアプリケーションで使用して、アプリケーション内の多数のビデオストリームを一度に表示したり、テキストオーバーレイなどを同時に実行したりしています。これを行うのは難しい場合もありますが、間違いなく可能です。

ここでVLCJを使い始めるための基本的な(最新の)例がいくつかあります。

于 2012-05-24T20:12:54.340 に答える