Масштабирование с VLCJ - PullRequest
       66

Масштабирование с VLCJ

1 голос
/ 10 февраля 2020

Есть ли способ увеличить видео с VLCJ, как VL C имеет эту функцию. Я думаю, что это называется увеличить или интерактивный зум. Это в разделе Инструменты >> Эффекты и фильтры >> Видео >> Геометрия >> Увеличение

Я использую vlcj с javafx 9, рендеринг кадров на холст с EmbeddedMediaPlayer. Я также пытаюсь добавить этот фильтр увеличения к MediaPlayerFactory как новый MediaPlayerFactory("--video-filter=magnify"), но я понятия не имею, как перемещаться по этой функции или установить уровень масштабирования, так как "-zoom 2.0" не работает.

Я попытался обрезать, но это не сработало для меня, или я очень старался.

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 10 февраля 2020

Как минимум, это должно работать для масштабирования:

mediaPlayer.video().setScale(float factor);

Где коэффициент равен 2,0 для двойного, 0,5 для половины и т. Д.

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

Но если вам нужно интерактивное масштабирование, то вы создаете его самостоятельно, вызывая setCrop и setScale в зависимости от для некоторых взаимодействий пользовательского интерфейса, которыми вы управляете.

Для типа масштабирования «картинка в картинке», если вы используете сам VL C, вы делаете что-то вроде этого:

vlc --video-filter=magnify --avcodec-hw=none your-filename.mp4

It показывает небольшое наложение, где вы можете перетащить прямоугольник и изменить настройку масштабирования.

Теоретически это можно было бы использовать в приложении vlcj, передав аргументы в MediaPlayerFactory:

List<String> vlcArgs = new ArrayList<String>();
vlcArgs.add("--avcodec-hw=none");
vlcArgs.add("--video-filter=magnify");

MediaPlayerFactory factory = new MediaPlayerFactory(args);

Проблема в том, что вам кажется, что вам нужно "--avcode c -hw = none" (чтобы отключить аппаратное декодирование), чтобы фильтр увеличения работал - НО этот параметр не поддерживается (и не работает) в Приложение LibVL C.

Так что, к сожалению, вы не можете заставить это нативное «увеличение» работать с приложением vlcj.

Конечный момент - вы можете фактически включить фильтр увеличения, если вы используете API рендеринга обратных вызовов LibVL C (в vlcj это CallbackMediaPlayer), так как он не использует аппаратное декодирование. Однако то, что вы увидите, - это видео с увеличенными наложениями, нарисованными сверху, но они не интерактивны, и ваши щелчки не будут иметь никакого эффекта.

Короче говоря, на самом деле не существует удовлетворительного решения для этого.

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

...