Eu estou desenvolvendo um player e ele continua rodando mesmo depois de fechada
por favor me ajudem, como faço pra descobrir quando o usuario saiu da pagina???
Como é que ele continua tocando? Quando o usuário fecha a página não fecha também o player não?
pior que não… sempre trabalhei com projetos desktop e recentemente to trabalhando com projetos web, tem alguma regra pra se trabalhar com isso ???
A questão é, como é que ele não fecha?
Se o usuário fecha a página o player não deveria fechar automaticamente? Como é que você fez esse player?
Eu fiz um player simples da um olhada
public class TESTE {
public void testPlay(String filename) {
try {
File file = new File(filename);
AudioInputStream in = AudioSystem.getAudioInputStream(file);
System.out.println(file.getName());
AudioInputStream din = null;
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(), 16, baseFormat.getChannels(),
baseFormat.getChannels() * 2, baseFormat.getSampleRate(),
false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
// Play now.
rawplay(decodedFormat, din);
in.close();
} catch (Exception e) {
//Handle exception.
}
}
private void rawplay(AudioFormat targetFormat, AudioInputStream din)
throws IOException, LineUnavailableException {
byte[] data = new byte[4096];
SourceDataLine line = getLine(targetFormat);
if (line != null) {
// Start
line.start();
int nBytesRead = 0, nBytesWritten = 0;
while (nBytesRead != -1) {
nBytesRead = din.read(data, 0, data.length);
if (nBytesRead != -1)
nBytesWritten = line.write(data, 0, nBytesRead);
}
// Stop
line.drain();
line.stop();
line.close();
din.close();
}
}
private SourceDataLine getLine(AudioFormat audioFormat)
throws LineUnavailableException {
SourceDataLine res = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class,
audioFormat);
res = (SourceDataLine) AudioSystem.getLine(info);
res.open(audioFormat);
return res;
}
}
essa é minha pagina jsp
<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>
<%@ taglib prefix=“f” uri=“http://java.sun.com/jsf/core”%>
<%@ taglib prefix=“h” uri=“http://java.sun.com/jsf/html”%>
<%@ taglib prefix=“rich” uri=“http://richfaces.org/rich”%>
<%@ taglib prefix=“a4j” uri=“http://richfaces.org/a4j”%>
[code]public class TESTE {
public void testPlay(String filename) {
try {
File file = new File(filename);
AudioInputStream in = AudioSystem.getAudioInputStream(file);
System.out.println(file.getName());
AudioInputStream din = null;
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(), 16, baseFormat.getChannels(),
baseFormat.getChannels() * 2, baseFormat.getSampleRate(),
false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
// Play now.
rawplay(decodedFormat, din);
in.close();
} catch (Exception e) {
//Handle exception.
}
}
private void rawplay(AudioFormat targetFormat, AudioInputStream din)
throws IOException, LineUnavailableException {
byte[] data = new byte[4096];
SourceDataLine line = getLine(targetFormat);
if (line != null) {
// Start
line.start();
int nBytesRead = 0, nBytesWritten = 0;
while (nBytesRead != -1) {
nBytesRead = din.read(data, 0, data.length);
if (nBytesRead != -1)
nBytesWritten = line.write(data, 0, nBytesRead);
}
// Stop
line.drain();
line.stop();
line.close();
din.close();
}
}
private SourceDataLine getLine(AudioFormat audioFormat)
throws LineUnavailableException {
SourceDataLine res = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class,
audioFormat);
res = (SourceDataLine) AudioSystem.getLine(info);
res.open(audioFormat);
return res;
}
}[/code]
essa é minha pagina jsp
[code]<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>
<%@ taglib prefix=“f” uri=“http://java.sun.com/jsf/core”%>
<%@ taglib prefix=“h” uri=“http://java.sun.com/jsf/html”%>
<%@ taglib prefix=“rich” uri=“http://richfaces.org/rich”%>
<%@ taglib prefix=“a4j” uri=“http://richfaces.org/a4j”%>
Não faltou você postar nada ai não? não encontrei o método ‘play’ na classe TESTE que você postou! de qualquer maneira, você manda executar o player, ele roda na máquina servidor, que no caso é a sua máquina (acredito eu), enquanto o processo estiver lá… vai continuar tocando mesmo. faz um teste simples, manda tocar, fecha a página e manda parar o seu container.
desculpa a pagina tá asssim…
você ta falando de parar o servidor?
se for isso o player para normalmente
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
public class Player {
public void play() {
try {
File file = new File("Teste.wav");
if (!file.isFile()) {
}
AudioInputStream in = AudioSystem.getAudioInputStream(file);
AudioInputStream din = null;
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
baseFormat.getSampleRate(), 16, baseFormat.getChannels(),
baseFormat.getChannels() * 2, baseFormat.getSampleRate(),
false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
rawplay(decodedFormat, din);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private void rawplay(AudioFormat targetFormat, AudioInputStream din)
throws IOException, LineUnavailableException {
byte[] data = new byte[4096];
SourceDataLine line = getLine(targetFormat);
if (line != null) {
// Start
line.start();
int nBytesRead = 0, nBytesWritten = 0;
while (nBytesRead != -1) {
nBytesRead = din.read(data, 0, data.length);
if (nBytesRead != -1)
nBytesWritten = line.write(data, 0, nBytesRead);
}
// Stop
line.drain();
line.stop();
line.close();
din.close();
}
}
private SourceDataLine getLine(AudioFormat audioFormat)
throws LineUnavailableException {
SourceDataLine res = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class,
audioFormat);
res = (SourceDataLine) AudioSystem.getLine(info);
res.open(audioFormat);
return res;
}
}
O player esta rodando em um servlet correto?
Você pode por um script no seu documento jsp para que quando ele feche a janela seja feita uma request usando ajax que faça o player desligar.
Então está funcionando corretamente não? é a mesma coisa que você clicar em um botão na sua página e no Managed Bean você dar um JOptionPane.showMessageDialog(null,“OLA”); resultado? vai aparecer para você a mensagem ainda que você feche o browser a caixa com a mensagem vai continuar lá, apenas para saber… você sabe que isso só está acontecendo porque você está na máquina que está como servidor certo?
O Fábio Kung relatou que certa vez trabalhou com um cara que fez isso que eu disse (do JOptionPane) e achou que tinha revolucionado os sistemas web… ele só não se atentou ao simples detalhe que o container estava na máquina dele, adivinha o que aconteceu quando ele subiu a aplicação na máquina de produção??? (maiores detalhes sobre essa história com o Fábio Kung, rsrs)
eu não me toquei nessa parte,
no cliente não ta rodando o player, quando o cliente aperta no play toca no lado do servidor