Как я могу играть в mp4 с vlcj? - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь воспроизвести файл .mp4 в моем приложении java. Мне не нужны какие-либо кнопки управления (воспроизведение, остановка) и т. Д. c. Когда я запускаю этот код, я вижу только черный квадрат. Что я могу с этим поделать?

import java.awt.*;
import javax.swing.*;

import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;

import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.player.MediaPlayerFactory;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import uk.co.caprica.vlcj.player.embedded.windows.Win32FullScreenStrategy;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;

public class Vid {

    public static void main(String[] args) {

        JFrame f = new JFrame("Play");
        f.setSize(500, 500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setVisible(true);

        Canvas c = new Canvas();
        c.setBackground(Color.black);
        JPanel p = new JPanel(new BorderLayout());
        p.add(c);
        f.setContentPane(p);

        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:/Program Files/VideoLAN/VLC");
        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

        MediaPlayerFactory mpf = new MediaPlayerFactory();
        EmbeddedMediaPlayer emp = mpf.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(f));
        emp.setVideoSurface(mpf.newVideoSurface(c));

        emp.prepareMedia("C:/file.mp4");
        emp.play();
    }

}

1 Ответ

0 голосов
/ 01 февраля 2020

Экран черный только потому, что ваши медиафайлы не начали воспроизводиться.

Если вы проверите возвращаемое значение из вызовов prepareMedia и / или play, которые вы делаете, вы можете найти они возвращают false, чтобы указать на ошибку.

Возможно, это связано с тем, что вы указали Java независимый от платформы стиль имени файла "c: / file.mp4".

Вам нужно чтобы понять, что vlcj использует LibVL C, нативную библиотеку, и поэтому вы в буквальном смысле передаете этой нативной библиотеке «c: / file.mp4» - это неправильное имя файла для использования в Windows.

Вместо этого вам нужно передать «c: \ file.mp4», а точнее «c: \\ file.mp4», так как обратная сторона sh должна быть экранирована.

Вне зависимости от вашей проблемы, нет необходимости вызывать prepareMedia перед игрой, вместо этого используйте метод playMedia.

...