日期:2014-05-20  浏览次数:20745 次

求教一个关于jmf的DataSource类的问题
public class TestCapture {
public void capture() {
Vector v = CaptureDeviceManager.getDeviceList();
Iterator it = v.listIterator();
CaptureDeviceInfo cdi = null;
MediaLocator ml = null;
Player p = null;
while(it.hasNext()) {
cdi = (CaptureDeviceInfo)it.next();
if(cdi.getName().startsWith("vfw:")) {
ml = cdi.getLocator();
try {
DataSource ds = Manager.createDataSource(ml);//这里出错
try {
p = Manager.createPlayer(ds);
JFrame jf = new JFrame();
jf.add(p.getVisualComponent());
jf.setVisible(true);
} catch (NoPlayerException e) {
e.printStackTrace();
}
p.start();
} catch (NoDataSourceException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String args[]) {
new TestCapture().capture();
}
}

代码如上,报了下面的错:

java.io.IOException: Could not connect to capture device
javax.media.NoDataSourceException: Error instantiating class: com.sun.media.protocol.vfw.DataSource : java.io.IOException: Could not connect to capture device
at javax.media.Manager.createDataSource(Manager.java:1012)
at TestCapture.capture(TestCapture.java:29)
at TestCapture.main(TestCapture.java:63)

相关的包都已经引进,局部变量Player p 用Manager.createPalyer(ml);创建就完全没问题,能看到图像,但为什么就是创建不了DataSource呢?网上关于jmf的资料少,找了半天都没找到原因,求教高手!!!

------解决方案--------------------
我也遇到同样的问题,能捕获摄像头并显示,但想要得到DataSource就出错,暂时也未找到解决办法
java.io.IOException: Could not connect to capture device
java.io.IOException: Capture device in use
javax.media.NoDataSourceException: Error instantiating class: com.sun.media.protocol.vfw.DataSource : java.io.IOException: Capture device in use
at javax.media.Manager.createDataSource(Manager.java:1012)
at com.media.Client.<init>(Client.java:69)
at com.media.Client.main(Client.java:124)

------解决方案--------------------
我在windowsXP系统下面不会出现上述异常,这个异常是在win7下才会出现,由此猜测可能是不支持最新的USBVideo驱动