A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ronaldo Celso Messias Correia Java Media Framework JMF.

Apresentações semelhantes


Apresentação em tema: "Ronaldo Celso Messias Correia Java Media Framework JMF."— Transcrição da apresentação:

1 Ronaldo Celso Messias Correia Java Media Framework JMF

2 Introdução às comunicações multimídia As comunicações multimídia em tempo real correspondem àquelas onde há a transmissão de mídias numa rede de comunicação, com forte restrição de atraso na recepção de dados Aplicações: Áudio e videoconferências Telemedicina Telefonia IP Rádios Web Ensino à distância Características que devem ser consideradas: Atraso Jitter (variação do atraso) Consumo de banda

3 JMF API que permite a manipulação de áudio, vídeo e outras mídias em aplicações Java como applications e applets Captura stream de áudio e vídeo e codifica em diversos formatos A transmissão das mídias são realizadas pelo padrão RTP (Real time Transport Protocol) para o desenvolvimento de aplicações que utilizem vídeo sob demanda. Para utilizar os pacotes da JMF é necessário a instalação e configuração da API A Versão da JMF suporta vários padrões de áudio e vídeos

4 JMF Versão Suporta vários padrões de áudio Áudio AIFF Sun Audio (extensão au) AVI GSM MIDI MP2 MP3 (apenas em plataformas Windows) QT (extensão mov) RMF WAV Suporta vários padrões de vídeos AVI MPEG-1 QT H.261 H.263

5 Ferramentas do JMF JMStudio Realiza testes com as mídias suportadas pela API

6 Ferramentas do JMF JMF Registry Dispositivos de áudio e vídeo só ficam disponíveis para a JMF se estiverem devidamente registrados neste software

7 Exemplo 1: Lê um arquivo de áudio e reproduz o conteúdo // pacotes da API JMF import javax.media.*; import java.io.*; import javax.swing.*; public class TocarAudio { Player audioPlayer = null; public TocarAudio (File arquivo){ try { audioPlayer = Manager.createRealizedPlayer(arquivo.toURI().toURL()); } catch (Exception exc) { System.err.println (exc.toString()); } static public void main (String args[]) { String entrada = JOptionPane.showInputDialog(null, "Digite o nome do arquivo."); File arquivo = new File(entrada); TocarAudio tocar = new TocarAudio(arquivo); tocar.play(); } public void play() { audioPlayer.start(); } public void stop() { audioPlayer.stop(); audioPlayer.close(); }

8 Exemplo 2: Player que reproduz um arquivo de vídeo // pacotes da API JMF import java.awt.*; import java.io.*; import java.net.*; import javax.media.*; import javax.swing.*; public class TocarVideo extends JFrame { Container conteudo; public TocarVideo(URL localizacao) { super ("Player de Vídeo"); conteudo = getContentPane(); try { Player player = Manager.createRealizedPlayer(localizacao); // retorna um objeto Component referente à área onde o vídeo será reproduzido Component video = player.getVisualComponent(); // retorna uma objeto Component relacionado aos controles da reprodução de vídeo Component controles = player.getControlPanelComponent(); if (video != null) conteudo.add (video, BorderLayout.CENTER ); if (controles != null)conteudo.add (controles, BorderLayout.SOUTH ); player.start(); setSize (350, 350); setVisible(true); } catch (Exception exc) {System.err.println(exc.getMessage()); } }

9 Exemplo 2: Player que reproduz um arquivo de vídeo public static void main (String media[]) { JFileChooser chooser = new JFileChooser(); int retorno = chooser.showOpenDialog (null); URL url = null; try { // cria uma janela que exibe a estrutura de diretório loca para escolha de arquivo if (retorno == JFileChooser.APPROVE_OPTION) { url = chooser.getSelectedFile().toURI().toURL(); if (url != null) new TocarVideo(url); else System.out.println ("Programa encerrado."); } catch (Exception exc) { System.out.println ("Arquivo não pôde ser aberto ou é inválido."); } }

10 JMF em Tempo Real Para transmitir áudio e vídeo tem tempo real utilizando a API JMF três etapas precisam ser seguidas Captura de mídia (Classe DataSource) Representa uma fonte de mídia, que pode ser um arquivo ou um periférico especializado, como um microfone ou uma cãmera A classe MediaLocator pode ser utilizada para indicar a localização de um arquivo Processamento A fonte de dados disponibilizada por um objeto DataSource deve ser processada por um objeto da classe Processor que define os formatos de codificação das mídias e encapsulamento RTP. A saída do processamento (objeto DataSource) representa a mídia já codificada e pronta para ser transmitida Envio dos pacotes (transmissão) Classe DataSink: o método estático createDataSink da classe Manager retorna um objeto DataSink, e a ele são associados um objeto DataSource e um endereço para onde os pacotes RTP devem ser enviados

11 Exemplo 3: Envia pacotes de áudio em tempo real // pacotes da API JMF import javax.media.*; import javax.media.control.*; import javax.media.format.*; import javax.media.protocol.*; public class EmissorRTPAudioArquivo { public static void main(String[] args){ try { // informa o arquivo de áudio que será fontes para pacotes RTP String arquivo = "file:audio.mp3"; MediaLocator localizacao = null; DataSource dataSource = null; Processor processor = null; // cria um objeto MediaLocator que representa o aquivo audio.mp3 localizacao = new MediaLocator (arquivo); // cria um objeto DataSource referente ao arquivo dataSource = Manager.createDataSource(localizacao); // cria um objeto Processor processor = Manager.createProcessor(dataSource); // é iniciada a configuração do objeto Processor processor.configure(); while (processor.getState() != Processor.Configured){ Thread.sleep(100);}

12 Exemplo 3: Envia pacotes de áudio em tempo real // estabelece o tipo do conteúdo processado (Quatro constantes da classe ContentDescriptor estão disponíveis: (RAW, RAW_RTP – estão relacionados á forma de utilização de buffers), (MIXED – corresponde às mídias misturadas, de mais de um DataSource), CONTENT_UNKNOWN – refere-se a conteúdo desconhecido) processor.setContentDescriptor(new ContentDescriptor (ContentDescriptor.RAW)); // Retorna um array do tipo TrackControl, que tem a indicação de mídias(trilhas) presente na fonte TrackControl track[] = processor.getTrackControls(); // estabelece que a mídia do arquivo será codificada em MPEG_RTP track[0].setFormat(new AudioFormat(AudioFormat.MPEG_RTP)); processor.realize(); while (processor.getState() != Processor.Realized) { Thread.sleep(100); } // dados já processados DataSource sourceFinal = processor.getDataOutput(); // endereço e porta para onde o fluxo de áudio será enviado String url = "rtp:// :5530/audio"; MediaLocator destino = new MediaLocator(url); // DataSink é utilizado para transmitir o áudio já processado e configurado DataSink sink = Manager.createDataSink(sourceFinal, destino);

13 Exemplo 3: Envia pacotes de áudio em tempo real // Inicia a transmissão sink.open(); sink.start(); processor.start(); } catch (Exception exc) { System.err.println (exc.toString()); System.exit(1); } A classe DataSink oferece uma forma simples de enviar pacotes RTP para um destino, unicast ou multicast. Apenas uma mídia da fonte é enviada a partir desse objeto.

14 Exemplo 4: Recebe o fluxo RTP enviado // pacotes da API JMF import javax.media.Manager; import javax.media.MediaLocator; import javax.media.Player; public class ReceptorRTPAudioArquivo { public static void main(String[] args) { try { // endereço RTP para onde os pacotes foram enviados String url= "rtp:// :5530/audio"; MediaLocator localizacao = new MediaLocator(url); // cria um objeto Player recebendo como parâmetro um objeto MediaLocator Player player = Manager.createPlayer(localizacao); player.realize(); while (player.getState() != Player.Realized){ Thread.sleep(50); } // é iniciada a reprodução do áudio recebido player.start(); } catch (Exception exc) { System.err.println(exc.toString()); System.exit(1); } System.out.println("saiu receptor"); }}

15 Exemplo 5: Emissor de pacotes RTP com multicast // pacotes da API JMF import java.util.Vector; import javax.media.*; import javax.media.control.*; import javax.media.format.*; import javax.media.protocol.*; public class EmissorRTPAudioMulticast { public static void main(String[] args) { try { // objeto AudioFormat é criado (fonte de áudio, amostragem de voz utilizando PCM – frequencia de 8000hz com 8 bits por amostragem) AudioFormat format = new AudioFormat(AudioFormat.LINEAR, 8000, 8, 1); // retorna um vetor contendo os dispositivos que utilizam dados seguindo a formatação passada Vector dispositivos = CaptureDeviceManager.getDeviceList(format); CaptureDeviceInfo info = null; if (dispositivos.size() > 0) // conversão explicita entre o tipo do elemento (único) e a classe CaptureDeviceInfo info = (CaptureDeviceInfo)dispositivos.elementAt (0); Processor processor = null; processor = Manager.createProcessor(info.getLocator()); processor.configure(); while (processor.getState() != Processor.Configured) { Thread.sleep(100);}

16 Exemplo 5: Emissor de pacotes RTP com multicast TrackControl track[] = processor.getTrackControls(); track[0].setFormat( new AudioFormat(AudioFormat.GSM_RTP, 8000, 8,1)); processor.realize(); while (processor.getState() != Processor.Realized) { Thread.sleep(100); } DataSource sourceFinal = processor.getDataOutput(); // especificação de um endereço multicast na string url String url = "rtp:// :55885/audio"; MediaLocator destino = new MediaLocator(url); DataSink sink = Manager.createDataSink(sourceFinal, destino); sink.open(); sink.start(); processor.start(); } catch (Exception exc) { System.err.println (exc.toString()); System.exit(1); }


Carregar ppt "Ronaldo Celso Messias Correia Java Media Framework JMF."

Apresentações semelhantes


Anúncios Google