此日志完全是个人理解,若有不正确之处,请指正!!!
几个重要的类:
CaptureDeviceManager:也是一个manager类,它提供给了一个列表,这个列表显示当前系统可以被使用的设备名称。
CaptureDeviceInfo: 同时CaptureDeviceManager可以通过查询的方法对设备进行定位并返回设备的配置信息对象 CaptureDeviceInfo,它也可以通过注册的方法向列表加入一个新的设备信息,以便为JMF使用。
MediaLocator:设备可通过CaptureDeviceManager的getDevice()方法直接获得设备控制权,设备的控制权一旦得到,就可以以此设备作为一个MediaLocator,可以通过CaptureDeviceInfo的getLocator()方法得到。
捕获媒体数据的步骤:
1、查询CaptureDeviceManager,来定位你需要使用的媒体采集设备。
2、得到此设备的CaptureDeviceInfo实例。
3、从此CaptureDeviceInfo实例获得一个MediaLocator,并通过它来创建一个DataSource。
AudioFormat type = new AudioFormat(AudioFormat.LINEAR); //音频编码格式
Vector deviceList = CaptureDeviceManager.getDeviceList(type);
if(deviceList.size() > 0){
CaptureDeviceInfo capturedeviceinfo = (CpatrueDeviceInfo)deviceList.firstElement();//任取一个设备即可
MediaLocator medialocator = captruedeviceinfo.getLocator();
}else{
System.out.println("找不到音频采集设备");
}
4、用此MediaLocator创建一个Player或Processor。
Processor process = Manager.createProcessor(medialocator);
5、启动此Player或Processor开始捕获媒体数据。
在启动Processor之前,需要configure、定义待存储该媒体的内容类型、prefetch、realiz、等几个步骤。
Processor.configure()、
FileTypeDescirptor type = new FileTypeDescriptor(FileTypeDescriptor.WAVE);//当然这里也可以选择别的编码格式
processor.prefetch()、
processor.realiz()、
在处理器进入realizing状态之前,具有两个附加的准备状态:confiigaring和configured。
当配置被调用时,处理器进入configuring状态,进行与DataSource联络、去多路化和识别输入数据格式的操作。
当与DataSource的相连接并识别出数据格式后,出路器进入configured状态。
当Realized被调用后,处理器进入realized状态。
此时处理器完全创建完毕了。
DataSource source = audioprocessor.getDataOutput();
datasink = Manager.createDataSink(source, dest);//创建一个数据池
datasink.start();
state.playToEndOfMedia(100);//开始捕获媒体数据
state.close();//关闭Player
datasink.close();//关闭datasink
到此,音频捕获成功,并保存到本工程的一个目录中。
发现问题:
1、 保存的的文件几分钟的音频就有二十多兆,在保存音频时是否需要压缩!!!???
2、捕获的音频文件中,杂音太大。这个问题不知道怎么解决???