我必须制作 2 applet ,它将在TOMCAT服务器上运行,当我在客户端访问网页[HTML页面]时,我有 2个摄像头附加到客户端PC ,我想在客户端同时的 2个网页上显示两个摄像头的视频。
我尝试过使用JMF。出局是
在大多数机器中,它不能同时用于两台相机。它适用于一次捕获一个摄像头
它适用于某些机器,但每次打开网页时都必须选择相机。选择第一个小程序的摄像头1和第二个小程序的摄像头2。
有没有JMF的方式我可以在一台客户端PC上打开2个网页,在远程服务器上运行相同的2个小程序,并在每个页面上显示每个USBCAM的视频?
我在与JMF合作时使用过这个。
private void StartStreaming()
{
String mediaFile = "vfw:Micrsoft WDM Image Capture (Win32):0";
try
{
MediaLocator mlr = new MediaLocator(mediaFile);
_player = Manager.createRealizedPlayer(mlr);
if (_player.getVisualComponent() != null)
{
setSize(480, 320);
jpnVideoStream.add("South", _player.getVisualComponent());
}
}
catch (Exception e)
{
System.err.println("Got exception " + e);
}
_player.start();
}
这是我的两个小程序中的内容。但正如我所说,大部分时间,它启动一个CAM,然后让设备正在使用,无法捕获消息。
请建议任何解决方案。
答案 0 :(得分:1)
问题是您尝试在两个小程序中使用相同的网络摄像头。
改为使用:
String mediaFile = "webcam 1" in applet 1
String mediaFile = "webcam 2" in applet 2
您的第一个网络摄像头是:vfw:Micrsoft WDM图像捕获(Win32):0
您可以通过以下方式检查您的第二个网络摄像头:使用JMStudio。 选择File-> Preferences-> Capture Devices,然后单击Detect Capture devices。
这也可以使用代码完成,但上面的代码更简单。我仍然列出代码:
Vector list = CaptureDeviceManager.getDeviceList(null);
int i;
CaptureDeviceInfo tempDevice;
// List all the devices ...
if( list!=null) {
if( list.size() == 0)
{
System.out.println("the device list is zero : ");
System.exit(1);
}
System.out.println("The devices are : ");
for( i=0;i< list.size() ;i++ ) {
tempDevice = (CaptureDeviceInfo) list.elementAt(i);
System.out.println(tempDevice.getName());
}
}
注意:如果代码有效,请尝试以管理员身份运行代码。
答案 1 :(得分:0)
如果我没记错,那么在你的代码(JMF实现)中,应该有一个列表/数组设备(资源)java试图从中读取数据(网络摄像头流)。我的猜测是,您需要以如下方式更改代码:如果资源1正忙,则尝试从资源2读取。从本质上讲,您将遍历整个资源列表,尝试阅读您可以使用的任何内容。
希望有所帮助。
答案 2 :(得分:0)
它可能适用于JavaCV http://code.google.com/p/javacv/