Воспроизведение видео кодека без потерь на Java

Мне нужно закодировать последовательность кадров с помощью видеокодека без потерь и воспроизвести их в приложении Java. Меня не волнует размер файла. Выходные кадры должны точно соответствовать входным кадрам. Кодеки с потерями не делают этого даже при высоких скоростях передачи данных.

Ни один из этих хорошо известных видеокодеков без потерь, похоже, не поддерживается в JMF или FMJ:

  • ХаффЮВ
  • CorePNG
  • Лагариф
  • FFV1
  • ...

Вы знаете какой-либо видеокодек без потерь, поддерживаемый в Java?

Другие варианты, которые я рассмотрел:

  • анимированный GIF: гарантируется ли при воспроизведении постоянная частота кадров, как в реальных видеокодеках?
  • загружать и отображать отдельные кадры: насколько сложно будет сделать это с постоянной частотой кадров и без потери слишком большого количества кадров?
  • Proce55ing: для библиотеки воспроизведения видео требуется Quicktime, которого нет на моей платформе.

Обновлено: Я наконец решил довольствоваться (нестандартным) MotionJPEG JMF с высочайшим качеством. Это не совсем без потерь, но все же намного лучшее качество, чем MPEG4.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
1 684
3

Ответы 3

Что ж, поскольку вы говорите, что размер файла не является проблемой, gzip / bzip2 может быть быстрым и безболезненным вариантом. Это не даст максимального сжатия, но это может быть последний выход, если вы не найдете лучшего ответа.

Gzip-файлы можно прозрачно открывать с помощью java.util.zip.GZIPInputStream; аналогичные интерфейсы доступны для Bzip2.

По сути, это вариант опции «загрузить и отобразить отдельные кадры». Боюсь, что даже без сжатия это будет недостаточно быстро.

palm3D 27.12.2008 22:51

Почему этот вариант будет медленнее? Я могу думать только о том, что ввод-вывод становится узким местом, в зависимости от таких особенностей, как разрешение видео. ЦП не будет узким местом, потому что вы сокращаете его работу, предоставляя ему данные, готовые к использованию. PS. Однажды я реализовал видеодекодер (MPEG4 FGS).

ePharaoh 28.12.2008 05:33

Я пробовал нечто подобное: я могу читать несжатые файлы BMP с приличной скоростью, но не файлы PNG, потому что они нуждаются в некотором декодировании. Таким образом, кажется, что узким местом является декодирование / распаковка, а не ввод-вывод.

palm3D 28.12.2008 12:47

FMJ поддерживает экспериментальный метод хранения / воспроизведения серии изображений PNG так же, как MJPEG представляет собой серию изображений JPEG. Один из них представляет собой экспериментальный формат файла XML, который кодирует PNG (довольно раздутый), а другой - это HTTP-формат x-multipart-mixed-replace, который FMJ поддерживает в формате файла, заканчивающемся расширением .mmr.

README сообщает, что воспроизведение фильмов в Linux еще не реализовано. :-(

palm3D 29.12.2008 12:35
  • Анимированные GIF-файлы: да, вы можете определить частоту кадров анимированных GIF-файлов (на самом деле вы можете установить задержку для каждого отдельного кадра)

  • отображение кадров вручную: зависит от оборудования, частоты кадров и размера изображений. Разрешение HD при 30 кадрах в секунду будет затруднено без аппаратной поддержки, размер эскизов не должен быть проблемой на любой платформе.

  • Другая альтернатива: в зависимости от того, что вы хотите сделать, вы можете рассмотреть возможность «удаленного управления» другим проигрывателем или фреймворком, возможно, с помощью некоторого нативного кода. Например, встроите mplayer в * nix / X11 или используйте COM для управления WMP или DirectShow в Windows.

Другие вопросы по теме