Webcam cannot find a Player for :vfw://0

杀马特。学长 韩版系。学妹 提交于 2019-12-25 11:11:34

问题


I'm tryin to take a picture in my webcam, I'm just starting to use JMF I just need to take a picture with a webcam and save it to a specified directory I'm using this code

import java.awt.Component;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Processor;
import javax.media.protocol.FileTypeDescriptor;
import javax.swing.JFrame;
import javax.swing.JLabel;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author victor
 */
public class WebCam {
public static void main(String[] args) {
// TODO Auto-generated method stu
    otro perro=new otro();
    perro.show();
    perro.proceso();
}
}
class otro extends JFrame{
JLabel Imagen;
otro(){
    Imagen=new JLabel();
    Imagen.setBounds(30,40,20,20);
    add(Imagen);
    setBounds(400,400,400,400);
    setLayout( null ); // use a BorderLayou  
    setTitle("Prueba de Camara Web");
}
public void proceso(){
        Manager.setHint( Manager.LIGHTWEIGHT_RENDERER, true );
    try{
        MediaLocator ml = new MediaLocator("vfw://0");
        Player p = (Player) Manager.createRealizedPlayer(ml);

        Component video = p.getVisualComponent();

        video.setBounds(20,30,600,600);
        if ( video != null ){
            // agragar el video al componente
            add( video);
        }


        p.start();
    }catch(Exception e){
        e.printStackTrace();
    }
}
}

When running the above, getting the following exception:

javax.media.NoPlayerException: Cannot find a Player for :vfw://0
at javax.media.Manager.createPlayerForContent(Manager.java:1412)
at javax.media.Manager.createPlayer(Manager.java:417)
at javax.media.Manager.createRealizedPlayer(Manager.java:553)
at otro.proceso(WebCam.java:41)
at WebCam.main(WebCam.java:24)

回答1:


try with this

    package javasewebcam;

    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.image.BufferedImage;
    import java.io.File;

    import javax.imageio.ImageIO;
    import javax.media.Buffer;
    import javax.media.Manager;
    import javax.media.MediaLocator;
    import javax.media.Player;
    import javax.media.control.FrameGrabbingControl;
    import javax.media.format.VideoFormat;
    import javax.media.util.BufferToImage;

    public class CaptureScreenshot
    {
    private static Player player = null;
    private static Image image = null;

    public static void main(String[] args)
    {
        try
        {
            MediaLocator ml = new MediaLocator("vfw://0");
            player = Manager.createRealizedPlayer(ml);
            player.start();
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            System.exit(0);
        }

        while (image == null)
        {
            FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl("javax.media.control.FrameGrabbingControl");
            Buffer buf = fgc.grabFrame();

            BufferToImage bi = new BufferToImage((VideoFormat) buf.getFormat());
            image = bi.createImage(buf);

                        System.out.println("image"+image);
                        if(image!=null)
                        //(toBufferedImage(image));
//save image in here 
                        image=null;
                        System.out.println("streaming");
        }

        try
        {
            ImageIO.write(toBufferedImage(image), "png", new File("screenshot.png"));
            System.out.println("Image Saved!");
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            System.exit(0);
        }

        player.close();
        player.deallocate();
    }


    public static BufferedImage toBufferedImage(Image i)
    {
        BufferedImage bi = new BufferedImage(i.getWidth(null), i.getHeight(null), BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = bi.createGraphics();
        g2d.drawImage(i, 0, 0, null);

        return bi;
    }

    }


来源:https://stackoverflow.com/questions/17171651/webcam-cannot-find-a-player-for-vfw-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!