Проверьте файл субтитров, используя vlcj (Java) - PullRequest
0 голосов
/ 14 декабря 2018

Я использую экземпляр vlcj DefaultEmbeddedMediaPlayer для воспроизведения видео.При добавлении субтитров к видео я хочу посмотреть, является ли файл субтитров действительным, и выдать исключение, если это не так.Это мой код:

File subtitlesFile = new File("subs.srt");
player.setSubTitleFile(subTitleFile);

Метод setSubTitleFile(File subTitleFile) не имеет возвращаемого значения, но, глядя на его реализацию, я вижу, что он передает вызов libvlc, вызывая libvlc_video_subtitle_file(libvlc_media_player_t p_mi, String psz_subtitle), который возвращает1 или 0 в зависимости от того, были ли успешно добавлены субтитры.Поэтому я унаследовал от DefaultEmbeddedMediaPlayer и написал свою собственную версию этого метода:

public void setSubTitleFile(String subTitleFileName) {
    final int status = libvlc.libvlc_video_set_subtitle_file(mediaPlayerInstance(), subTitleFileName);
    System.out.println(status);
    // throw Exception if status is false
}

Удивительно, но это всегда дает мне статус 1, что означает успех.Даже если я передаю пустой текстовый файл.Это ошибка?Я действительно не хочу разбирать файл субтитров заранее.Используя родной VLC Player, я получаю ошибку, как и ожидалось, если субтитры недействительны.Что-нибудь, что я мог сделать здесь?

РЕДАКТИРОВАТЬ: Это снимок экрана с родного проигрывателя VLC при добавлении пустого файла SRT во время воспроизведения. Ошибка файла субтитров VLC

1 Ответ

0 голосов
/ 23 декабря 2018

Насколько я знаю, LibVLC / VLC не анализирует файл субтитров при вызове libvlc_video_set_subtitle_file.Все, что он в основном делает, это устанавливает строковое значение в некоторой нативной структуре, которая будет использоваться позже.Таким образом, вы получаете статус «success», потому что этот вызов выполнил свою работу по установке этого строкового значения.

Следовательно, вы будете знать только, действителен ли файл субтитров, когда VLC начинает воспроизводить ваши медиафайлы и пытаетсязагрузить файл в этот момент.Даже тогда, я не думаю, что вы получите конкретное сообщение об ошибке - просто будет отсутствие дорожки субтитров.

...