xuggle xuggler что это

Работа с видео и аудио в Java. Xuggle

Первый раз мне пришлось столкнуться с обработкой видео на Java лет 10-12 назад. Я еще был студентом и работал над проектом, в котором мы пытались сделать видео проигрыватель в виде апплета.
В те времена, для перекодирования видео мы пробовали использовать JMF (Java Media Framework). Нам нужно было сделать хитрую предварительную обработку видео, т.к. показ видео осуществлялся апплетом с помощью самописного алгоритма. В итоге пришлось отказаться от JMF в пользу приложения написанного на С++, т.к. JMF оказался не особо функциональным.

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

Оказалось, что это очень мощный и неплохо написанный проект для работы с мультимедийными данными. Причем позволяет осуществляет работу с «живыми» потоками в реальном-времени. По большому счету он представляет собой обёртку к ffmpeg (в xuggle используют специальную сборку ffmpeg).

Что мне особо понравилось:

Вот пример их демки :
http://www.youtube.com/watch?v=0EvQW94JuJ0

Единственно настораживает то, что давно не было никаких обновлений. Но текущая версия вполне стабильная.

Источник

Введение в Xuggler для управления видео

С появлением видео в Интернете разработчикам часто приходится манипулировать видеоконтентом в своих приложениях. Xuggler — это бесплатная библиотека с открытым исходным кодом для Java-разработчиков, которую можно использовать для распаковки, обработки и сжатия записанного или живого видео в реальном времени. Xuggler использует очень мощные библиотеки обработки мультимедиа FFmpeg под капотом, по сути играя роль java-оболочки вокруг них. Это простой способ распаковать, изменить и повторно сжать любой медиафайл (или поток) из Java.

Давайте продолжим, получив FFmpeg. Обратите внимание, что Xuggler поставляется с собственной (улучшенной) версией FFmpeg, чтобы избежать проблем с неправильной настройкой, поэтому вам НЕ нужно вручную получать FFmpeg. Попутно мы собираемся протестировать некоторые вещи непосредственно с помощью FFmpeg перед передачей управления Xuggler, поэтому вы можете предпочесть иметь оригинальную версию в качестве отдельного исполняемого файла.

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

Следующим шагом будет перекодирование вашего первого видео, возможно, из предварительно записанного файла. Мой входной файл — это видео MP4, длиной 4 минуты 20 секунд, размером 18,1 МБ, которое называется «myvideo.mp4». Я хотел бы преобразовать это в Flash Video, значительно снизив его качество. Это очень просто сделать с помощью FFmpeg, введя следующую команду (обратите внимание на использование прямой косой черты для путей):

Вот как выглядит вывод консоли:

Версия FFmpeg SVN-r21231-Sherpya, Copyright (c) 2000-2010 Fabrice Bellard, et al.
построено 16 января 2010 05:42:31 с gcc 4.2.5 20080919 (предварительный выпуск) [Sherpya] libavutil 50. 7. 0 / 50. 7. 0
libavcodec 52.47. 0 / 52,47. 0
libavformat 52.47. 0 / 52,47. 0
libavdevice 52. 2. 0 / 52. 2.0
libavfilter 1.15. 0 / 1,15. 0
libswscale 0. 8. 0 / 0. 8. 0
libpostproc 51. 2. 0 / 51. 2.0

Читайте также:  аноха гальянский за что сел

Источник

Xuggler Tutorial: захват кадров и создание видео

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

Давайте запустим это приложение, чтобы увидеть результаты. В качестве входного файла я использую старый рекламный ролик Sun, в котором говорится, что « Java везде ». Я скачал локально предоставленную версию MP4. Вот как будет выглядеть консоль вывода:

по прошествии 0,000 секунд пишет: c: /snapshots/mysnapshot1298228503292.png
по прошествии 10,010 секунд пишет: c: /snapshots/mysnapshot1298228504014.png
по прошествии 20,020 секунд пишет: c: /snapshots/mysnapshot1298228504463.png

по истечении 130.063 секунд пишет: c: /snapshots/mysnapshot1298228509454.png
по прошествии 140.007 секунд пишет: c: /snapshots/mysnapshot1298228509933.png
по истечении 150.017 секунд пишет: c: /snapshots/mysnapshot1298228510379.png

Общее время видео составляет около 151 секунды, поэтому мы фиксируем 16 кадров. Вот как выглядят захваченные изображения в моей папке:

Чтобы создать видео, нам потребуется более низкоуровневый подход по сравнению с MediaTool API, который мы видели до сих пор. Не волнуйтесь, это не будет сложным. Основная идея заключается в том, что мы создаем средство записи мультимедиа, добавляем к нему некоторую потоковую информацию, кодируем наши мультимедиа (изображения на снимках экрана) и закрываем средство записи. Давайте посмотрим код, используемый для достижения этой цели:

Источник

Xuggler Tutorial: Транскодирование и модификация медиа

Xuggler предлагает два разных API программирования, которые можно использовать для одной и той же цели. Во-первых, у нас есть MediaTool API :

MediaTool — это простой интерфейс прикладного программирования (API) для декодирования, кодирования и изменения видео в Java. MediaTool скрывает многие мелкие детали контейнеров, кодеков и т. Д., Чтобы вы могли сосредоточиться на носителе, а не на инструментах. Тем не менее, MediaTool по-прежнему предоставляет доступ к базовым объектам Xuggler, поэтому вы можете точно контролировать зерно, если вам это нужно.

Для начала мы будем использовать MediaTool API, а в последующих уроках мы также будем иметь дело с Advanced API.

Давайте посмотрим код высокого уровня для транскодирования, и я объясню детали позже.

После того, как процесс будет завершен (он будет длиться столько же, сколько исходный видеофайл, так как мы одновременно его видим в режиме реального времени), будет создан новый выходной файл в формате FLV.

Давайте используем Ffmpeg из командной строки для сравнения входных и выходных файлов:

Теперь мы готовы изменить медиа-файл с помощью Xuggler. Но прежде чем писать код, нам нужно понять, как работает MediaTool :

MediaTool использует парадигму слушателя событий. Устройство записи автоматически добавляется в качестве «слушателя» к устройству чтения и получает все декодированные носители. Интерфейсы IMediaViewer и IMediaWriter (что на самом деле представляют собой средство просмотра и записи) реализуют интерфейс IMediaListener и могут быть добавлены в качестве прослушивателей для IMediaReader.

Мы подтвердили это на нашем предыдущем примере. Дело в том, что для выполнения различных модификаций входного файла нам необходимо настроить «медиа-конвейер». Мы создаем пользовательские реализации IMediaTool, а затем последовательно настраиваем прослушиватели для каждого инструмента, чтобы они передавали данные от одного к другому.

Читайте также:  windows nt driver is required что делать

Предположим, мы хотим добавить статичное изображение к нашему видео и в то же время уменьшить громкость звука. В этом случае мы создаем два пользовательских объекта IMediaTool :

Кроме того, мы создаем объект IMediaWriter, который будет использоваться для создания выходного файла. Со всем этим мы создаем цепочку, которая выглядит следующим образом:

Давайте посмотрим код, который реализует все вышеперечисленное:

Источник

Установка JDK, Xuggle, Red5. Переключение на RTMPT

Плюс к этому стоит добавить возможность 11-й версии флэш-плеера полноценно работать с кодеком H.264 (т.е. уже и кодировать). До этого вопросы эффективного сжатия «на лету» современными кодеками решались только со стороны сервера.

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

В этом материале мы затронем самую начальную тему, а именно, уделим внимание вопросам корректной установки всего этого арсенала для старта успешной разработки. При этом параллельно мы решим и еще одну актуальную задачу, а именно, в качестве протокола потоковой передачи данных, будем использовать не стандартный RTMP, а RTMPT, то есть «туннелированный» RTMP.

RTMP-протокол часто вызывает сложности в плане того, что работает на 1935 порту (TCP), который нередко блокируется файрволлами. И часто в технических заданиях прописывают условие, что передача должна осуществляться по HTTP через 80-й порт, то есть, не создавать трудностей использования для клиентов. RTMPT является как раз решением этой проблемы. Для тех, кто не работал с «туннелированными» протоколами, отметим, что термин «туннелирование» подразумевает инкапсуляцию одного сетевого протокола в другой. В данном случае мы говорим об инкапсуляции RTMP в HTTP.

Перенос всего этого на web-пространство не представляет никаких особых трудностей.


Установка Red5 на Windows (для теста приложения на локальной машине)

Примечание: для Windows полная связка корректно работает с x86, то есть 32-разрядными, поэтому выбирать нужно только их. Что касается Linux, то все компоненты поддерживают 64-разрядный вариант.

Устанавливаем по инструкции, никаких ошибок быть не должно.

2. Прописываем системную переменную JAVA_HOME. Далее, в зависимости от ОС, нужно прописать системную переменную JAVA_HOME.

В Windows XP это делается по пути: Пуск > Настройки > Панель управления > Система > Дополнительно > Переменные среды (Start > Settings > Control Panel > System > Advanced > Environment Variables), где в открывшемся окне создаем новую системную переменную JAVA_HOME и в качестве ее аргумента указываем путь к каталогу, в который мы установили JDK.

В Windows7 фактически аналогично, только можно выйти по клику правой кнопки мыши над иконкой «Мой компьютер» («My Computer»). Перезагружаем компьютер.

3. Скачиваем и устанавливаем Xuggle. Зайдя по ссылке, выбираем вариант xuggle-xuggler-setup.exe. Рабочей является именно эта версия.

4. По аналогии как мы это делали с JAVA_HOME, прописываем системную переменную XUGGLE_HOME, указав в качестве ее значения ссылку на папку bin. Например, C:\Xuggle\bin. Перезагружаем компьютер.

5. Скачиваем и устанавливаем Red5. Теперь скачиваем Red5. Внимание. Нужно взять версию Red5 0.9.1 Final, не RC1. Для установки под Windows вполне подойдет exe-вариант файла инсталляции.

Бегло просматриваем структуру папок Red5 (те, которые нам в ближайшее время понадобятся, выделены курсивом):

6. Включаем RTMPT. Перво-наперво без запуска сервера заходим в папку conf корневого каталога Red5. Поскольку 80-й порт мы указали по умолчанию в момент инсталляции, то ничего нового в red5.properties прописывать не нужно. Если же был указан другой порт для HTTP, то в этом файле нужно найти соответствующую строку и переписать ее на http.port=80.

Читайте также:  v брейк тормоза что это

8. Первые запуски Red5, установка приложения audiotranscoder (videotranscoder). Запускаем Red5 файлом red5.bat, который находится в корневом каталоге Red5. Ждем, пока он полноценно загрузится. Далее отключаем его файлом red5-shutdown.bat.

Далее заходим по ссылке и скачиваем оттуда два WAR-файла с демостранционными приложениями audiotranscoder и videotranscoder. Действия для установки обоих идентичны, поэтому я покажу все на примере audiotranscoder.

Теперь внесем изменения, например, заставим сервер кодировать аудиопоток в MP3. Для этого открываем файл \audiotranscoder\src\com\eb\red5\AudioTranscoderDemo.java, заходим и изменяем там несколько строк:

9. Запуск и проверка протоколов на базе демонстрационного приложения Publisher. Запускаем Red5 (red5.bat). Открываем браузер и набираем http://localhost. В результате должно отобразиться следующее.

При успешном запуске Red5 по адресу http://localhost должно появиться это окно

Также смотрим на лог, отображаемый в консольном окне, в нем должны появиться специфические записи (по существу, если говорить простым языком, это значит, что приложение нашего аудиотранскодера запущено и функционирует).

Теперь возвращаемся в наш браузер (страницу http://localhost) и кликаем на ссылке Launch a demo, после чего переходим на страницу с демо-приложениями. Выбираем вариант Publisher. Переходим к нему. По существу это очень удобное приложение для тестирования.

Справа внизу находится область с тремя закладками: Server, Video и Audio. В Server нам нужно указать новый путь, для чего:

10. Пробная запись аудиопотока на базе приложения Publisher. Подключившись к серверу по одному из выбранных протоколов, переходим в закладку Audio. Выбираем звуковое устройство и нажимаем Apply. Остальные настройки не трогаем. В поле имени файла вводим first_test, а тип (Type) потока указываем как Record. После чего нажимаем Publish и делаем пробную запись.

Нажав Stop, мы можем найти записанный файл first_test.flv в папке streams нашего приложения webapps/audiotranscoder на сервере Red5. Обращу внимание на то, что не зависимо от первоначальных настроек аудио кодируется в MP3 (моно, 22 КГц), который запаковывается в контейнер flv. За кодирование отвечает Xuggle.


Наиболее частые проблемы

Если в структуру Red5 часто вносятся какие-нибудь изменения, пусть даже и небольшие, он может «глюкануть», то есть писать в логах того же Publisher’а: NetConnection.Connect.InvalidApp или NetConnection.Connect.Rejected. Исправляется это все переустановкой.

Для удобства скопируйте измененный файлы, а именно, red5-core.xml (в котором мы подключили протокол RTMPT) и zip-архив с измененным приложением audiotranscoder.


Установка Red5 на Linux

Затем забираем с tarball или ZIP-архив Red5 0.9.1 final. Распаковываем в нужную папку, после чего запускаем файл red5.sh из ее корня.

Настройка прав доступа и т.п. производится по усмотрению. Установка не намного сложнее вариантов Windows. 80-й порт и IP прописываются в файле Red5/conf/red5.properties. RTMPT включается red5-core.xml. В общем, почти все дальнейшие действия идентичны пп. 6-10 описания установки под Windows.


Просмотр кода серверного приложения audiotranscoder в Eclipse

После этого проект на стороне сервера готов к изменениям.


В завершение

Источник

Информ портал о технике и не только