2

私は現在、mkvフォーマットを再生できるJavaメディアプレーヤーに取り組んでいます。を使用してVLCJいますが、動作していないオーディオ トラックを変更しようとした場合を除いて、すべて動作しています。

ここにコードがあります

public class mediaplayer {

    private static JFileChooser filechooser = new JFileChooser();

    public mediaplayer() {
    }

    public static void main(String[] args) {
        String vlcPath = "", mediaPath = "";
        File ourfile;

        filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        filechooser.showSaveDialog(null);
        ourfile = filechooser.getSelectedFile();
        mediaPath = ourfile.getAbsolutePath();

        EmbeddedMediaPlayerComponent mediacom = new EmbeddedMediaPlayerComponent();

        JFrame frame = new JFrame();
        frame.setContentPane(mediacom);
        frame.add(canvas);
        frame.setLocation(100, 100);
        frame.setSize(1050, 600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setVisible(true);

        MediaPlayer mplayer = mediacom.getMediaPlayer();

        mplayer.playMedia(mediaPath);
        mplayer.setAudioTrack(1);
    }
}
4

2 に答える 2

3

vlc 2.0.5より前の libVLC バージョンでは、オーディオ トラックを設定するためのネイティブ API 呼び出しにバグがありました。

libVLC 2.0.5の修正により、オーディオ トラックの設定は確実に機能しますが、 0..Nからの単純なインデックスを想定することはできず、連続したトラック番号を想定することもできませんmediaPlayer.getAudioDescriptions()。. 返された TrackDescription オブジェクトには、 で使用するオーディオ トラック識別子が含まれていmediaPlayer.setAudioTrack()ます。

オーディオを無効にするには、 の説明を持つトラックのオーディオ トラック識別子を選択できます"Disable"

また、 を呼び出した直後はオーディオ トラックを設定できない場合があることに注意してくださいmediaPlayer.playMedia()。メディアは非同期的に開始されるため、トラック情報が利用可能になる前に、メディアが実際に開始されるか解析されるまで待つ必要がある場合があります。

于 2013-08-01T19:19:29.727 に答える