使用JMF从网络摄像头拍摄快照

时间:2012-05-16 04:28:45

标签: java jmf

我想通过java从网络摄像头拍摄快照。我跟着this question来到了example。但是有一个空指针异常来自下面的行 -

Buffer buf = frameGrabber.grabFrame();
Image img = (new BufferToImage((VideoFormat) buf.getFormat())
                .createImage(buf));
        buffImg = new BufferedImage(img.getWidth(this), img.getHeight(this),
                BufferedImage.TYPE_INT_RGB);

通过调试器,我发现缓冲区实际上并不包含数据。所以我去创建了frameGrabber。

frameGrabber = (FrameGrabbingControl) player
                .getControl("javax.media.control.FrameGrabbingControl");

此代码是否存在问题。因为JMFStudio在我的机器上工作正常,但代码无法访问它。谢谢。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。 JMF需要时间进行初始化。在示例中,我们必须切换一条线。把

new Timer(3000, this).start();
在try catch下方

整个区块如下所示。

        try {
            player = Manager.createRealizedPlayer(cdi.getLocator());
            player.start();
        } catch (NoPlayerException e) {
            e.printStackTrace();
        } catch (CannotRealizeException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
            new Timer(3000, this).start();
        // Grab a frame from the capture device
        frameGrabber = (FrameGrabbingControl) player
                .getControl("javax.media.control.FrameGrabbingControl");