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

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

Ето изискванията ми:

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

  • Отваряне и декодиране на видео файлове, чиито видео и аудио кодеци могат да бъдат избрани от мен. Т.е. мога да избера добре работещи кодеци.

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

  • По време на възпроизвеждане видеото и аудиото трябва да са синхронизирани.

  • Видеото трябва да се показва в Swing JComponent.

  • Трябва да може да се използва в търговски продукт, без да е необходимо да е с отворен код (т.е. LGPL или Commercial е добър)


Проучването ми ме доведе до следните решения:

Приложих бърз прототип и това изглежда прави това, от което се нуждая. Мога да възпроизведа сегмент от видео с помощта на:

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 безпроцесни плейъра в моето приложение един до друг без никакви проблеми.

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

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
Вижте също: dsc.sun.com/learning/javaoneonline/2008 /pdf/TS-6509.pdf и google.com/ - person jsight; 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
comment
ksullivan - Xuggler е амортизиран. Аз самият го използвах, но има проблеми със самите библиотеки и проблеми със синхронизирането. Вижте моя проект: github.com/seannybgoode/libGDX-MultiMedia В момента е в процес на преместване към друг медиен плейър lib. - person Scuba Steve; 14.06.2016

Използвах 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