Работа с видео и аудио в Java. Xuggle
Первый раз мне пришлось столкнуться с обработкой видео на Java лет 10-12 назад. Я еще был студентом и работал над проектом, в котором мы пытались сделать видео проигрыватель в виде апплета.
В те времена, для перекодирования видео мы пробовали использовать JMF (Java Media Framework). Нам нужно было сделать хитрую предварительную обработку видео, т.к. показ видео осуществлялся апплетом с помощью самописного алгоритма. В итоге пришлось отказаться от JMF в пользу приложения написанного на С++, т.к. JMF оказался не особо функциональным…
С тех пор прошло много времени, я участвовал в различных более масштабных и менее сумасшедших (и наоборот) Java-проектах (никак не связанных с видео), а тот проект проект был благополучно сдан и забыт. При этом какие-то знания по способам хранения и сжатия мультимедийной информации оказалось прочно засели у меня в голове (и даже некоторое время мучили ночными кошмарами)…
Говорят история развивается по спирали. В прошлом году взялся за проект, в котором опять-таки требуется работа с видео/аудио потоками. Небольшие исследования показали, что JMF с тех пор особо не прогрессировал. Нельзя сказать, что этот фреймворк стоял на месте, но прогресс шел явно медленней, чем развитие технологий работы с видео в целом.
Сделал Java программу с интерфейсом / Погодное приложение
К счастью спасение пришло от проекта
Xuggle!:
Оказалось, что это очень мощный и неплохо написанный проект для работы с мультимедийными данными. Причем позволяет осуществляет работу с “живыми” потоками в реальном-времени. По большому счету он представляет собой обёртку к ffmpeg (в xuggle используют специальную сборку ffmpeg).
Что мне особо понравилось:
- Проект содержит высокоуровневое API которое позволяет осуществлять довольно сложные операции над различными видео и аудио данными.
- Имеется очень неплохой Tutorial, Wiki и несколько скринкастов, в которых доходчиво объясняется как работать с этой библиотекой.
- В Xuggle есть возможность получить стандартный BufferedImage. Над которым настоящий java программист может осуществлять практические любые действия! При этом полученный BufferedImage можно опять таки использовать дальше и с помощью средств Xuggle формировать новый видео-поток.
- Конечно же работает под windows и под linux.
Вот пример их демки :
Единственно настораживает то, что давно не было никаких обновлений. Но текущая версия вполне стабильная.
В качестве примера, приведу примитивный пример – получить изображения из видео с 6 по 12 секунду с шагом в 500 милисекунд и сохранить их в PNG.
Здесь я модифицирую их стандартный пример из библиотеке, который выводит видео на экран. Единственное нужно – убрать синхронизацию, убрать показ видео, добавить сохранение в PNG. Понятно что в реальных приложениях программный код будет более аккуратный, здесь просто демонстрируются возможности.
import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import com.xuggle.xuggler.ICodec; import com.xuggle.xuggler.IContainer; import com.xuggle.xuggler.IPacket; import com.xuggle.xuggler.IStream; import com.xuggle.xuggler.IStreamCoder; import com.xuggle.xuggler.IVideoPicture; import com.xuggle.xuggler.Utils; public class Foo < public static void main(String a[]) throws Exception < String filename = «C:/temp/1.avi»; File outdir = new File(«c:/temp/pictures»); IContainer container = IContainer.make(); if (container.open(filename, IContainer.Type.READ, null) < 0) throw new IllegalArgumentException(«could not open file: » + filename); int numStreams = container.getNumStreams(); int videoStreamId = -1; IStreamCoder videoCoder = null; // нужно найти видео поток for (int i = 0; i < numStreams; i++) < IStream stream = container.getStream(i); IStreamCoder coder = stream.getStreamCoder(); if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO) < videoStreamId = i; videoCoder = coder; break; >> if (videoStreamId == -1) // кажись не нашли throw new RuntimeException(«could not find video stream in container: » + filename); // пытаемся открыть кодек if (videoCoder.open() < 0) throw new RuntimeException( «could not open video decoder for container: » + filename); IPacket packet = IPacket.make(); // с 3-ей по 5-ую микросекунду long start = 6 * 1000 * 1000; long end = 12 * 1000 * 1000; // с разницей в 100 милисекунд long step = 500 * 1000; END: while (container.readNextPacket(packet) >= 0) < if (packet.getStreamIndex() == videoStreamId) < IVideoPicture picture = IVideoPicture.make( videoCoder.getPixelType(), videoCoder.getWidth(), videoCoder.getHeight()); int offset = 0; while (offset < packet.getSize()) < int bytesDecoded = videoCoder.decodeVideo(picture, packet, offset); // Если что-то пошло не так if (bytesDecoded < 0) throw new RuntimeException(«got error decoding video in: » + filename); offset += bytesDecoded; // В общем случае, нужно будет использовать Resampler. См. // tutorials! if (picture.isComplete()) < IVideoPicture newPic = picture; // в микросекундах long timestamp = picture.getTimeStamp(); if (timestamp >start) < // Получаем стандартный BufferedImage BufferedImage javaImage = Utils .videoPictureToImage(newPic); String fileName = String.format(«%07d.png», timestamp); ImageIO.write(javaImage, «PNG», new File(outdir, fileName)); start += step; >if (timestamp > end) < break END; >> > > > if (videoCoder != null) < videoCoder.close(); videoCoder = null; >if (container != null) < container.close(); container = null; >> >
Результат:
Источник: programador.ru
Java что это за программа видео
Курс включает в себя более четырёхсот уроков, посвящённых основным аспектам Java. Огромное количество роликов обусловлено тщательным разъяснением информации: только лишь на установку необходимой графической оболочки и вывод на экран фразы «Hello, world!» отведено три первых урока. Вместе с тем автор старается сильно не нагружать зрителя: видео посвящены максимум одной теме и редко длятся более пятнадцати минут. К концу занятий зритель должен научиться писать собственный софт.
Java для начинающих
Источник: vse-kursy.com
1000+ часов видео по Java на русском
Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).
В следствии этого у меня скопилось значительно количество ссылок на видео на русском языке по Java как моего авторства, так и моих коллег.
(GolovachCourses.com)
Здесь собраны несколько вариантов записи моего курса Java Core.
Модуль #1 (Procedural Java):
Набор июль 2013: #1, #2, #3, #4
Набор апрель 2013: #1, #2, #3, #4
Набор февраль 2013: #1, #2, #3, #4
Набор январь 2013: #1, #2, #3, #4
Набор октябрь 2012: #1, #2, #3, #4.
Модуль #2 (Exceptions in Java):
Набор июль 2013: #1, #2, #3, #4
Набор апрель 2013: #1, #2, #3, #4, #5 (. )
Набор февраль 2013: #1, #2, #3, #4
Набор январь 2013: #1, #2, #3, #4
Набор октябрь 2012: #1, #2, #3.
Модуль #3 (Java I/O):
Набор июль 2013: #1, #2, #3, #4
Набор апрель 2013: #0 (. ), #1, #2, #3, #4
Набор февраль 2013: #1, #2, #3, #4, #5
Набор январь 2013: #1, #2, #3, #4
Набор октябрь 2012: #1, #2, #3, #4, #5.
Модуль #4 (Multithreading in Java):
Набор июль 2013: #1, #2, #3, #4
Набор апрель 2013: #1, #2, #3, #4
Набор февраль 2013: #1, #2, #3, #4
Набор январь 2013: #1, #2, #3
Набор октябрь 2012: #1, #2, #3.
Модуль #5 (Collections API, java.util.*):
Набор апрель 2013: #1, #2, #3, #4, #5
Набор февраль 2013: #1, #2, #3, #4
Набор январь 2013: #1, #2, #3, #4, #5
Набор октябрь 2012: #1, #2, #3, #4, #5.
Модуль #6 (Java OOP):
Набор апрель 2013: #1, #2, #3, #4.
Набор февраль 2013: #1, #2, #3, #4.
Набор январь 2013: #1, #2, #3, #4.
Набор октябрь 2012: #1, #2, #3, #4.
Summary:
Набор январь 2013: итоговая лекция
Набор октябрь 2012: итоговая лекция
Юрий Ткач
Курс «Java практика» (видео на youtube.com).
Данный курс уделяет основное внимание практическому применению языка Java и основывается на предыдущем курсе Java для тестировщиков, который имел теоретическую направленность. В этом курсе рассматриваются различные прикладные задачи, а также проводится их решение с помощью Java. В конце каждого занятия озвучивается задание для самостоятельной работы. Курс расчитан на слушателей, которые слабо подготовлены в программировании.
Занятие 1. «Синтаксис и конструкции языка».
Занятие 2. «Функции (методы)».
Занятие 3. «ООП, классы и объекты».
Занятие 4. «ООП, наследование, классы».
Занятие 5. «Коллекции».
Занятие 6. «ООП, интерфейсы».
Занятие 7. «Файлы, ввод/вывод».
Занятие 8. «XML».
Занятие 9. «Ant».
Курс «Технологии проектирования программных систем» (видео на youtube.com).
Юрий Ткач: «Работая преподавателем в Черниговском государственном технологическом университете на кафедре Информационных и компьютерных систем, я читал курс лекций по предмету ТППС (Технологии проектирования программных систем). В основном я старался делать упор на проектирование систем, рассказывая про разные шаблоны, подходы, многослойную архитектуру и т.п. Материал свой я основывал на замечательной книге Мартина Фаулера „Архитектура корпоративных программных приложений“. Однако, без рассказа о технологиях, которые применяются для создания систем уровня предприятия, этот курс был бы не таким интересным. Весь курс основывался на технологиях J2EE и связанными с ними, и поэтому включал в себя такие темы как Spring, AOP, JPA, Hibernate, JSF.»
Лекция 5. Слой сервисов
Лекция 6. Spring
Лекция 7. АОП.
Лекция 8. Слой интеграции.
Лекция 9. JPA Введение.
Лекция 10. JPA. Связи и наследование.
Лекция 11. JPA. Состояния и запросы.
Лекция 12. JPA. DAO.
Лекция 13. JPA. Транзакции.
Лекция 14. Слой представления.
Лекция 15. JSF. Введение.
Лекция 16. JSF. Навигация и beans.
Лекция 17. JSF. H-library and templates.
Лекция 18. JSF. Tables, Spring connect.
Лекция 19. JSF. Validators and Converters.
Лекция 20. JSF. Собственные компоненты.
Слой сервисов с JPA и Spring.
Программирование и тестирование слоя сервисов.
Facelets Templates — создание страниц в JSF.
Игорь Мирончик
Алексей Владыкин
Лекция 1 «Знакомство с языком и интрументами» (история и эволюция Java, особенности Java, разновидности Java, экосистема Java, неформальное знакомство с языком, стандартные инструменты JDK) + презентация
Лекция 2 «Примитивные и ссылочные типы» (примитивные и ссылочные типы, тип boolean, тип char, целочисленные типы, вещественные типы, преобразование типов) + презентация
Лекция 3 «Массивы и строки в Java» (Массивы: объявление, создание, инициализация, индексация, одномерные и многомерные, представление в памяти, java.util.Arrays. Строки: строковые литералы, операции со строками, StringBuilder, поддержка различных кодировок, регулярные выражения) + презентация
Лекция 4 «Объекты, классы и пакеты в Java» (основы ООП, объявление класса, использование класса, наследование, пакеты, модификаторы доступа, вложенные классы) + презентация
Лекция 5 «Управляющие конструкции и исключения в JAVA» + презентация + презентация (условные операторы (if, switch), циклы (for, while, do), операторы break и continue, метки, исключения, типы исключений, конструкция try/catch/finally, try с ресурсами, multicatch)
Лекция 6 «Java I/O, Java NIO, File» (Доступ к файловой системе: java.io.File и java.nio.file.*, потоки байт: InputStream, OutputStream, потоки символов: Reader, Writer, java.io.StreamTokenizer и java.util.Scanner) + презентация
Лекция 7 «Стандартная библиотека: java.util» (Collections Framework, списки, множества, ассоциативные массивы, generics) + презентация
Лекция 8 «Стандартная библиотека: java.lang, reflect, Reflection API» + презентация
Лекция 9 ««Разработка многопоточных приложений на Java, часть 1»» (общие сведения о параллелизме, управление потоками, синхронизация потоков, модель памяти) + презентация
Лекция 10 ««Разработка многопоточных приложений на Java, часть 2» (атомарные типы, примитивы синхронизации, коллекции, ExecutorService, ForkJoinPool) + презентация
Лекция 11 «Модульное тестирование на Java» (основные идеи, JUnit, Mockito, Java Logging API) + презентация
Лекция 12 «Разработка сетевых приложений на Java» (cокеты, URI и URL, библиотека Netty) + презентация
Георгий Корнеев
Продвинутый материал
Заключение
Я не буду давать никаких комментариев относительно качества материала по той простой причине, что сотни часов чужих материалов не просматриваю. Надеюсь что те, кто смотрел, смогут охарактеризовать в комментариях.
От имени всех коллег, которые занимаются преподаванием и выкладывают видео бесплатно, прошу простить нас за естественные «дефекты», возникающие при 3-4 часах преподавания в день: оговорки, неправильное произношение, не всегда удачные импровизации.
В описаниях курсов использованы оригинальные описания от авторов.
Контакты
Я занимаюсь онлайн обучением Java (вот курсы программирования) и публикую часть учебных материалов в рамках переработки курса Java Core. Видеозаписи лекций в аудитории Вы можете увидеть на youtube-канале, возможно, видео канала лучше систематизировано в этой статье.
- Блог компании GolovachCourses
- Java
Источник: habr.com
Уроки Java
Уроки Java с нуля / #1 – Программирование на Джава для начинающих
Java – один из самых популярных языков программирования в мире. В ходе курса мы с вами будем изучать все основные тонкости Java: начиная от переменных и заканчивая ООП, работой с файлами и построением полноценного приложения с дизайном.
Видеоурок
Полезные ссылки:
- Все курсы по теме Джава представлены здесь ;
- Редактора кода для языка Джава представлен здесь .
Информация про Java
По состоянию на сегодняшний день Java – это самый известный и популярный среди всех языков программирования. Начал существовать с 1996 года, изначально разрабатывался в компании Sun Microsystems и со временем её поглотила корпорация Oracle. Разработчики планировали сделать из Java универсальный язык, применимый практически для всех задач и у них это получилось.
За прошедшие 23 года Java сильно расширился и улучшился. На сегодня актуальная версия – Java 11, выпущенная в сентябре прошлого года. За это время Java стала больше, чем языком универсального предназначения. Её можно назвать полноценной платформой, которая обладает собственной экосистемой.
Сегодня язык действительно может использоваться для чего угодно: от создания мелких программ до интернет-порталов колоссальных объёмов. Часто применяется для разработки ПО под все известные компьютеры, смартфоны и умную технику. Большая часть всех приложений на Android написана на Java.
На что способна Java?
За счет библиотек на основе языка Джава вы можете быстро разработать веб сайт, создать игру, построить программу под ПК или же вовсе создать приложение под мобильные устройства или планшеты.
Предположим, если вам нужно написать программу для микроконтроллеров или программу для работы с большими объемами – это не будет проблемой для Джава. Нужно сделать веб сайт, создать приложение под Виндовс, написать нейронную сеть, сделать игру или написать мобильное приложение – все это можно делать, используя разные библиотеки и фреймворки, что доступны для этого языка. Библиотеки расширяют функционал языка. Изучив базовый синтаксис языка вы сможете делать практически все что вам захочется.
Сходство Java и C#
Многие очень часто сравнивают язык C# и язык Джава. Делают они это не спроста.
- Во-первых, языки появились с разницей в 5 лет, что не очень много.
- Во-вторых, их синтаксис написания кода очень схож.
- И в-третьих, они приблизительно выполняют одни и те же действия и работают в смежных сферах.
Такое сходство не случайно. После релиза язык Джава стал стремительно набирать обороты популярности. В то же время компания Microsoft решила предпринять меры и начала разработку языка, который бы напрямую конкурировал с Джава. Таким языком стал как раз язык C#.
Их сравнение вполне оправдано, хотя при сравнении сказать что лучше – просто невозможно. Несмотря на схожий синтаксис и схожие сферы применения языки все же имеют некоторые различия.
К примеру, написание программ под Виндовс гораздо удобнее на С#. Это не мудрено, ведь Виндовс и С# были созданы одной компанией. В то же время разработка мобильных приложений под Андроид явно относится только к языку Джава. При этом разработка игр уже удобнее на C#, ведь есть движок Unity. А вот с разработкой веб сайтов все максимально сложно.
Там и там есть крутые фреймворки и там и там можно делать сайты любой сложности.
Ближайшее перспективы языка
На сегодня язык обладает невероятно большим сообществом разработчиков. На основе языка можно делать проекты из разных сфер. Его будущие перспективы достаточно оптимистичны.
Язык все время развивается, появляются новые вакансии на рынке и список возможностей у языка постоянно растет. Изучив язык вы сможете найти себе работу, стать крутым программистом и делать те проекты из той сферы, которая вам наиболее будет подходить по духу.
Особенности Java
У Java много особенностей, но ключевой можно назвать принцип трансляции кода в особый байт-код, что не привязан к платформе. Впоследствии данный байт-код обрабатывается на JVM . Этот фактор отличает Java от прочих интерпретируемых языков наподобие Perl, PHP и пр. В них код сразу поступает на интерпретатор. С другой стороны, Java также не относится к исключительно компилируемым языкам (вроде C-подобных).
За счёт необычной архитектуры достигается кроссплатформенность и переносимость приложений, основанных на Java. Такие продукты можно выполнять на Windows, Linux, Mac OS и для этого даже не нужна перекомпиляция кода. Реализация JVM на всех платформах может отличаться, но принцип и ход выполнения остаётся таким же.
Java по синтаксису приближена к языкам C, очень напоминаем C# и C++ . Если есть познания в одном из Си-подобных языков, разобраться в Java не составит большого труда.
Следующая важная особенность языка – он автоматически собирает весь мусор и удаляет его из памяти. На практике это значит, что Java без дополнительных команд удаляет из памяти не использующиеся и устаревшие объекты. В других языках это приходится делать вручную, периодически прописывая соответствующие команды.
Java причисляется к объектно-ориентированным языкам. Есть поддержка наследования, полиморфизма и прочего. Такой подход помогает создавать крупные проекты, которые легко масштабировать, расширять и редактировать.
Это относительно простой язык, который можно довольно быстро выучить. За счёт фреймворков на нём можно в пару команд создавать стандартный функционал для сайтов, игр и приложений на ПК и смартфоны, не связываясь с низкоуровневым кодом.
Хоть Java и является универсальным языком, но нужно заранее подобрать ту отрасль, в которой есть желание продолжать работать. Всё дело в том, что у языка очень много библиотек, изучить все просто нереально. Лучше определиться с целевой сферой и заняться изучением подходящий библиотек.
План курса
В ходе курса «J ava для начинающих» вы с нуля освоите построение проектов на языке Джава. К урс Java состоит их нескольких уроков, в ходе которых мы постепенно начиная от переменных и заканчивая более сложными концепциями изучим язык и построение программ на его основе.
Программирование на Java для новичка может показаться немного сложной затеей, но это впечатление быстро развенчается. К концу курса у вас уже будет набор хороших знаний для реализации своих идей и проектов.
Курсы по Java разработке
Также хотим отметить, что если вас интересует более углубленное изучение языка и его фреймворков, то предлагаем вашему внимаю нашу большую программу обучения по теме Java .
В ходе данного курса мы с вами научимся делать программы на основе базовых концепций языка Джава. Если вы хотите получить больше информации относительно языка, то рекомендуем вам нашу полноценную программу обучения по Java разработке. Ознакомится с программой обучения по можно по этой ссылке .
В ходе программы обучения вы изучите более сложные концепции языка, научитесь работать с базой данных, выполнять тестирование проекта, работать с технологией Git и многое другое. За курс вы научитесь с нуля создавать приложения на ПК, строить веб сайты разной сложности и главное научитесь создавать полноценные Андроид приложения на основе Java и Android Studio.
Задание к уроку
Возможности Java
Расскажите для каких целей подходит язык Java? Можно ли на нем создавать веб сайты?
Источник: itproger.com