Меню Рубрики

Как написать проигрыватель на java

Написание простого видео плеера на Java с использованием JMF API

Буквально сегодня, во время написания дипломной работы, связанной с разработкой интерпретатора для формального языка, столкнулся с задачей написания видео плеера. А поскольку моя дипломная косвенно связанна с обработкой мультимедиа, от видео плеера требовалась максимальная простота, а именно банальное проигрывание видео файлов. С обработкой видео я столкнулся впервые, поэтому я начал гуглить и нагуглил, собственно, JMF(Java Media Framework), которая выглядела вполне подходящей.

Найти библиотеку JMF API можно на сайте Oracle или через *ваш любимый поисковик* (последняя рабочая версия 2.1.1e).
В архиве будет 4 jar файла, которые надо будет добавить к проекту. Я работал в Eclipse, поэтому для того, чтобы добавить их в проект, достаточно кликнуть правой кнопкой по проекту, выбрать Build Path-Configure Build Path-Add External JARs

Код реализации представлен ниже:

import java.awt.Dimension;
import javax.swing.*;
import javax.media.bean.playerbean.MediaPlayer;

class VideoExample extends JFrame <
MediaPlayer player;//наш плеер

public VideoExample(String path) <
super(«Простой видео плеер»);

setSize(new Dimension(640,480));//устанавливаем размер окна

player = new MediaPlayer();
//path — путь к файлу
player.setMediaLocation(«file:///» + path);
player.setPlaybackLoop(false);//Повтор видео
player.prefetch ();//предварительная обработка плеера (без неё плеер не появится)
//добавляем на фрейм
add(player);
//player.start (); — сразу запустить плеер

public static void main(String []args) <
VideoExample ve = new VideoExample(«D:\\1.mpeg»);
>
>

Вот тут и появилась проблема. Оказывается, хоть в документации к JMF и объявлена поддержка таких распространенных форматов, как avi и mpeg, на деле же это далеко не так. Видео либо не запускается вовсе, либо слышна только звуковая дорожка. Гугл показал, что с данной проблемой сталкивалось немало

пользователей(а сколько ещё сталкнётся?), вот только из кучи ссылок ответ нашелся лишь в одной.
Для решения данной проблемы к проекту необходимо добавить библиотеку jffmpeg-1.1.0.jar, который содержит кодеки для видео(и аудио, кстати) форматов.

Скачать её можно с официального сайта, который также легко находится поисковиком.

После добавления данной библиотеки видео тут же заработало.

Надеюсь, если статью пропустят, она поможет тем, кто столкнётся с подобной проблемой в будущем. Да и рабочий пример будет весьма полезен для начинающих программистов. На решение данной проблемы я потратил непростительное количество часов работы, давайте экономить время:)

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

Источник статьи: http://habr.com/ru/sandbox/42721/

Пишем проигрыватель lossless аудио на JavaScript

Добрый день, %username%. Сегодня я хотел бы поделится своим опытом разработки прототипа онлайн lossless аудио плеера.

На сегодняшний день, вряд ли можно кого-то удивить аудио или видео плеером, встроенного непосредственно в веб-страницу. Существующие технологии, библиотеки и API позволяют легко наполнить сайт любым медиа-контентом. Но есть такие люди, которым этого недостаточно (в том числе я). Именно поэтому, как истинному любителю музыки в lossless, мне потребовалось сделать браузерный плеер поддерживающий такой формат аудио, как flac.

К этой идее меня подтолкнула одна статья: Web плеер FLAC.JS (HTML5). Узнав, что есть такой замечательный фреймворк как Aurora.js и декодер формата flac для него, я не смог просто пройти мимо всего этого. Все — подумал я — теперь, когда мой уровень энтузиазма зашкалил, я должен сделать этот плеер. Итак, начнем…

Бекенд

В качестве бекенда у нас будет выступать небезызвестные Nginx и Apache c PHP (куда же без него). Первый будет отвечать за отдачу аудио данных, второй будет выдавать страницу с плеером и обрабатывать запросы Ajax.

Фронтенд

Первым делом нужно продумать весь функционал, который будет поддерживать наш плеер. Самое очевидное это Play/Pause, Next, Prev, полоса буферизации и поиска, громкость, строка названия трека и время. Также хотелось бы реализовать отображение обложки альбомов, плейлисты, поиск по базе аудиотеки и так далее, но я решил пока остановиться на самом основном. Так как с веб-разработкой я сталкивался не часто, то с версткой и дизайном у меня, мягко говоря, не очень.

Вот что у меня получилось в итоге:

Отлично. Необходимый минимум у нас есть. Теперь нужно все это оживить. Поэтому переходим к JavaScript.

Создадим класс Playlist который, как вы уже поняли, будет отвечать за список воспроизведения:

Где list — сам список, current — номер текущего трека, repeatmode — режим повтора (0 — без повтора, 1 — повтор всего списка, 2 — повтор одного трека).

Далее реализовываем все необходимые методы.

И напоследок метод перемешивания списка:

Плейлист у нас есть, переходим к самому плееру. Создадим класс Musica:

В params мы разместим все элементы интерфейса с помощью селекторов JQuery, по переменной pstate мы будем определять состояние плеера (воспроизводит/не воспроизводит), seekstate нам пригодится, когда мы будем реализовывать полосу поиска, а timetype определяет тип таймера (сколько прошло или сколько осталось). Также в этом конструкторе мы сразу повесили обработчики событий на все имеющиеся кнопки.

Фреймворк Aurora.js содержит класс Player, который реализует весь необходимый нам минимум. В нем есть такие методы как play(), pause(), stop(), seek(), а также реализован обработчик событий. Это сильно упрощает нам задачу.

Попробуем реализовать метод инициализации плеера:

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

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

Сначала мы подключаем обработчик события mousedown. После этого мы меняем значение progressbar и подключаем еще два обработчика. В первом (mousemove) мы также меняем значение progressbar. Во втором (mouseup) мы отключаем эти два обработчика и вызываем метод фреймворка seek(). Для того, чтобы во время поиска мышкой, progressbar не дергался от события progress, которое мы обрабатываем выше, нам нужен seekstate.

Почти таким же способом делаем регулятор громкости:

Плеер почти готов. Нам только осталось добавить методы play(), netxt(), prev(). В их реализации нет ничего сложного:

Источник статьи: http://habr.com/ru/post/235741/

Воспроизведение звука в Java

Введение

Воспроизведение звука

Тут всё более-менее просто. Импортируем javax.sound.sampled и поехали:

Регулятор громкости

Поигравшись со звуками, вы наверняка захотите иметь возможность программно изменять громкость звука. Java Sound API предоставляет такую возможность с фирменной кривотой.

Этот код нужно поместить между строчками clip.open(ais) и clip.setFramePosition(0).

Упрощаем процесс

Ну и наконец, чтобы вы не мучились, выкладываю класс для проигрывания звуков

Пользоваться очень просто, например:

Форматы

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

Похожие публикации

Java XML API: выбираем правильно. StAX: работаем с удовольствием

Java Stream API: что делает хорошо, а что не очень

Шпаргалка Java программиста 4. Java Stream API

Средняя зарплата в IT

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 7

Всю жизь пользовался этим:
Clip clip = Applet.newAudioClip( url );
clip.play();
От джавы больше не требовалось.

На линуксе джава работает со звуком отвратительно. Использует старый OSS, поэтому паралельно два клипа не звучат. Каждый раз при проигрывании открывает OSS-порт. Иногда оставляет открытым, и звуки вообще перестают звучать. Единственная штука, которая работала нормально — это java media framework. Но этот проект уже over 10 лет как в дауне.

Источник статьи: http://habr.com/ru/post/191422/

Проигрывание аудио и видео с использованием Java Media Framework

Содержание

Введение

Вы можете использовать библиотеки Core Java 2 Platform для отображения неподвижных изображений в формате GIF, JPEG и PNG. Библиотеки обеспечивают также ограниченную поддержку для отображения анимации в формате GIF89A. Возможно также проигрывание аудио-файлов в формате WAV, AU, MIDI и AIFF. Эта поддержка должна быть достаточной для ваших программ, но если вам нужно работать с другими медиа-форматами, такими как AVI-файлы для видео или MP3-файлы для аудио, необходим Java Media Framework (JMF) API.

JMF API поддерживает проигрывание, перемещение и захват аудио- и видеоданных. Он обеспечивает набор кодеров и декодеров для поддержки различных форматов и предлагает для вас подключаемую архитектуру для добавления дополнительных форматов.

Последняя версия программного обеспечения Java Media Framework (JMF 2.1.1 a) доступна для загрузки со страницы http://java.sun.com/products/java-media/jmf/. Загрузочный пакет JMF представлен двумя разновидностями: платформно-зависимая и кроссплатформенная версии. Sun предоставляет платформно-зависимые версии для Solaris и Windows. (Доступна также Linux-версия от Blackdown.)

Платформно-зависимые версии Sun включают аудио-поддержку Java Sound API, а кроссплатформенная — нет. После загрузки установочного пакета необходимо настроить вашу систему для использования JMF-библиотек. Для платформно-зависимых версий необходимо добавить в вашу переменную среды CLASSPATH файлы jmf.jar и sound.jar, а также каталог JMF lib в переменную PATH. Для кроссплатформенной версии необходимо добавить ссылку на файл jmf.jar в переменную CLASSPATH.

Linux-версия поставляется в трех вариантах и поддерживает и аудио и видео-форматы. Дополнительная информация и инструкции по установке находятся на http://www.blackdown.org/java-linux/jdk1.2-status/jmf-status.html

Классы Manager и Player

Проигрывание мультимедиа-файлов при помощи JMF является простой операцией. Ключевыми классами являются Manager и Player. Manager имеет набор методов createPlayer(), каждый из которых возвращает Player. После создания Player вы указываете ему начать проигрывание. В общем случае для проигрывания аудио-файла необходимо выполнить следующее:

Переменная resource, переданная в метод createPlayer может быть одного из трех типов: DataSource, MediaLocator, или URL. Они предоставляют различные способы указания медиа-данных: как драйвер протокола (DataSource), через содержимое (MediaLocator), или при помощи месторасположения (URL). В большинстве случаев работа с URL-ресурсами является самой простой. Например, если вы хотите проиграть файл, находящийся на вашем локальном жестком диске, нужно просто:

Получить URL для файла при помощи метода toURL класса File.

Передать URL как resource в createPlayer.

Проиграть файл, используя метод play:

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

Класс ControllerListener

Player имеет тип Controller, а контроллеры позволяют зарегистрировать ControllerListener. ControllerListener содержит один метод: public void controllerUpdate(ControllerEvent event). Этот метод используется для перехвата различных событий, происходящих с медиа-данными, таких как достижение конца видео-данных, завершения загрузки аудио-файла или начала и конца проигрывания медиа-данных.

Для реагирования на эти события используется класс ControllerAdapter. Он предлагает более тридцати различных методов для ответа на конкретные типы событий контроллера. Каждый из этих методов перенаправляет управление в метод-заглушку. В общем случае вам нужно создать подкласс класса ControllerAdapter и переопределить конкретный метод или методы, которые соответствуют вашей собственной логике обработки событий. Если вы не используете такой подход, необходимо проверять конкретный тип события при помощи instanceof в методе controllerUpdate.

Особенно важным подтипом события является RealizeCompleteEvent. При возникновении этого события ControllerAdapter передает управление в метод realizeComplete. Переопределение этого метода дает вам возможность получить визуальный компонент для видеоплейера и компонент панели управления для проигрывания аудио и видеоданных. Панель управления можно использовать для управления громкостью звука и для запуска и остановки проигрывания видео. Получить различные компоненты и добавить их на экран можно следующим способом:

Общий пример

В следующем примере собраны вместе все рассмотренные нами положения. Программа предоставляет кнопку вызова JFileChooser для выбора проигрываемого файла. После выбора файла инициируется добавление на экран визуальных компонентов. Весь относящийся к JMF код сосредоточен в методе load. Весь остальной код предназначен лишь для управления GUI.

Вы можете удивиться, почему программа останавливает проигрыватель перед началом проигрывания следующего файла. Когда вы вызываете Manager.createPlayer(url) для создания нового объекта Player, необходимо остановить проигрывание перед началом следующего. Если вы не остановите старый проигрыватель, вы можете услышать звучание старого MP3-файла во время просмотра видео с другой звуковой дорожкой. Если первоначально вы смотрели видео, нужно удалить визуальный компонент для видеоплейера, иначе вы увидите «старый» видеоклип, слушая новый аудиофайл.

import javax.swing.*;
import javax.media.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;

public class PlayVideo extends JFrame <

Player player;
Component center;
Component south;

public PlayVideo () <
setDefaultCloseOperation ( EXIT_ON_CLOSE ) ;
JButton button = new JButton ( «Select File» ) ;
ActionListener listener = new ActionListener () <
public void actionPerformed ( ActionEvent event ) <
JFileChooser chooser = new JFileChooser ( «.» ) ;
int status = chooser.showOpenDialog ( PlayVideo. this ) ;
if ( status == JFileChooser.APPROVE_OPTION ) <
File file = chooser.getSelectedFile () ;
try <
load ( file ) ;
> catch ( Exception e ) <
System.err.println ( «Try again: » + e ) ;
>
>
>
> ;
button.addActionListener ( listener ) ;
getContentPane () .add ( button, BorderLayout.NORTH ) ;
pack () ;
show () ;
>

public void load ( final File file ) throws Exception <
URL url = file.toURL () ;
final Container contentPane = getContentPane () ;
if ( player != null ) <
player.stop () ;
>
player = Manager.createPlayer ( url ) ;
ControllerListener listener = new ControllerAdapter () <
public void realizeComplete ( RealizeCompleteEvent event ) <
Component vc = player.getVisualComponent () ;
if ( vc != null ) <
contentPane.add ( vc, BorderLayout.CENTER ) ;
center = vc;
> else <
if ( center != null ) <
contentPane.remove ( center ) ;
contentPane.validate () ;
>
>
Component cpc = player.getControlPanelComponent () ;
if ( cpc != null ) <
contentPane.add ( cpc, BorderLayout.SOUTH ) ;
south = cpc;
> else <
if ( south != null ) <
contentPane.remove ( south ) ;
contentPane.validate () ;
>
>
pack () ;
setTitle ( file.getName ()) ;
>
> ;
player.addControllerListener ( listener ) ;
player.start () ;
>

public static void main ( String args []) <
PlayVideo pv = new PlayVideo () ;
>
>

Источник статьи: http://javatutor.net/articles/playing-audio-and-video-with-jmf


0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии