Bluetooth e MMAPI para a transmissão e manipulação de vídeo em dispositivos móveis Daniel...

Post on 22-Apr-2015

104 views 1 download

Transcript of Bluetooth e MMAPI para a transmissão e manipulação de vídeo em dispositivos móveis Daniel...

Bluetooth e MMAPI para a transmissão e manipulação de vídeo em dispositivos móveis

Daniel Welferwelfer@gmail.com

Sumário

Java Bluetooth API - JSR-82 Mobile Media API - JSR-135 Aplicação Referências

Bluetooth - Origem

Tecnologia criada pelos engenheiros Sven Mattisson e Jaap Haartsen da fabricante de telefones Ericsson Mobile Communications da Suécia;

Bluetooth - Origem Projeto era desenvolver uma interface de

comunicação entre telefones móveis e seus acessórios. Descobriram que usando uma frequência de rádio era possível alcançar isso com baixo consumo de energia e baixo custo.

Opera em uma frequência de radio baixa e que não requer licença. Então, sem custo; 1Mbps; alcance de cerca de 10 metros. Consome 500 X menos energia que o padrão IEEE 802.11x;

Era chamada de Multi-Communicator Link (MC Link)

Bluetooth - Origem

Começou sua padronização (1998) pelas empresas: Ericsson, IBM, Intel, Nokia, and Toshiba onde passou a se chamar Bluetooth;

Bluetooth - Origem

Homenagem ao Rei Viking dinamarquês Harald Bluetooth – (911 a 985 A.D.);

O símbolo da tecnologia bluetooth. Em caracteres rúnicosrepresenta um H e um B. Harald Bluetooth – “o unificador”

Bluetooth – Radio Frequência

Java Bluetooth API

Componentes básicos:

• Stack Initialization;

• Device Management;

• Device Discovery;

• Service Discovery;

• Service Registration;

• Communication.

Java Bluetooth API - Device Management

Classes que permitem obter informações estatísticas de dispositivos bluetooth Locais (LocalDevice) e remotos (RemoteDevice).

import javax.bluetooth.LocalDevice;

LocalDevice localDevice = LocalDevice.getLocalDevice();

localDevice.setDiscoverable(DiscoveryAgent.GIAC);

Java Bluetooth API - Device Management

localDevice.setDiscoverable(DiscoveryAgent.GIAC);

Java Bluetooth API - Device Management

System.out.println("local device: " + localDevice.getBluetoothAddress());

System.out.println("friendlyName: " + localDevice.getFriendlyName());

local device: 0000000DECAF

friendlyName: WirelessToolkit

Java Bluetooth API - Device Discovery

Descobrindo dispositivos:

(RemoteDevice, DiscoveryAgent e DiscoveryListener)

DiscoveryAgent discoveryAgent = localDevice.getDiscoveryAgent();

discoveryAgent.startInquiry(DiscoveryAgent.GIAC, this);

Java Bluetooth API - Device Discovery A interface: DiscoveryListener public void deviceDiscovered(RemoteDevice

btDevice, DeviceClass cod) {} Método chamado quando um dispositivo bluetooth é encontrado na

vizinhança;

System.out.println("Remote device Address: " + btDevice.getBluetoothAddress());

System.out.println("Major Device Class: " + cod.getMajorDeviceClass() + " Minor Device Class: " + cod.getMinorDeviceClass());

Java Bluetooth API - Device Discovery

Java Bluetooth API - Device Discovery A interface: DiscoveryListener public void inquiryCompleted(int discType) {}

Método chamado quando a transação da descoberta de um despositivo foi completada;

discType pode ser:INQUIRY_COMPLETEDINQUIRY_ERRORINQUIRY_TERMINATED

Java Bluetooth API - Service Discovery

A interface: DiscoveryListener public void servicesDiscovered(int transID, ServiceRecord[] servRecord) {}

Método chamado quando serviços são encontrados Invocado no método inquiryCompleted: discoveryAgent.searchServices(attrSet, uuid,

remoteDevice[0], this);

• int[] attrSet = {0x0100};

• UUID RFCOMM_UUID = new UUID(0x0003);

• uuid[0] = RFCOMM_UUID;

Java Bluetooth API - Service Discovery

attrSet é uma entrada em um service records;

SDDB (Service Discovery Database).

DataElement serviceNameElement = servRecord[0].getAttributeValue(0x100);

String serviceName = (String)serviceNameElement.getValue();

UrlServico.addElement(servRecord[i].getConnectionURL(ServiceRecord. NOAUTHENTICATE_NOENCRYPT, true));

http://www.bluetooth.org/assigned-numbers/sdp.htm

Java Bluetooth API - Service Discovery A interface: DiscoveryListener public void serviceSearchCompleted(int transID,

int responseCode) {} Método chamado quando a procura pelo serviço é finalizada; responseCode:

• SERVICE_SEARCH_ERROR

• SERVICE_SEARCH_COMPLETED

• SERVICE_SEARCH_NO_RECORDS

Posso começar a receber dados;

Java Bluetooth API - Service Registration and Communication

O servidor registra o serviço no SDDB;

url = "btspp://localhost:00112233445566778899AABBCCDDEEFF;name=video";

//btspp = Bluetooth Serial Port Profile

StreamConnectionNotifier notifier = (StreamConnectionNotifier) Connector.open(url);

//similar a ServerSocketConnectionnotifier.acceptAndOpen();//espera requisição cliente

Java Bluetooth API - Service Registration and Communication

Protocolos de comunicação Bluetooth:

RFCOMM L2CAP OBEX

hp home
RFCOMM is commonly known as the wireless serial port, or the cable replacement protocol. The name is derived from the fact that your serial ports are called COMM1, COMM2, etc. RFCOMM simulates functionality of a standard serial port. For instance, a Bluetooth-enabled PDA would use the RFCOMMBluetooth for Javalayer to synchronize its data to a Bluetooth-enabled PC as if they were physically connected by a cable.pg 28 pdf

Mobile Media API - JSR-135

import javax.microedition.media.*; Player: interface que lida com o processamento

do dado multimedia. DataSource: classe abstrata para localização e

recuperação do dado multimedia.

Mobile Media API - JSR-135 String arquivo = "file:///root1/" +

this.filenameReceived;

FileConnection fileConnection = (FileConnection) Connector.open(arquivo,

Connector.READ_WRITE);

InputStream inputStream = fileConnection.openInputStream();

Player player = Manager.createPlayer(inputStream, "video/mpeg");

Mobile Media API - LifeCycle

Um player possui 5 diferentes estados: UNREALIZED, REALIZED, PREFETCHED, STARTED, and CLOSED

Síncronos. MediaException

Mobile Media API - LifeCycle

UNREALIZED: recupera informações simples sobre a mídia como o tempo de duração de um video/áudio, tipo de conteúdo…

REALIZED: se existe permissão para acessar o arquivo (i.e. DRM – Digital Rights Management), comunicação com servidor, manipulação de arquivo;

PREFETCHED: decodificação dos dados ;

STARTED: executa a media

CLOSED: encerra a media. Libera os recursos;

Mobile Media API - VideoTrabalhando com Video: VideoControl é uma interface para controlar video.

VideoControl videoControl = (VideoControl) player.getControl( "javax.microedition.media.control.VideoControl");

//renderiza o video diretamente em um canvas

videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO, canvas);

videoControl.setVisible(true);mDisplay.setCurrent(canvas);player.start();

AplicaçãoMostra

Estatísticaslocais

Registra um

Serviço de video

DisponibilizaServiço de

video

Mostra Estatísticas

locais

ProcuraDispositivo/

Serviço

RecebeServiço

Exibevideo

“servidor” /escravorecebe a conexão

“cliente”/mestre(inicia conexão)

AplicaçãoMostra

Estatísticaslocais

ProcuraDispositivo/

Serviço

RecebeServiço

Exibevideo

Filmes angiográficos em

DICOM

Conversão mpeg

Perda de informação

Conclusões

Manipulação de dados multimedia é time consuming;

Alcance do “link” bluetooth pode ser estendido para mais de 10 metros usando bluetooth hotspots;

Tecnologia que pode ser muito mais explorada (ex: jogos multiplayers)

Referências

Bruce Hopkins and Ranjith Antony. Bluetooth for Java. Apress, New York – 2003;

Michael Miller. Discovering Bluetooth. Sybex, CA – 2001;

Sing Li and Jonathan Knudsen. Beginning J2ME: From Novice to Professional, Third Edition, Apress, New York – 2005;

Vikram Goyal. Pro Java ME MMAPI: Mobile Media API for Java Micro Edition. Apress, New York – 2006;