Java media framework api

Java Media Framework 2.1 — Sample Code

JMFRegistry is a standalone Java application used to configure JMF. You can use it to query and manage the list of media handlers, plugin components and capture devices.

JMFRegistry is built with the Swing GUI toolkit. To run it requires Java 2 or JDK 1.1.x with Swing 1.1 or above:

  1. Set the CLASSPATH and LD_LIBRARY_PATH as described in Setting Up JMF. (Be sure to also include the Swing classes in your CLASSPATH if you are using Swing).
  2. On the command line, enter:
    java JMFRegistry

To download the source code for JMFRegistry (and JMStudio):

SimplePlayerApplet

SimplePlayerApplet is a simple applet that can be used to run a JMF player for a particular media file. The URL for the media file is passed in as a parameter in the applet tag used to display the applet.

This applet embeds the visual component and control panel component in the browser page, if they are available.

The Applet tag for SimplePlayerApplet would look something like:

JMStudio

JMStudio is a standalone Java application built using JMF. You can use it to play, capture, transcode, and store media data. It also supports RTP reception and transmission.

1.Set the CLASSPATH and LD_LIBRARY_PATH as described in Setting Up JMF. 2.On the command line, enter:

If you have installed the performace packs, you can also use the JMStudio launch scripts to start the application.

JMStudio can also be used as an external helper application for popular browsers. The browser will download the file and then launch JMStudio to play the multimedia content from the locally stored file. To do set up JMStudio as a helper application, edit your applications preferences in your browser, specifying JMStudio as the helper application for each media type you want to play using JMF.

To download the source code for JMStudio (and JMFRegistry):

Export

Export is a stripped down version of JMStudio. It allows a user to specify an arbitrary input source for transcoding. The user can specify the target data formats and output content types. The transcoded result can be sent to a file, the network or just previewing on screen.

1.Set the CLASSPATH and LD_LIBRARY_PATH as described in Setting Up JMF. 2.On the command line, enter:

Читайте также:  Напечатать числа в виде следующей таблицы питон

The source code for Export is included in the JMStudio source for JMF 2.1.1.

MediaPlayer Bean

The MediaPlayer Java Bean is part of the API in the javax.media.bean.playerbean package. MediaPlayer can be instantiated directly and used to present one or more media streams.

RTPPlayerApplet

RTPPlayerApplet is a sample applet that can play unicast, boradcast, and multicast RTP session. To run RTPPlayerApplet, you can use the AppletViewer to open the rtpclient page:

JMF Players are created for all of the RTP streams in the session. You can use the control components to stop and start playback of the RTP streams.

RTPSocketPlayer

This sample allows users to use the network transport protocol independence of JMF in RTP. Users can run RTP over any underlying transport protocol. By default, JMF uses RTP over UDP. Users running RTP over a non UDP transport, can use the RTPSocket object defined in javax.media.rtp.RTPSocket and its accompanying interfaces.

The RTPSocketPlayer.java sampleapp explains the use of the RTPSocket using UDP as its underlying protocol. To use the sample, users need to change the address and port to that of their RTP session. The variables «address» and «port» (line 50) need to match those your RTP server is streaming data to. Recompile the file and run RTPSocketPlayer as

  • The RTPSocket will stream data over from UDP to the RTPSessionManager
  • Only the first stream received on the session is played back in this case.

Plugin Samples

Plugins are used to extend the capabilities of JMF as described in the «Extending JMF» chapter of the Programmer’s Guide. A few sample plugins are provided here as reference:

  • SampleDeMux — sample Demultiplexer.
  • GainEffect — sample Codec.
  • SampleAWTRenderer — sample Renderer.

Источник

Проигрывание аудио и видео с использованием 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-ресурсами является самой простой. Например, если вы хотите проиграть файл, находящийся на вашем локальном жестком диске, нужно просто:

  1. Получить URL для файла при помощи метода toURL класса File.
  2. Передать URL как resource в createPlayer.
  3. Проиграть файл, используя метод play:

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

Класс ControllerListener

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

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

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

Component vc = player.getVisualComponent () ;
if ( vc != null ) contentPane.add ( vc, BorderLayout.CENTER ) ;
>
Component cpc = player.getControlPanelComponent () ;
if ( cpc != null ) contentPane.add ( cpc, BorderLayout.SOUTH ) ;
>

Общий пример

В следующем примере собраны вместе все рассмотренные нами положения. Программа предоставляет кнопку вызова 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 () ;
>
>

Источник

Оцените статью