Você está na página 1de 15

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: leonardobcampos@ifba.edu.br (2) Instituto Federal de Educao Tecnolgica da Bahia Campus de Vitria da Conquista, Av. Amazonas 3150 Zabel - Vitria da Conquista, e-mail: diegoandrade.eng@gmail.com

RESUMO
As 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.

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 POO


Segundo (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 Modelos
Modelos 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 Objetos


Em 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 Herana
Uma 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.

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 JMF


A 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 FINAIS
O 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.

REFERNCIAS
DEITEL, 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: <http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/guide/ > 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.