DESENVOLVIMENTO DE APLICATIVOS MULTIMDIA USANDO JAVA MEDIA
FRAMEWORK (JMF)Leonardo BARRETO CAMPOS (1); Diego BOMFIM ANDRADE
(2)(1) Instituto Federal de Educao Tecnolgica da Bahia Campus de
Vitria da Conquista, Av. Amazonas 3150 Zabel - Vitria da Conquista,
e-mail: [email protected] (2) Instituto Federal de Educao
Tecnolgica da Bahia Campus de Vitria da Conquista, Av. Amazonas
3150 Zabel - Vitria da Conquista, e-mail:
[email protected]
RESUMOAs tecnologias que do suporte ao processamento e
transmisso de dados multimdia pelas redes de computadores permitem
o desenvolvimento de sistemas cada vez mais poderosos e utilitrios.
Nesse sentido, este artigo tem como objetivo uma abordagem prtica
dos fundamentos do Paradigma Orientado a Objetos aplicados na
Linguagem de Programao Java com o propsito de desenvolver
aplicativos usando a API Java Media Framework (JMF) e explorar suas
principais funcionalidades. Como objetivo especfico o artigo prev a
implementao de um software capaz de executar mdias em formatos
diferentes oriundas de diversas fontes de dados, entre elas: base
de dados local, base de dados distribuda ou cmeras Web.
Palavras-chave: POO, Java, JMF e Sistemas Multimdia.
1
INTRODUO
A evoluo dos sistemas de computao (capacidade de armazenamento,
novas interfaces grficas, velocidade das redes, etc) que do suporte
ao processamento ou troca de dados, permite cada vez mais o
desenvolvimento de sistemas que processe ou transmita informaes
representadas em outras mdias alm da textual como, por exemplo,
udio e vdeo (TANENBAUM 2003), (KUROSE 2003) e (TORRES 2001). Esse
conjunto de hardware e software que possibilita: criar, manipular,
armazenar, transmitir e exibir informaes de diversas naturezas
como: texto, grficos, imagens estticas, voz (udio) e vdeo,
conhecido como Sistemas Multimdia (LU 1996). As aplicaes multimdia
so comumente divididas em dois grandes grupos: multimdia distribuda
e multimdia no-distribuda. As aplicaes distribudas so aquelas
executas com o auxlio das redes de computadores. Dessa forma, as
informaes esto distribudas em redes de computadores, podendo estar
armazenada em diversos servidores com o objetivo de compor uma nica
apresentao multimdia, conforme Figura 1.
Figura 1 Cenrio clssico de aplicaes multimdia distribudas
Nas aplicaes multimdia no-distribudas, tambm conhecidas como
stand-alone, todos os dados para a manipulao e apresentao dos dados
multimdia encontram-se numa nica mquina. Dessa forma, diante disso
do crescimento das aplicaes multimdia nos sistemas de computao e as
variedades de mdias processadas e transmitidas pelas redes de
computadores, o presente trabalho apresenta uma abordagem para
desenvolvimento de aplicaes multimdia distribudas e no-distribudas
utilizando uma API (Applications Programming Interfaces) da
linguagem de programao Java, denominada JMF (Java Media Framework).
Segundo Horstmann et al. (2002), JMF uma coleo de classes que
permite a captura e visualizao de dados multimdias em aplicaes e
applets Java. Usando a API JMF possvel criar aplicativos Java que
capturaram, produzem e editam os tipos de mdias de udio e vdeo mais
populares do mercado, por exemplo: MPEG, AVI, MP3, etc. Para obter
uma melhor compreenso do trabalho apresentado, o artigo est
dividido da seguinte forma: a seo 2 faz uma anlise dos principais
fundamentos definidos pelo Paradigma Orientado a Objetos aplicados
na linguagem de programao Java e que sero utilizados no
desenvolvimento de aplicativos multimdia atravs da API JMF. Sero
apresentados exemplos e aplicaes prticas para facilitar a
compreenso. Na seo 3 os conceitos bsicos da API Java Media
Framework (JMF). A seo 4 consiste na aplicao prtica de todo o
referencial terico visto nas sees anteriores. Por fim, a seo 5
apresenta as consideraes finais e agradecimentos.
2 FUNDAMENTOS DO PARADIGMA ORIENTADO A OBJETOS POOSegundo
(SANTOS 2003) Programao Orientada a Objetos ou, abreviadamente,
POO, um paradigma de programao de computadores onde se usam classes
e objetos, criados a partir de modelos para representar e processar
dados usando programas de computadores. As sees a seguir
apresentaro os principais fundamentos do paradigma orientado a
objetos que sero utilizados no desenvolvimento de aplicativos
multimdia.
2.1 ModelosModelos so representaes simplificadas de pessoas,
itens, tarefas, processos, etc usados comumente no seu dia-a-dia,
independente do uso de computadores. Para exemplificar o uso de
modelos em tarefas comuns, considere uma Instituio de Ensino
Superior que armazena dados acadmicos dos seus alunos atravs de uma
fica de matrcula. Este modelo pode ser considerado contendo as
principais informaes de identificao do aluno conforme mostra a
Figura 2.
Figura 2 Ficha cadastral de alunos
O modelo apresentado na Figura 2 representa dados ou informaes
relevantes abstrao do mundo real. Dessa forma, no registro acadmico
de um aluno, dados como altura, cor dos olhos e peso so
irrelevantes e no devem ser representados pelo modelo (domnio) em
questo. Alm dos dados associados aos alunos, um modelo comumente
contm operaes ou procedimentos associados a ele. Essas operaes so
listas de comandos que processaro os dados contidos no prprio
modelo. Entre outras operaes que podem ser feitas sobre os dados
cadastrados dos alunos esto: alterao do turno, obteno do telefone
celular, atualizao do endereo, etc. A Figura 3 mostra os dados e as
operaes deste modelo apenas para os trs primeiros campos do
formulrio.
Figura 3 Modelo Aluno, seus dados e mtodos
Uma vez definido o modelo possvel codific-lo na linguagem de
programao Java atravs de classes, conforme apresentado na prxima
seo.
2.2 Classes e ObjetosEm Java, a unidade de programao a classe da
qual eventualmente objetos so instanciados (criados) (DEITEL &
DEITEL 2003). Os grupos de aes que realizam alguma tarefa so
chamados de mtodos. Portanto, cada classe contm dados, bem como o
conjunto de mtodos que manipulam esses dados. A Figura 4 mostra a
implementao da classe Aluno na linguagem Java.
Figura 4 Cdigo-fonte da Classe Aluno
A Figura 4 apresenta uma simples definio da classe Aluno. Uma
classe em Java sempre declarada com a palavra-chave class seguida
do nome da classe (linha 1). Nas linhas 2 a 4, so declarados trs
dados vinculados a classe Aluno capazes e armazenar sequncias de
caracteres (strings), so eles: numMatricula, nome e curso. Em
muitos casos ser desejvel que os dados no possam ser acessados ou
usados diretamente, mas somente atravs das operaes cuja
especialidade ser a manipulao dos dados. A capacidade de ocultar
dados dentro das classes, permitindo que somente operaes
especializadas ou dedicadas manipulem os dados ocultos (privados)
chama-se encapsulamento. A palavra-chave em Java que efetua essa
modificao sobre os dados private. Porm, a maior parte do
cdigo-fonte que especifica a classe Aluno composta por mtodos.
Conforme definio anterior, mtodos so grupos de aes que realizam
alguma tarefa sobre os dados de uma classe. Os mtodos da classe
Aluno esto definidos nas linhas 6 a 27, so eles: Aluno, getCurso,
setNome, getCurso, setCurso, getNumMatricula e setNumMatricula. O
mtodo que possui o mesmo nome da classe (linhas 6-9) o mtodo
conhecido como construtor da classe. Um construtor um mtodo
especial que inicializa as variveis de um objeto dessa classe, ou
seja, o mtodo construtor chamado quando um programa instancia um
objeto da classe. Na classe Aluno, o construtor inicia o campo
curso com a string Bacharelado em Cincia da Computao. Dessa forma,
para cadastrar um aluno com outro curso ser necessrio alterar o
campo curso deste objeto. Os mtodos iniciados em get e set tero a
finalidade de obter o dado gravado na varivel e alterar este dado,
respectivamente. De acordo com essa premissa os mtodos getCurso,
getNome e getNumMtaricula tero comportamento semelhante: retornar
os caracteres do campo correspondente. De forma anloga, os mtodos
setCurso, setNome e setNumMatricula tero o mesmo comportamento:
receber um novo dado, passado como parmetro do mtodo, que atualizar
o campo correspondente. Por fim, para testar as funcionalidades da
classe Aluno necessria a criao de uma classe que contenha o mtodo
main. A Figura 5 mostra o cdigo-fonte da classe Main que testar as
funcionalidades da classe Aluno.
Figura 5 Programa Main.java que testa a Classe Aluno
Toda aplicao Java deve conter o mtodo main (linha 5),
justamente, onde as aplicaes Java iniciam sua execuo. Dento do
escopo do mtodo main o operador new (linha 7) cria um objeto
(instncia) da classe
Aluno alocando a memria dinamicamente suficiente para armazenar
os dados do objeto. No momento em que o objeto a criado seu
construtor inicializa a varivel curso inserindo a string
Bacharelado em Cincia da Computao. Em seguida so usados dois mtodos
contidos na classe JOptionPane, so eles: showMessageDialog e
showInputDialog; ambos abriro GUI (Graphical User Interface),
interfaces grficas para sada e entrada de dados respectivamente,
conforme Figura 6.
a GUI apresentando o curso cadastrado
6b GUI para entrada de novo curso
6c GUI para entrada do nome
6d GUI apresentando os dados do Aluno
Figura 6 Teste da classe Aluno
A classe JOptionPane definida pela Java est inserida no pacote
javax.swing, importado na linha 1 atravs do parmetro import. Este
parmetro ajuda o compilador a localizar as classes usadas pelo
programa. Para cada classe usada da API Java deve-se indicar
(importar) o pacote no qual se encontra aquela classe, s assim, o
compilador assume a forma correta de usar as classes e mtodos do
pacote importado. Em suma, de acordo com o cdigo-fonte do programa
Main.java e as imagens da Figura 6, tem-se a seguinte sequncia de
execuo: (i) O objeto a criado e inicializado pelo construtor da
classe Aluno, (ii) Um tela com a confirmao dessa inicializao
exibida, (iii) Uma caixa de texto para entrada de dados exibida
solicitando o nome do curso, (iv) Uma caixa de texto para entrada
de dados exibida solicitando o nome do aluno, (v) Uma caixa de
texto para exibio de dados finaliza o programa mostrando os dados
digitados.
2.3 HeranaUma das caractersticas mais interessantes de
linguagens de programao orientadas a objetos a capacidade de
facilitar a reutilizao de cdigo o aproveitamento de classe e seus
mtodos que j estejam escritos e que j tenham o seu funcionamento
testado e comprovado. Reutilizao de cdigo diminui a necessidade de
escrever novos mtodos e classes, economizando o trabalho do
programador e diminuindo a possibilidade de erros. Como exemplo,
considere um aluno de um curso universitrio, que pode ser modelado
por uma instncia da classe Aluno definido nas Figuras 3 e 4. Um
aluno de ps-graduao na poderia ser modelado por uma instncia da
mesma classe, uma vez que para alunos de ps-graduao deve-se manter
dados sobre o ttulo da tese e o nome do orientador, por exemplo. A
soluo dada por linguagens de programao orientada a objetos criar
uma nova classe, por exemplo, AlunoPosGraduacao, que contm os
campos e mtodos da classe Aluno e os campos e mtodos adicionais que
diferenciam o uso e o comportamento das duas classes. Existem duas
formas bsicas de
reutilizao de classes em Java: composio e herana. Como o
objetivo deste trabalho no utiliza classes oriundas de composio, o
direcionamento ser apenas para a herana, conforme mostra a Figura
7.
Figura 7 Classe AlunoPosGraduacao herdando a Classe Aluno
De acordo com o cdigo-fonte apresentado na Figura 7, a linguagem
de programao Java possibilita herana atravs da palavra-chave
extends. Na relao de herana apresentada pelo cdigo-fonte a classe
Aluno aparece como superclasse ou classe base, enquanto que a
classe AlunoPosGraduacao chamada de subclasse ou classe derivada.
Dessa forma, ao usar herana os dados e mtodos da superclasse
(classe base) so adicionados a subclasse (classe derivada),
conforme apresentado na Figura 8.
Figura 8 Programa Main.java que testa a Classe
AlunoPosGraduacao
Ao criar o AlunoPosGraduacao b (linha 7), implicitamente, os
dados e mtodos para manipulao dos campos nome, curso e matrcula
definidos na classe Aluno estaro disponveis para a classe
derivada.
possvel verificar a existncia da herana na Figura 9 que
apresenta o teste da classe AlunoPosGraduacao.
9a GUI apresentando o curso cadastrado
9b GUI para entrada de novo curso
9c GUI para entrada do nome
9d GUI para entrada do ttulo da dissertao
9e GUI apresentando os dados do Aluno Figura 9 Teste da classe
AlunoPosGraduacao
Diante da sequncia de execuo apresentada pelas imagens contidas
na Figura 9 possvel verificar a herana dos dados definidos na
classe Aluno. Considerando a compreenso e aplicao dos conceitos
apresentados na seo 2, o leitor possuir o fundamento para
desenvolver aplicativos multimdia usando a API JMF. O objetivo do
trabalho justifica a ausncia de contedos fundamentais da POO, como
por exemplo: classes abstratas e interfaces, polimorfismo, colees
de objetos, etc.
3
UTILIZAO DA API JMF
Os aplicativos multimdia tm passado por um crescimento
considervel nos ltimos anos, como pode ser observado pela enorme
quantidade de sites disponveis na Internet que apresentam este tipo
de contedo. Os Sites da Web, que antes eram simples pginas HTML,
foram se transformando em experincias intensas de multimdia,
proporcionadas pelos avanos tecnolgicos tanto de hardwares quanto
de softwares. Reconhecendo a necessidade de os aplicativos Java
suportarem recursos de udio e vdeo digitais, a Sun Microsystems, a
Intel e a Silicon Graphics trabalharam juntas para produzir uma API
para multimdia que conhecida como Java Media Framework (JMF).
Segundo (SUN MICROSYSTEMS 1998), com o JMF pode-se facilmente criar
applets e aplicaes que apresentam, capturam, manipulam e armazenam
diferentes tipos de mdias baseadas em tempo.
Dispositivos como fitas e videocassetes fornecem um modelo
equivalente ao JMF para gravao, processamento e apresentao de mdia
baseada em tempo. Quando voc reproduz um filme, um fluxo de mdia
fornecido para o videocassete atravs de uma fita de vdeo. O
videocassete ler e interpreta os dados da fita e envia sinais
adequados de udio e vdeo para a televiso, como pode ser observado
na Figura 10:
Figura 10: Gravao, processamento e apresentao de uma mdia
baseada em tempo
Na API JMF, um DataSource encapsula um fluxo de mdia, assim como
a fita de vdeo e um Player fornece mecanismos de apresentao e
controle semelhantes a um Videocassete. Para reproduo e captura de
udio e vdeo com o JMF necessrio o uso de dispositivos apropriados
para tais funes, como por exemplo, uma webcam (captura) e
auto-falantes (reproduo). Dentre outras caractersticas, JMF pode:
Executar vrios arquivos multimdia em um applet ou aplicativo Java.
Os formatos suportados incluem AU, AVI, MIDI, MPEG, QuickTime, e
WAV. Executar fluxo de mdia da Internet. Captao de udio e vdeo com
o microfone e a cmera de vdeo, em seguida, armazenar os dados em um
formato compatvel. Processo de mdia baseada no tempo e alterar o
formato do tipo de contedo. Transmisso de udio e vdeo em tempo real
na Internet. Transmisso ao vivo de rdio ou programas de
televiso.
3.1 Arquitetura da API JMFA seguir sero comentadas as principais
classes e interfaces contidas na arquitetura JMF:
Manager: Ainda comparando com o sistema de videocassete, a
funcionalidade do Manager pode ser vista como os dispositivos
eletrnicos que realiza o intermdio e integrao entre a fonte de
dados (fita de vdeo) e o player (videocassete). De modo geral, um
Manager pode ser visto como um objeto verstil que realiza o
intermdio entre duas classes diferentes. JMF oferece quatro tipos
diferentes de Managers: Manager: Utilizado para criar Players,
Processors, DataSources e DataSinks. A classe Manager fornece
mtodos static que permitem acessar a maioria dos recursos do
JMF;
PackageManager: Mantm um registro de pacotes que contm as
classes JMF; CaptureDeviceManager: Mantm um registro dos
dispositivos de captura que podem ser acessados por um na criao de
um Player, como por exemplo, uma webcam; PluginManager: Mantm um
registro dos componentes plug-in JMF para processamento.
DataSource: A classe DataSource encapsula a localizao da mdia e
o protocolo de software usado para fornecer os meios de comunicao.
Uma vez obtida, uma fonte de mdia no pode ser reutilizada para
oferecer outras mdias, seria como utilizar um mesmo espao em uma
fita cassete para reproduzir dois vdeos diferentes. No JMF, um
objeto DataSource pode ser um arquivo ou um fluxo de entrada da
Internet. Uma vez criado, um DataSource pode ser inserido em um
Player, para ser processado, sendo que o Player no se preocupa com
a origem do DataSource ou qual era a sua forma original. Um
DataSource pode ser identificado por um objeto da classe
MediaLocator, ou uma URL (Identificador Universal de recursos), um
MediaLocator semelhante a um URL e pode ser construdo a partir de
um URL. CaptureDevice: representa um hardware que usado na captura
de dados multimdia, como por exemplo, microfones e cmeras de vdeo.
Os dados resgatados destes dispositivos podem ser diretamente
enviados para um Player, processados, ou mesmo convertidos em outro
formato mais adequado para armazenamento. Player: tem como entrada
um fluxo de udio e/ou vdeo e torna a sada em um alto-falante ou uma
tela, bem como um CD player que l um CD de msica e envia a sada
para os alto-falantes. Um Player pode ter estados que existem
naturalmente porque o Player tem que preparar a sua fonte de dados
antes de comear a reproduzir a mdia. Isso ocorre tambm em aparelhos
de DVD, por exemplo, quando voc insere uma mdia de DVD onde um
estado de leitura apresentado no display de modo que o aparelho
possa identificar a fonte de dados, bem como o formato ou mesmo se
compatvel com os tipos de mdia que o mesmo pode executar. Da mesma
forma um Player JMF deve fazer algumas preparaes antes que uma
fonte de dados multimdia possa ser ouvida (udio) ou assistida
(vdeo). JMF define seis estados para um Player, so eles:
Unrealized: Neste estado, o objeto Player foi instanciado. Como um
beb recm-nascido que ainda no reconhece o seu ambiente, um Player
recm instanciado ainda no sabe nada sobre sua mdia. Realizing: O
objeto Player muda do estado Unrealized para Realizing quando o
mtodo realize() for chamado. No estado Realizing o Player est em
processo de determinao de suas necessidades em recursos. Durante o
Realizing o Player adquire recursos que ele s precisa adquirir uma
vez, bem como os recursos de processamento, alm de recursos de uso
exclusivo como acontece, por exemplo, em webcams que s podem ser
utilizadas por um Player a cada momento. Realized: Quando um Player
termina o estado Realizing, ele se move para o estado Realized.
Neste estado o Player sabe dos recursos que precisa e tem informaes
do tipo de mdia que ser processada. Prefetching: Quando o mtodo
prefetch chamado, um Player muda de estado realized para o estado
de prefetching. Um Player no estado prefetching est se preparando
para apresentar a sua mdia. Durante esta fase, o Player pr-executa
os dados de mdia, obtm recursos de uso exclusivo, e qualquer outra
coisa necessria para rodar os dados da mdia. Prefeched: O Player
est pronto para iniciar a execuo dos dados da mdia. Nesse estado o
Player aguarda que o mtodo start seja chamado para entrar no estado
de started. Started: O player inicia a apresentao dos dados de
mdia.
A Figura11 apresenta um modelo de estados conveniente para a
execuo de um Player:
Figura 11: Estados de um Player em execuo
Em JMF, o processo de apresentao modelado pela interface do
Controller. Controller define o mecanismo bsico de estado e
controle para um objeto que controla, apresenta ou captura mdia
baseada em tempo. Ele define as fases que um controlador de mdia
atravessa e fornece um mecanismo para controlar as transies entre
as fases. Um nmero de operaes que devem ser realizadas antes da
apresentao de dados de mdia pode ser demorado, portanto JMF permite
controle programtico sobre quando eles ocorrem. Um Controller
registra uma variedade de especficos do controlador MediaEvents
para fornecer notificao de alteraes no seu estado. Para receber
eventos de um Controller como um Player, dever ser implementado a
interface ControllerListener. Processor: um tipo de Player. Na API
JMF uma interface Processor estende Player, suportando os controles
de apresentao como um Player, porm com a diferena que o Processor
tem controle sobre o processamento que realizado sobre o fluxo de
mdia de entrada. Alm disso, um atravs de um Processor, os dados da
mdia de sada podem ser reaproveitados, podendo ser processados em
outro Player ou Processor, ou convertido em algum outro formato.
Alm dos seis estados j referidos Player, um Processor inclui dois
estados adicionais que ocorrem antes que o Processor entre no
estado realizing, mas depois de perceber o estado unrealized, que
so: Configuring: Um processador entra no estado de configurao do
estado latente, quando o mtodo configure() chamado. Um Processor
entra no estado de Configuring quando ele entra no DataSource e
reconhece o formato da mdia de entrada. Configured: Depois de
ligado ao DataSource configurado os formatos de entrada.
DataSink: uma interface de base para objetos que ler contedos de
mdia entregue por um DataSource e tornar a mdia para algum destino.
Um DataSink pode ser comparado com um gravador que armazena os
dados de uma mdia para ser gravado em outra mdia ou arquivo.
Format: Um objeto Format representa o formato de um objeto de mdia
exata. O formato em si no traz parmetros de codificao especfico ou
informao de tempo global, que descreve o nome do formato de
codificao eo tipo de dados que o formato exige. subclasses formato
incluem AudioFormat e VideoFormat. Por sua vez, VideoFormat contm
seis subclasses: (i) H261Format, (ii) H263Format, (iii)
IndexedColorFormat, (iv) JPEGFormat, (v) RGBFormat e (vi)
YUVFormat.
4 DESENVOLVIMENTO DE APLICATIVOS API JAVA MEDIA FRAMEWORK JMF
Nesta sesso ser apresentado, como objeto de estudo, um aplicativo
multimdia que utiliza os principais conceitos de POO e da API JMF
vistos at aqui. Neste aplicativo ser visto como se d a implementao
de um Player de udio e vdeo utilizando objetos da classe Manager
para criao de um Player a partir de um DataSource. O aplicativo ser
capaz de apresentar, bem como capturar um fluxo de vdeo, seja de um
arquivo de mdia local compatvel, atravs do boto Abrir Arquivo, ou
especificando um URL de mdia que pode tambm acessar um dispositivo
de captura (webcam ou microfone) clicando no boto Inserir Local. As
seguintes etapas sero seguidas para reproduzir um clipe de mdia:
1234Especificar a fonte de mdia; Criar um Player para a mdia; Obter
a mdia de sada e os controles do Player; Exibir a mdia e os
controles.
Percorreremos o cdigo fonte da classe nomeada AppMinicurso de
modo a rever o que est acontecendo em cada linha, bem como as
etapas descritas acima, com o objetivo de implementar um aplicativo
semelhante ao da Figura 12:
Figura 12: Aplicativo que usa a API JMF
4.1 ETAPA 1: ESPECIFICAR A FONTE DE MDIA O clipe de mdia precisa
ser processado antes de ser reproduzido. Para processar um clipe de
mdia, o programa precisa acessar uma fonte de mdia. Em nvel de
linguagem de programao, a fonte de mdia que inserida em um Player
pode ser tanto um objeto que implementa a interface DataSource,
quanto um MediaLocator. Para o nosso objeto de estudo, a fonte de
mdia pode ser obtida atravs dos mtodos openFile e openFile2 que so
chamados nas escutas dos botes e inseridas em um MediaLocator, como
pode ser observado na Figura 13, que mostra uma parte do cdigo onde
a fonte de mdia especificada.
Figura 13: Especificao da fonte de mdia atravs de um
MediaLocator
Conforme mostra a Figura 13, no mtodo openFile, a URL do arquivo
selecionado atravs do mtodo getSelectedFile de JFileChooser (classe
do que modela uma janela de seleo de arquivos) recuperada atravs do
mtodo toURL e passado como argumento no construtor do MediaLocator.
J o mtodo openFile2, uma String digitada pelo usurio na janela
criada pelo mtodo static showInputDialog da classe JOptionPane
repassado diretamente como argumento da classe no construtor do
MediaLocator. 4.2 ETAPA 2: CRIAR UM PLAYER PARA MDIA Quando o
usurio clicar em um dos botes para especificar a fonte de mdia, a
respectiva escuta do boto ir chamar o mtodo openFile correspondente
e logo em seguida o mtodo criarPlayer, j que uma fonte de mdia j
ter sido especificada. A Figura 14 abaixo mostra a escuta para o
boto Abrir Arquivo:
Figura 14: Mtodo associado boto Abrir Arquivo
A criao de um objeto Player para reproduzir uma mdia a partir de
uma fonte de mdia resgatada em openFile feita no mtodo criarPlayer.
Um objeto Player criado a partir do mtodo static createPlayer de
Manager que tem como parmetro um MediaLocator como pode ser
observado na Figura 15: 4.3 ETAPA 3: OBTER MDIA DE SADA E CONTROLES
DO PLAYER Como foi comentado na sesso anterior, um Player passa por
vrios estados at poder iniciar a execuo a partir de uma fonte de
mdia, porm, esses estados devem ser identificados durante a execuo
do programa, essa identificao feita atravs da implementao dos
ControllerListeners convenientes para escuta dos estados do Player.
Os ControllerListeners esperam os ControllerEvents que os Players
geram, para monitorar o progresso de um Player no processo de
tratamento da mdia. Ainda no mdoto criarPlayer, o objeto player
registra uma instancia da classe interna ManipulaEventos para
esperar certos eventos que o player gera (ver Figura 6). A classe
ManipulaEventos estende a classe ControllerAdapter, que oferece
implementaes vazias dos mtodos da interface ControllerListener,
facilitando assim a implementao de ControllerListener para as
classes que precisam tratar de apenas alguns tipos de
ControllerEvent.
Figura 15: Mtodo criarPlayer da classe AppMinicurso
4.4 ETAPA 4: EXIBIR A MDIA E OS CONTROLES Para exibir a mdia e
os controles do player, necessrio adicionar os componentes, visual
e painel de controle, atravs dos mtodos getVisualComponent e
getControlPanelComponent de player em objetos da classe Container.
Quando o Player completa a carga antecipada, ele passa para o
estado Prefetched e est pronto para reproduzir a mdia. Durante esta
transio, o Player gera um ControllerEvent do tipo
PrefetchCompleteEvent, para indicar que est pronto para exibir a
mdia. O Player invoca o mtodo prefetchComplete de ManipulaEventos,
que exibe a GUI do Player na frame. Aps obter os recursos de
hardware, o programa pode obter os componentes de mdia que ele
exige. A Figura 16 apresenta a classe interna ManipulaEventos que
observa os respectivos estados em que o player se encontra e
implementa os mtodos para apresentao da componente visual e de
controle para o usurio. Quando o clipe de mdia terminar, o Player
gera um ControllerEvent do tipo EndOfMediaEvent. A maioria dos
reprodutores de mdia reenrolam o clipe de mdia depois de chegar ao
fim, de modo que os usurios possam ver ou ouvir novamente a partir
do incio. O mtodo endOfMedia trata o EndOfMediaEvent e restaura o
clipe de mdia para sua posio inicial invocando o mtodo setMediaTime
de Player com um novo Time (pacote javax.media) de 0. O mtodo
setMediaTime ajusta a posio da mdia para uma posio especfica de
tempo e til para pular para uma parte diferente da mdia. Logo aps o
mtodo stop de Player invocado, que termina o processamento da mdia
e coloca o Player no estado Stopped. vlido ressaltar que necessrio
invocar o mtodo start para um Player Stopped que no tenha sido
fechado retoma a reproduo da mdia
Figura 16: Classe interna que implementa um Controller para o
player
5 CONSIDERAES FINAISO trabalho apresentado neste artigo mostrou
a importncia e projeo que os Sistemas Multimdia tm alcanado nos
Sistemas de Computao. Como trabalhos futuros as pesquisas avanam na
especificao de projetos que dem suporte a novos formatos de udio e
vdeo, sobretudo mais leves para processados e transmitidos.
Finalmente, os autores agradecem Fundao de Amparo Pesquisa do
Estado da Bahia (FAPESB) pela bolsa fornecida ao segundo autor.
REFERNCIASDEITEL, H.M.,DEITEL, P.J. Java, como programar. 4. ed.
Porto Alegre: Bookman, 2003. HORSTMANN. C. S.; CORNELL G., Core
Java 2 Recursos Avanados. So Paulo: Makron Books, 2002. KUROSE, J.
F; KEITH W., Ross, Redes de Computadores E A Internet - Uma Nova
Abordagem, Editora Addison Wesley, 2003. LU, G., Communication and
Computing for Distributed Multimedia Systems, Editora Artech House,
1996. SANTOS, R. Introduo orientada a objetos usando Java, Rio de
Janeiro: Editora Elsevier, 2003. SUN MICROSYSTEMS, Inc. Guia do
desenvolvedor Java Media Framework. 1998, Disponvel em: Acesso em:
18 julho 2010. TANENBAUM, Andrew S. Redes de computadores. Rio de
Janeiro: Campus, 4 Edio, 2003. TORRES, Gabriel, Redes de
Computadores: curso completo. Rio de Janeiro: Axcel Books,
2001.