如何重定向本地的麦克风到远程桌面?
现在我要写一个工具,运行在华硕的上网本上,上网本上跑的是windows server 2003,这个工具运行的时候开启上网本的自带麦克风,监听某个端口,我在另一个计算机上连上去,然后这个工具把从麦克风获取到的音频流传到我的机器上。
目前已实现这部分功能:
1、用户登录的时候自动运行
2、本地运行OK
但是存在这些问题:
1、无法开机运行(就是用户登录前运行,并且只运行一个,不会每个用户登录都运行一次)
2、用远程桌面连接上去运行这个工具的话会找不到录音设备。
我的录音代码如下
package local;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.TargetDataLine;
public class SoundListener implements Runnable{
private Resources resources ;
public SoundListener(Resources resources){
this.resources = resources ;
}
public void listen() {
try {
AudioFormat audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,44100F, 16, 2, 4,44100F, false);//创建音频对象
DataLine.Info info = new DataLine.Info(TargetDataLine.class,
audioFormat);
TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
targetDataLine.open(audioFormat);//打开输入设备
targetDataLine.start();//开始录音
int nByte = 0;
final int bufSize=4*100;
byte[] buffer = new byte[bufSize];
System.out.println("start recording~~");
while (nByte != -1) {
nByte = targetDataLine.read(buffer, 0, bufSize);
resources.write(buffer, 0, nByte) ;//这个是我用来输出的,可以不管
}
System.out.println("stop recording~~~");
// sourceDataLine.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
listen() ;
}
}
然后,本地登录运行是没有问题的,但是远程桌面连上去运行的话就会报出如下异常
java.lang.IllegalArgumentException: No line matching interface TargetDataLine su pporting format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-end ian is supported. at javax.sound.sampled.AudioSystem.getLine(Unknown Source) at local.SoundListener.listen(SoundListener.java:24) at local.SoundListener.run(SoundListener.java:47) at java.lang.Thread.run(Unknown Source)
这似乎是要把这个设备重定向到网络上?我不太清楚,希望有朋友帮忙解惑~~谢谢。
================
可能上面的描述有点不清晰,补充一下,这个工具是一个服务端程序,相应地我写了个客户端程序,它们的工作方式是服务端程序在上网本上获取音频并监听端口,在另外的计算机上用客户端程序连接上该端口,然后开始传输音频流。
用客户端程序连接服务端 与 用远程桌面连接到上网本上是两件事,用远程桌面连接上去做的只是调试服务端程序。