Pessoal, estou recebendo erro neste código :
enviando = (PushBufferDataSource) processador.getDataOutput();
enviando é um PushBufferDataSource e processador é um Processor. Já vi este código em alguns exemplos pela internet , mas comigo estou recebendo :
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: com.sun.med
ia.multiplexer.BasicMux$BasicMuxDataSource cannot be cast to javax.media.protoco
l.PushBufferDataSource
O que fiz de errado ?
O código por inteiro segue abaixo:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.net.*;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.format.*;
import javax.media.control.*;
import javax.media.rtp.*;
import javax.media.rtp.event.*;
public class CapturaSom3 extends JFrame implements ActionListener {
private JPanel painel = new JPanel();
private JPanel botoes = new JPanel();
private JButton gravar = new JButton("Gravar");
private JButton parar = new JButton("Finalizar");
private DataSink entrada = null;
private Processor processador, processador1;
private DataSource voz, arquivo;
private PushBufferDataSource enviando;
private DataSource devices = null;
private Format formato[],formatos[];
private FormatControl controle[] = null;
private AudioFormat foratoAudio = null;
private CaptureDeviceInfo informacoes = null;
private Component componente = null;
private MediaLocator local = null;
private MonitorControl monitor = null;
private FileTypeDescriptor tipoArquivo = null;
private Vector dispositivos = new Vector();
private Date hora = new Date();
private File grava = null;
private RTPManager[] rtpManager = null;
private TrackControl[] trilha = null;
private SendStream enviandoStream = null;
private SessionAddress localAddr, remotoAddr = null;
private String enderecoDest = "127.0.0.1";
private InetAddress endereco = null;
private int porta = 2020;
public CapturaSom3() {
super("Captura Som");
gravar.addActionListener(this);
gravar.setMnemonic('a');
gravar.setToolTipText("Inicia o envio da voz");
parar.addActionListener(this);
parar.setMnemonic('i');
parar.setToolTipText("Finaliza a converça");
botoes.setLayout(new FlowLayout());
botoes.add(gravar); botoes.add(parar);
grava = new File("c:\\arquivo"+hora.getHours()+hora.getMinutes()+".mpeg");
super.add(botoes);
super.setDefaultCloseOperation(EXIT_ON_CLOSE);
super.setVisible(true);
super.pack();
}
public void actionPerformed(ActionEvent ae){
if(ae.getSource().equals(gravar)){
try{
dispositivos = CaptureDeviceManager.getDeviceList(null);
informacoes = (CaptureDeviceInfo) dispositivos.elementAt(1);
formato = informacoes.getFormats();
voz = Manager.createDataSource(informacoes.getLocator());
controle = ((CaptureDevice)voz).getFormatControls();
for(int i = 0; i< controle.length; i++){
controle[i].setFormat(formato[1]);
}
formatos = new Format[1];
formatos[0] = formato[1];
tipoArquivo = new FileTypeDescriptor(FileTypeDescriptor.MPEG_AUDIO);
processador = Manager.createRealizedProcessor(new ProcessorModel(voz, formatos, tipoArquivo));
processador.configure();
arquivo = processador.getDataOutput();
enviando = (PushBufferDataSource) processador.getDataOutput();
if(arquivo != null){
local = new MediaLocator(grava.toURL());
entrada = Manager.createDataSink(arquivo,local);
entrada.open();
entrada.start();
}else{
System.out.println("Arquivo = null");
}
processador.start();
monitor = (MonitorControl) processador.getControl("javax.media.control.MonitorControl");
componente = monitor.getControlComponent();
int x = 0;
while(x < 200){
x++;
System.out.println(x);
if(x == 199){
envia();
}
}
}catch(NoDataSourceException ndse){
System.err.println("Probrlmas no DataSource: "+ndse.getMessage());
}catch(IOException ioe){
System.err.println("Problema de entrada e saida: "+ioe.getMessage());
}catch(CannotRealizeException cre){
System.err.println("Problemas na realização do processo: "+cre.getMessage());
}catch(NoProcessorException npe){
System.err.println("Problemas com o processador: "+npe.getMessage());
}catch(NoDataSinkException ndse){
System.err.println("Problemas: "+ndse.getMessage());
}catch(SecurityException se){
System.err.println("Problemas de segurança no DataSink: "+se.getMessage());
}
}
if(ae.getSource().equals(parar)){
parar();
}
}
public void parar()
{
entrada.close();
processador.close();
System.out.println("Parando o Processador.");
}
public void envia(){
try{
processador1 = Manager.createProcessor(local);
processador1.configure();
processador1.setContentDescriptor(new ContentDescriptor(ContentDescriptor.RAW_RTP));
trilha = processador1.getTrackControls();
Format[] formatoRTP = null;
for(int i = 0; i < trilha.length; i++){
if(trilha[i].isEnabled()){
formatoRTP = trilha[i].getSupportedFormats();
if(formatoRTP.length > 0){
for(int j = 0; j < formatoRTP.length; j++){
trilha[i].setFormat(formatoRTP[j]);
}
}else{
System.err.println("Deu mais erro.");
}
}
}
rtpManager = new RTPManager[trilha.length];
//for(int k = 0; k < trilha.length; k++){
rtpManager[0] = RTPManager.newInstance();
//porta += (2*k);
endereco = InetAddress.getByName(enderecoDest);
localAddr = new SessionAddress(endereco.getLocalHost(), porta);
remotoAddr = new SessionAddress(endereco, porta);
rtpManager[0].initialize(localAddr);
rtpManager[0].addTarget(remotoAddr);
enviandoStream = rtpManager[0].createSendStream(enviando,1);
enviandoStream.start();
System.out.println("ENVIANDO");
//}
processador1.realize();
//enviando = processador1.getDataOutput();
if(enviando == null){
System.err.println("Erro, Erro, Erro... :'(");
}
}catch(NoProcessorException npe){
System.err.println("Erro no Processor; "+npe.getMessage());
}catch(UnknownHostException ukhe){
System.err.println("Erro na resoluçao de nome; "+ukhe.getMessage());
}catch(InvalidSessionAddressException isae){
System.err.println("Erro no initialize; "+isae.getMessage());
}catch(UnsupportedFormatException usfe){
System.err.println("Formato não suportado; "+usfe.getMessage());
}catch(IOException ioe){
System.err.println("erro de I/O; "+ioe.getMessage());
}
}
public static void main(String[] args) {
new CapturaSom3();
}
}