Воспроизведение видео на Java (JMF, Fobs4JMF, Xuggler, FMJ)
Вопрос
Мне нужно простое воспроизведение видео на Java.
Вот мои требования:
КАЧЕСТВО ПРОИЗВОДСТВА
Открывать и декодировать видеофайлы, видео- и аудиокодеки которых я могу выбрать.Т. е. я могу подобрать хорошо ведущие себя кодеки.
Быть способным играть, Пауза, искатьToFrame ИЛИ искатьToTime и останавливаться воспроизведение.По сути, я хочу иметь возможность воспроизводить сегменты одного видеофайла нелинейным образом.Например, я могу воспроизвести сегмент от 20,3 до 25,6 секунды, сделать паузу на 10 секунд, а затем воспроизвести сегмент от 340,3 до 350,5 секунды и т. д.
Во время воспроизведения видео и звук должны быть синхронизированы.
Видео должно отображаться в Swing JComponent.
Должна быть возможность использования в коммерческом продукте без необходимости иметь открытый исходный код (т.е.LGPL или коммерческая реклама — это хорошо)
Мои исследования привели меня к следующим решениям:
- Используйте Java Media Framework + Fobs4JMF.http://fobs.sourceforge.net/f4jmf_first.html
Я реализовал быстрый прототип, и, похоже, он делает то, что мне нужно.Я могу воспроизвести фрагмент видео, используя:
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, которая выглядит довольно активным и высококачественным проектом.Однако реализация простого воспроизведения видео, описанного в требованиях, не является тривиальной (в частности, Seeking), но некоторая работа была проделана в MediaTools MediaViewer, который станет основой для дальнейшего развития.
- Используйте FMJ
Я пытался заставить FMJ работать, но пока безуспешно.
Буду признателен за ваше мнение по моей проблеме.
Решение
Может ли брат похвалить Ксагглер?
Другие советы
В моей голове, ВЛКЖ это путь вперед для такого рода вещей.Мне нравится Xuggler за работу по кодированию/транскодированию, но, к сожалению, очень сложно выполнять простое воспроизведение и решать все проблемы с синхронизацией и тому подобное - и это очень похоже на изобретение велосипеда.
Единственная особенность VLCJ заключается в том, что для надежной работы с несколькими проигрывателями мне приходилось прибегать к проигрывателям вне процесса.Создать фреймворк было не самой простой вещью в мире, но когда она есть, она работает прекрасно.В настоящее время я запускаю в своем приложении 3 проигрывателя процесса без каких-либо проблем.
Другое предостережение заключается в том, что встроенный медиаплеер не будет работать с поворотным компонентом, а только с тяжелым холстом - но для меня это совсем не проблема.Если это так, то вы можете использовать прямой медиаплеер, чтобы получить буферизованное изображение и отобразить его на любом устройстве, которое вы выберете, но это будет потреблять ваш процессор немного больше (хотя и не больше, чем другие проигрыватели, использующие этот подход).
JavaFX имеет ряд встроенных рабочих видео и аудио кодеков.Вероятно, это будет решение, пользующееся самой широкой поддержкой на данный момент.
Я использую jffmpeg так же, как вы используете FOBS, он работает довольно хорошо, хотя я их не сравнивал.
Мне также хотелось бы увидеть простой способ взаимодействия с собственными кодеками, как это делает JavaFX, но, похоже, между JavaFX и Java нет реальной интеграции.
Также была проведена некоторая работа по включению библиотеки VLC libvlc в Java.Я еще не пробовал, и мне было бы интересно услышать мнение тех, кто пробовал.
я не пробовал Xuggler (который меня интересует), но я хорошо провожу время с ВЛКЖ.Недостаток, который я нахожу в этом, заключается только в том, что перед приложением вам необходимо установить VLC.