大家好:
我在使用jmf播放语音和保存的时候遇到一些问题,播放正常,但是保存数据的时候可以保存文件,但是文件无法播放,是什么原因呢?
代码如下:
// 获取收到的stream
stream = ((NewReceiveStreamEvent) evt).getReceiveStream();
dataSource = stream.getDataSource();
Processor mediaProcessor = Manager.createProcessor(dataSource);
mediaProcessor.configure();
if(!waitForState(mediaProcessor,mediaProcessor.Configured))
System.out.println("config fail");
mediaProcessor.setContentDescriptor(new ContentDescriptor(ContentDescriptor.RAW));
mediaProcessor.realize();
if(!waitForState(mediaProcessor,mediaProcessor.Realized))
System.out.println("realize fail");
mediaProcessor.start();
dataSource = mediaProcessor.getDataOutput();
dataSource = Manager.createCloneableDataSource(dataSource);
DataSource saveDataSource = ((SourceCloneable)dataSource).createClone();

///播放接收到的音频文件
playAudio(dataSource);
//存储音频文件
saveAudioToFile(saveDataSource,nowTime);
private void saveAudioToFile(DataSource ds,String nowTime){
Processor p = null;
String time = nowTime.replace("-", "").replace(":", "").replace(" ", "");
try {
//获得MediaLocator,并由此创建一个Processor。
p = Manager.createRealizedProcessor(new ProcessorModel(ds,null,new
FileTypeDescriptor(FileTypeDescriptor.WAVE)));
} catch (IOException e) {
dm.writeLog(DataManager.ERROR,"ReceiveDataListener.saveAudioToFile:"+e);
} catch (NoProcessorException e) {
dm.writeLog(DataManager.ERROR,"ReceiveDataListener.saveAudioToFile:"+e);
e.printStackTrace();
} catch (CannotRealizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// get the output of the processor
DataSource source = p.getDataOutput();
//定义存储该媒体的文件。
MediaLocator dest = new MediaLocator(new java.lang.String(
"file:///record/"+time+".wav"));
System.out.println("path:"+"file:///record/"+time+".wav");
//创建一个数据池
DataSink filewriter = null;
try{
filewriter = Manager.createDataSink(source, dest);
filewriter.open();
} catch (NoDataSinkException e) {
e.printStackTrace();
System.exit(-1);
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
} catch (SecurityException e) {
e.printStackTrace();
System.exit(-1);
}
// // now start the filewriter and processor
try {
filewriter.start();
                            p.start();
} catch (IOException e) {
e.printStackTrace();
System.exit(-1);
}// Wait for an EndOfStream from the DataSink and close it...
filewriter.close();
}