Подтвердить что ты не робот

Работа с видео (DVD,.avi.mkv) в Java

Осмотрев достойную библиотеку для воспроизведения видео на Java, я расстался. Все вокруг кричат, чтобы не использовать JMF, потому что он устарел, старый и требует от пользователя его установки, другие альтернативы, такие как VLCJ, кажутся хорошими, если они работают, но все еще относительно нестабильны и опираются на здоровенные количества собственного кода, а также на DVD, которые выглядят как золотая пыль, которые можно найти в бесплатной библиотеке!

Текущие параметры:

  • Теперь JavaFX 2 набирает обороты, это то, над чем я серьезно смотрел (отсюда мой вопрос здесь), но мне пока не удастся попытаться как заставить его играть что-то большее, чем стандартное видео FLV для болота.
  • VLCJ хорошо работает для того, что он делает (см. мой текущий ответ), и на данный момент я продвигаюсь вперед. Он использует libvlc, чтобы делать что угодно, так как в нем можно играть практически в любом файле и воспроизводить DVD-диски из коробки. Большая проблема заключается в том, что вам нужно использовать несколько виртуальных машин для каждого игрока, чтобы заставить его работать стабильно, а это означает, что ответ относительно медленный. У меня также нет такого подхода для работы на Mac.
  • JMF смехотворно устаревший, ужасный и просто не вариант, насколько мне известно. Я играл с ним в прошлом, и опыт не был хорошим!
  • FMJ говорит, что это замена для JMF. Мне еще предстоит сделать это, как и большинство других людей, с которыми я разговаривал, и это само по себе заставляет меня уставать от его качества и понимания, даже если мне удастся заставить его работать!
  • Xuggler отлично подходит для того, что он делает, он получил блестящие учебники, и он очень хорошо написан. Но в то время как это отлично подходит для работы по перекодировке на низком уровне, воспроизведение видео и получение кадров в правильном порядке и в синхронизации и т.д. - это просто кошмар, чтобы нормально работать, и снова добавляет больше кода, что означает больший объем обслуживания, потенциально больше ошибок и т.д. и т.д.
  • Я еще не пробовал GStreamer-Java с любым гневом, хотя он, похоже, не поддерживает воспроизведение DVD (это приложение с открытым исходным кодом, над которым я работаю, так что коммерческие плагины тоже не являются), а кодек поддержка не кажется самой широкой.
  • JCodec - это интересное усилие, единственное, что я видел для реализации поддержки видео с чистой перспективы Java, но поддержка для форматов в настоящий момент отсутствует, и это относительно новый проект.
  • Написание чего-то самого в другой родной библиотеке для каждой платформы, которую я хочу поддержать. Это абсолютная опция последнего курорта из-за дополнительного времени обслуживания и кодирования, которое потребуется.

Основываясь на вышеизложенном (или что-нибудь еще, что вы можете придумать), какие варианты будут рекомендовать людям и есть ли какие-то другие разумные, которые я пропустил? Или любые другие люди думают, что могут быть доступны в ближайшем будущем?

4b9b3361

Ответ 1

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

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

Предостережения с моим выбранным подходом? Ну, если внешние виртуальные машины не будут закрыты явно, они будут продолжать воспроизведение видео в фоновом режиме даже после выхода приложения, и отладка становится сложнее с этим подходом. Я также не подтвердил, что он работает на Mac еще, и мое первоначальное предложение, вероятно, не связано с тем, что, как я слышал, MacOS не позволяет одному процессу управлять другим окном без явного разрешения с собственным кодом. Это должно быть возможно с небольшой работой, хотя.

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

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

Ответ 2

Я использовал jffmeg для некоторых моих проектов (привязки jfmeg java), до сих пор я не сталкивался с какой-либо проблемой. http://jffmpeg.sourceforge.net/documentation.html. Я также использовал qt-jambi, но никогда не пробовал его видео-библиотеку (phonon), это также может решить вашу проблему.

Ответ 3

Я согласен с тем, чтобы держаться подальше от JMF. Особенно, если вы хотите играть на DVD. Даже JMF полагается на собственный код для некоторых своих функций. В любом случае, вы не будете уходить от каких-то родственных зависимостей. Еще один вариант - FMJ. Его версия с открытым исходным кодом JMF. Мне не повезло с этим, хотя.

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

Кроме того, мой другой пост может вас заинтересовать. Ссылка

Кроме того, this может оказаться полезным.

Ответ 4

Вы пытались использовать API JavaFX?.

Как я вижу, JavaFX включает поддержку воспроизведения H.264... и здесь кто-то показывает, как воспроизводить видео в новом открывшемся исходном коде Google WebM/VP8

http://javafxplace.blogspot.com/2010/06/javafx-and-webm-on-linux.html

Ответ 5

Попробуйте Xuggler, он обертывает знаменитый FFmpeg в Java.

Ответ 6

Я могу рекомендовать привязки gstreamer-java. Как следует из названия, он завершает API GStreamer в Java-классах. Таким образом, у вас есть доступ к средствам графической обработки медиа-обработки, которые предоставляет GStreamer. Это может быть очень аккуратно, если вы хотите выполнять более сложные задачи, такие как перекодирование.

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