Автоматическое перекодирование видео Java не работает должным образом - PullRequest
1 голос
/ 10 июня 2019

Я использую java monte Screen Recorder jar файл для записи моего экрана во время выполнения кода Java,

это мой код:

import static org.monte.media.FormatKeys.EncodingKey;
import static org.monte.media.FormatKeys.FrameRateKey;
import static org.monte.media.FormatKeys.KeyFrameIntervalKey;
import static org.monte.media.FormatKeys.MIME_AVI;
import static org.monte.media.FormatKeys.MediaTypeKey;
import static org.monte.media.FormatKeys.MimeTypeKey;
import static org.monte.media.VideoFormatKeys.CompressorNameKey;
import static org.monte.media.VideoFormatKeys.DepthKey;
import static org.monte.media.VideoFormatKeys.ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE;
import static org.monte.media.VideoFormatKeys.QualityKey;

import java.awt.AWTException;
import java.awt.GraphicsEnvironment;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.monte.media.Format;
import org.monte.media.Registry;
import org.monte.media.FormatKeys.MediaType;
import org.monte.media.math.Rational;
import org.monte.screenrecorder.ScreenRecorder;

public class MonteRecorder extends ScreenRecorder {

    private File movieFolder;
    private String name;

    public MonteRecorder(String name, File movieFolder) throws IOException, AWTException {

        super(GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()
                .getDefaultConfiguration(),

                 new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI),
                    new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
                            CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, DepthKey, 24, FrameRateKey,
                            Rational.valueOf(15), QualityKey, 1.0f, KeyFrameIntervalKey, 15 * 60),
                    new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black", FrameRateKey, Rational.valueOf(30)),
                    null);
                /* output format for audio - null == no audio */
            this.movieFolder = movieFolder;
        this.name = name;
    }

    @Override
    protected File createMovieFile(Format fileFormat) throws IOException {
        if (!movieFolder.exists()) {
            movieFolder.mkdirs();
        } else if (!movieFolder.isDirectory()) {
            throw new IOException("\"" + movieFolder + "\" is not a directory.");
        }

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd 'at' HH.mm.ss");

        File f = new File(movieFolder, //
                "Scenario - " + name + " - " +dateFormat.format(new Date()) + "."
                        + Registry.getInstance().getExtension(fileFormat));
        return f;
    }



}

Тип файла .avi, и он успешно создан. но при попытке открыть его с помощью медиаплеера VLC я получаю следующее сообщение об ошибке:

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

error message

примечание: этот код успешно работал до нескольких недель, но я не проверял его постоянно.

Чтобы исправить это, я попытался изменить параметры формата на файл MP4 или файл quicktime (.mov), все это не удалось открыть.

если кто-то знает другую библиотеку maven, которая может записывать экран, это будет полезно (с примером кода).

1 Ответ

0 голосов
/ 11 июня 2019

проблема возникла, потому что o не замечает вызванный метод остановки в конце записи экрана.перед началом записи экрана, используя следующий код:

ScreenRecorder screenRecorder = new MonteRecorder(videoName, new File(path));
this.screenRecorder.start();

, чтобы решить проблему, я должен добавить

this.screenRecorder.stop();

в конце сценария.

после добавления созданное видео запускается, как и ожидалось, с помощью медиаплеера VLC.

...