Воспроизведение видео на Java (JMF, Fobs4JMF, Xuggler, FMJ)

Мне нужно простое воспроизведение видео на Java.

Вот мои требования:

  • КАЧЕСТВО ПРОИЗВОДСТВА

  • Открывать и декодировать видеофайлы, видео- и аудиокодеки которых я могу выбрать. I.E Я могу выбрать хорошо работающие кодеки.

  • Возможность воспроизведения, паузы, seekToFrame ИЛИ seekToTime и остановки воспроизведения. По сути, я хочу иметь возможность воспроизводить сегменты одного видеофайла нелинейным образом. Например, я могу захотеть воспроизвести сегмент от 20,3 до 25,6 с, сделать паузу на 10 секунд, а затем воспроизвести сегмент от 340,3 до 350,5 с и т. Д.

  • Во время воспроизведения видео и аудио должны быть синхронизированы.

  • Видео должно отображаться в Swing JComponent.

  • Должна быть возможность использования в коммерческом продукте без использования открытого исходного кода (например, LGPL или Comercial)


Мои исследования привели меня к следующим решениям:

Я реализовал быстрый прототип, и, похоже, он делает то, что мне нужно. Я могу воспроизвести фрагмент видео, используя:

player.setStopTime(new Time(end));
player.setMediaTime(new Time(start));
player.start();

Хотя Fobs4JMF, похоже, работает, я чувствую, что качество кода плохое, и проект больше не активен. Кто-нибудь знает какие-либо продукты, в которых используется Fobs4JMF?


  • Напишите приложение Flash, которое воспроизводит видео, и используйте JFlashPlayer, чтобы перенести его в мое приложение Java Swing.

В отличие от Java, Flash отлично воспроизводит видео. Я мог бы написать небольшое Flash-приложение с помощью следующих методов:

open(String videoFile),
play(),
pause(),
seek(int duration),
stop()

Затем перенесите его в Java с помощью JFlashPlayer, который может вызывать функции Flash из Java.

Что мне нравится в этом решении, так это то, что воспроизведение видео во Flash должно быть надежным. Кто-нибудь использовал JFlashPlayer для воспроизведения видео на Java?


  • Напишите простой медиаплеер поверх Xuggler

Xuggler - это оболочка FFMpeg для Java, которая кажется довольно активным и качественным проектом. Однако реализация простого воспроизведения видео, описанного в требованиях, не является тривиальной задачей (в частности, поиск), но часть работы была проделана в MediaTools MediaViewer, который станет основой для построения.


  • Используйте FMJ

Я пытался заставить FMJ работать, но пока безуспешно.


Буду признателен за ваше мнение о моей проблеме.


person ksullivan    schedule 11.01.2010    source источник


Ответы (6)


Может ли брат получить признание за Xuggler?

person Art Clarke    schedule 26.01.2010
comment
Мне нужна большая помощь по xuggle, как я могу добавить два видео для создания одного видео в xuggle? Я пытаюсь использовать Google, но это мало помогает ... - person Muhammad Umar; 22.12.2011
comment
Где вообще настоящая ссылка для скачивания Xuggler ?! - person aaronsnoswell; 01.02.2013
comment
Xuggler не может искать ключевые кадры для mp3 или m4a. Это проблема отсутствия заголовка ffmpeg. - person taymedee; 28.05.2014
comment
К сожалению, Xuggler больше не развивается активно: xuggle.com/xuggler/status - person asmaier; 04.02.2015

На мой взгляд, VLCJ - это путь вперед для этого типа вещей. Я люблю Xuggler за работу по кодированию / перекодированию, но, к сожалению, очень сложно выполнять простое воспроизведение и решать все проблемы с синхронизацией и тому подобное - и это очень похоже на изобретение колеса, делая это.

Единственное, что есть в VLCJ, - это то, что для надежной работы с несколькими плеерами мне пришлось прибегнуть к плеерам вне процесса. Фреймворк был не самым простым в использовании, но когда он есть, он прекрасно работает. В настоящее время у меня в приложении работают 3 проигрывателя, которые не работают, без каких-либо проблем.

Другое предостережение заключается в том, что встроенный медиаплеер не будет работать с компонентом Swing, а только с тяжелым холстом, но для меня это не оказалось проблемой. Если это так, то вы можете использовать прямой медиаплеер, чтобы получить буферизованное изображение и отобразить его на любом выбранном вами элементе, но он будет поглощать ваш процессор немного больше (хотя и не больше, чем другие плееры, использующие этот подход).

person Michael Berry    schedule 01.08.2011

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

person jsight    schedule 11.01.2010
comment
Привет, jsight, и спасибо за ответ. Я знаю, что JavaFX поддерживает видео, но, к сожалению, мне пришлось отказаться от этого, поскольку сложно импортировать компоненты JavaFX в приложение Java Swing. Способы есть, но это неподдерживаемые хаки. - person ksullivan; 11.01.2010
comment
Спасибо за ссылки. Похоже, что помимо официальной поддержки JavaFX в Java, возникнут проблемы с распространением (особенно в отношении видеокодеков). - person ksullivan; 11.01.2010
comment
@kpsullivan - Любая проблема с распространением или поддержкой усугубится с любым другим бесплатным решением. - person jsight; 11.01.2010
comment
Какие проблемы с распространением возникают у решений на основе FFMpeg, таких как Xuggler и Fobs4JMF? Xuggler кажется довольно активным с точки зрения получения ответов непосредственно от разработчиков. Также мы не ограничиваемся бесплатными решениями. - person ksullivan; 11.01.2010
comment
Обратите внимание, что с JavaFX 2.1 база поддерживаемых форматов немного увеличилась. - person Michael Berry; 16.05.2012

Я использовал jffmpeg так же, как вы используете FOBS, он работает довольно хорошо, хотя я их не сравнивал.

Мне также хотелось бы увидеть простой способ взаимодействия с собственными кодеками, как это делает JavaFX, но, похоже, реальной интеграции между JavaFX и Java нет.

Также была некоторая работа по внедрению библиотеки VLC libvlc в java. Я еще не пробовал и мне было бы интересно услышать ответ от тех, кто пробовал.

person paul    schedule 20.02.2010
comment
ценю, что этому уже больше года, но если вам все еще интересно, посмотрите мой ответ! - person Michael Berry; 02.08.2011
comment
спасибо, да, для меня это все еще нерешенная проблема, и я займусь этим. - person paul; 12.08.2011

не пробовал Xuggler (который меня интересует), но хорошо провожу время с VLCJ. Недостаток, который я нахожу в этом, заключается только в том, что у вас должен быть установлен VLC до вашего приложения.

person Oso    schedule 02.07.2010
comment
Вы не делаете - вы можете распространять libvlc вместе со своим приложением, что я и делаю. - person Michael Berry; 25.10.2011
comment
Не пытайтесь заручиться поддержкой vlcj, этот парень гребаный придурок. - person Scuba Steve; 14.06.2016

Я бы рекомендовал использовать MPV. Вы можете легко использовать его в сочетании с JavaFX, см. Этот пример.

Короче говоря, вы используете небольшую магию JNA, чтобы напрямую использовать собственные библиотеки MPV, а затем позволять отображать видео на сцене JavaFX. Если вы используете дочернюю стадию, вы даже можете наложить элементы управления JavaFX поверх видео (с полной поддержкой прозрачности).

VLC (с VLCJ) можно использовать аналогичным образом, но я считаю, что решение MPV работает лучше (более быстрое время поиска и запуска).

person john16384    schedule 27.04.2020