Проблема с частотой кадров с vlcj

Недавно я пытался записать свой экран, используя модифицированную версию одного из примеров кода, который я нашел здесь, в stackoverflow, но, как вы сами видите, частота кадров сохраненного файла чрезвычайно ужасна. не могли бы вы помочь? вот код, который я использовал:

public class CaptureTest {

private final MediaPlayerFactory factory;
private final HeadlessMediaPlayer mediaPlayer;

public static void main(final String[] args) {
    boolean found = new NativeDiscovery().discover();
    System.out.println(found);
    System.out.println(LibVlc.INSTANCE.libvlc_get_version());
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new CaptureTest().start("screen://");
        }
    });
}

public CaptureTest() {
    factory = new MediaPlayerFactory();

    mediaPlayer = (HeadlessMediaPlayer) factory.newHeadlessMediaPlayer();
}

private void start(String mrl) {

    File dir = new File(System.getProperty("user.home"), "Videos");
    dir.mkdirs();


    String fileName =  "C:\\Users\\Reza Taheri\\Documents\\video7.mp4";

    String[] options = {
            ":sout=#transcode{vcodec=h264,venc=x264{cfr=16},acodec=mp4a,vfilter=canvas{width=854,height=480},samplerate=4096}:std{mux=mp4,access=file,dst=" + fileName + "}", ":input-slave=screen://",":screen-fps=24"
    };



    JPanel cp = new JPanel();
    JButton recordButton = new JButton("Record");
    cp.add(recordButton);
    JFrame frame = new JFrame("vlcj");
    frame.setContentPane(cp);
    frame.setLocation(10, 10);
    frame.pack();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent e) {
            mediaPlayer.stop();
            mediaPlayer.release();
        }
    });
    recordButton.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            frame.setState(JFrame.ICONIFIED);
            mediaPlayer.playMedia(mrl, options);
        }
    });
    frame.setVisible(true);


}

}

Я использую Windows 10 с последней версией vlcj и vlc media player.


person user109107    schedule 10.10.2017    source источник


Ответы (2)


Я признаю, что не знал, что это возможно (записывать экран с помощью vlcj), но я собираюсь сказать, что проблема не связана с vlcj, поскольку вы передаете множество параметров в libvlc, и именно эти параметры говорят libvlc записывать ваш экран (если я правильно понял код)

Я не могу помочь с этим, но читайте больше о libvlc и его аргументах/параметрах.

person Payerl    schedule 17.10.2017

Ваша текущая частота кадров составляет 24, что хорошо. Я думаю, вы хотите сказать, что качество сохраненного видео плохое. Основным фактором качества видео является битрейт видео. Установите битрейт в параметрах транскодирования и еще раз проверьте качество видео.

e.g. vb=1024 or vb=2000

Кроме того, если вы хотите, чтобы разрешение видео соответствовало текущему разрешению вашего рабочего стола, вы можете установить масштаб = 1,0 в параметре перекодирования.

Вы можете найти пример vlcj java screen recorder здесь который записывает экран в формате mp4. Он использует безголовый медиаплеер, поэтому становится легко начать запись экрана в фоновом режиме. Я использовал его для записи выполнения тестов селена.

person testUser050    schedule 09.11.2017