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

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

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

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

  • открыть и декодировать видео файлы, видео и аудио кодеки могут быть выбраны МНОЮ. То есть я могу выбрать хорошо себя ведущие кодеки.

  • уметь играть, пауза, 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?


  • написать Флэш-приложение, которое играет видео и использовать JFlashPlayer, чтобы принести его в мое приложение Java Swing

В отличие от Java, 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 работать, но до сих пор не имел успеха.


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

5 ответов


может ли брат получить крик для Xuggler?


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

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

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


JavaFX имеет ряд рабочих видео и аудио кодеков, встроенных. Вероятно, это будет решение с самой широкой поддержкой на данный момент.


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

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

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


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