Meu negocio é o seguinte, estou criando uma aplicação android para se comunicar com um pc para realizar stream
ao vivo de audio e vídeo (a tela do pc no smartphone) atraves de bluetooth (btspp). O programa funciona legal, porém o problema
é que a taxa de escrita do pc para o celular é muito lenta, ~14 kb/s o que faz sempre travar e bufferizar, e travar e bufferizar…
Mas o mistério é que o problema não é no dispositivo Bluetooth que eu uso, pois quando eu envio um arquivo normalmente pelo
windows clicando lá na bandeja e “enviar arquivo” a transferencia é mto rápida ~1MB/s.
Eu já pesquisei bastante, inclusive o tutorial no android developers sobre BT e está igual lá.
Ah, estou usando a biblioteca BlueCove 2.1 no aplicativo desktop.
vejam como está minha thread de envio por bluetooth no lado do servidor (pc),
mto simples, leio de um arquivo de audio e envio. (nessa versao to só testando o envio de um arquivo mp3 mesmo)
[b]int numBytes;
byte[] bufferDisco = new byte[262144]; //(256kb de leitura por vez do hd)
while(true) {
numBytes = inputStreamArquivoAudio.read(bufferDisco);
if (numBytes != -1) {
outputStream.write(bufferDisco,0,numBytes); //aqui eu escrevo os bytes lidos do disco no outputStream da conexao bluetooth
}
else {
break;
}
}[/b]
no lado do cliente (android) é mais simples ainda:
byte[] bufferLeitura = new byte[4096]; //nao importa o tamanho, sempre só chega 1006 bytes
while (true) {
numBytes = inputStreamBluetooth.read(bufferLeitura);
//faz qualquer coisa
}
pessoal, no grosso é isso aí.
Ah, outra coisa, eu vejo que do outro lado (do android) sempre chega 1006 bytes por vez, sempre,
não importa o tamanho do buffer de leitura lá. A taxa fica muito lenta.
Isso tem a ver com MTU? eu li um pouco mas nao consegui alterar isso com bluecove.
Já parasse para pensar que você está falando de SO distintos, e consequentemente HARDWARES totalmente diferentes? Eles podem ter taxa de transferência distintas…
‘Windows x Android’
Da uma pensada melhor… E pesquisa sobre o que eu falei.
Provavelmente está sendo usado um pefril diferente - como você deve saber, existe a especificação Bluetooth 2.0 EDR, o perfil 3.0 etc.
Na transferência de arquivos, normalmente se usa o perfil “File Transfer Profile” (OBEX FTP) ou o Object Push Profile (OPP). Nessa aplicação que você desenvolveu, parece estar sendo usado o perfil PAN (Personal Area Networking Profile) . Não sei se há taxas diferentes para perfis diferentes.
[quote=felipebonezi]Já parasse para pensar que você está falando de SO distintos, e consequentemente HARDWARES totalmente diferentes? Eles podem ter taxa de transferência distintas…
‘Windows x Android’
Da uma pensada melhor… E pesquisa sobre o que eu falei.
Abraço.[/quote]
Neste caso acredito que não seja isso porque como eu disse lá em cima, quando eu envio um arquivo pelo windows nativamente ou então
envio pelo celular com o app “medieval bluetooth file transfer”, a taxa é por volta de 1 MB/s. Obrigado por responder!
[quote=entanglement]Provavelmente está sendo usado um pefril diferente - como você deve saber, existe a especificação Bluetooth 2.0 EDR, o perfil 3.0 etc.
Na transferência de arquivos, normalmente se usa o perfil “File Transfer Profile” (OBEX FTP) ou o Object Push Profile (OPP). Nessa aplicação que você desenvolveu, parece estar sendo usado o perfil PAN (Personal Area Networking Profile) . Não sei se há taxas diferentes para perfis diferentes.
Hm cara, valeu a dica, eu pesquisei agora sobre bluetooth profiles, no meu caso eu estava usando o SPP, mas pelo visto eu configuro o profile apenas do lado do
servidor (pc) porque pelo android nao tem como…(aliás, eu acredito que isto de fato tenha que ser feito do lado do servidor).
Pode ser que o perfil realmente influencie na taxa porque na descrição de varios perfis eles falam “ideal para pequenos arquivos”…etc.
Eu estou vendo como fazer OBEX FTP ou OPP com bluecove, vamos ver se vai dar certo.
Obrigado pela resposta!