使用 JAVA + Java 小程序从多个 USB 摄像头捕获视频并在 UI 中并排显示

Posted

技术标签:

【中文标题】使用 JAVA + Java 小程序从多个 USB 摄像头捕获视频并在 UI 中并排显示【英文标题】:Capturing video from multiple usb cams and showing in a UI side by side using JAVA + Java applet 【发布时间】:2011-11-16 22:43:22 【问题描述】:

我必须制作 2 个小程序,它们将在类似 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,然后给出设备正在使用中并且无法捕获消息。

请提出任何解决方案。

【问题讨论】:

【参考方案1】:

问题是您试图在两个小程序中使用相同的网络摄像头。

改为使用:

String mediaFile = "webcam 1"  in applet 1
String mediaFile = "webcam 2"  in applet 2

您的第一个网络摄像头是:vfw:Micrsoft WDM Image Capture (Win32):0

您可以使用 JMStudio 检查您的第二个网络摄像头。 选择文件->首选项->捕获设备,然后单击检测捕获设备。

这也可以使用代码来完成,但上面的代码更简单。我仍然在列出代码:

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());   
           
    

注意:如果代码不起作用,请尝试以管理员身份运行代码。

【讨论】:

【参考方案2】:

如果我没记错的话,那么在您的代码(JMF 实现)中,应该有 java 试图从中读取数据(网络摄像头流)的设备(资源)列表/数组。我的猜测是,您需要以这样一种方式更改代码,即如果资源一很忙,则尝试从资源二中读取。从本质上讲,您正在浏览整个资源列表,试图阅读您可以使用的任何内容。

希望对您有所帮助。

【讨论】:

【参考方案3】:

它可能适用于 JavaCV http://code.google.com/p/javacv/

【讨论】:

以上是关于使用 JAVA + Java 小程序从多个 USB 摄像头捕获视频并在 UI 中并排显示的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Java 从 USB 麦克风录制声音

通知多个 Java 小程序/应用程序服务器上发生更改的最佳方法

多个java小程序处理

桌面 java 应用程序通过 USB 复制和传输 android 数据

一个多个数相加的结果的java小程序

如何使用小程序从 Java 中的网络摄像头捕获视频?