No web cam detected on skype
No web cam detected / connected when using Skype
Hi trenthughes,
If your built-in iSight camera is not being recognized by a third-party application, then I'd like you to please follow the troubleshooting in the article below to help isolate and resolve the issue.
How to Troubleshoot iSight - Apple Support
Have a great weekend,
Alex H.
Similar Messages
-
Can you access a web camera, ichat or Skype through apple tv?
Can you access a web camera, ichat or Skype through apple tv?
http://www.skype.com/intl/en-gb/get-skype/on-your-tv/skype-blu-ray-and-tv/
http://www.skype.com/intl/en-gb/get-skype/on-your-tv/skype-ready-tv/ -
Last one month.. wn i opned youcam.. disply ths msg.. "NO WEB CAM DETECTED. TRY PLUG IN NEW WB CAM.. AND SURE TO ON YOUR INTEGRATED CAM.."" im unble to on during skype n also fb video calling.. what shold i do??
Hello @PARTHA_BISWAS ,
Welcome to the HP Forums!
I understand the computer is not detecting the webcam. I will do my best to assist you, but first I require the following information:
1. The computer's model number. If you require assistance locating this information, please reference this website: Guide to finding your notebook product number
2. The computer's operating system. If you require assistance locating this information, please reference this website to determine your Windows operating system.
3. Does this occur on certain programs, or all programs?
4. Have you installed any new software or drivers on this computer, before the issue appeared?
5. Have you tried another webcam to see if one does work?
Additionally, if the issue just began occurring, I would perform a system restore. I want you to bring the computer back to the earliest restore point possible, in an attempt to dodge whatever caused the issue. Here is a document on how to perform a System Restore: System Restore
Mario
I worked on behalf of HP. -
How to open/access my web cam in windows 8.1 ?? (lenovo yoga 13)
After my upgrade to win 8.1 I can't access my camera , where as in skype its not showing video option ,in youcam its telling no web cam detected. Where as in in build camera apps its tell connect a camera..... In device manager no sign of wrong ?? What can I do ??????????
Additional Details
i am using lenovo yoga 13
my email id ([email protected]) pls reply ....
Solved!
Go to Solution.Check in device manager under imaging device if there is a camera driver.
-
My integrated web cam is not working
I Am using hp pavilion p001tx laptop. My web cam is not working
It shows a warning
No web cam detected. Try to plugging in a webcam into your computer now. If you are using an integrated camera, Make sure that it is turned on.
Help me please.
My laptop serial number is [Personal Information Removed]Check if the drivers are installed or not.
Try to update the camera drivers and restart the system.
You can also go to device manager setting and see if the webcam is disabled or not.
If everything fails try system resore or run OS recovery. -
My web cam icon is not activated on one of my cont...
Hi My web cam works in skype on all but one of my contacts. The icon is not hightlighted next to the call one. What is missing.
Cheers
Martin18355 wrote:
It looks like a telephone not a camera
This contact is added to your contact list as a phone number contact. It's not possible to make video calls to a phone number. Video calls are only possible to Skype contacts. -
Updated : No question, just example web cam capture code
Hi,
I posted this example a while back, but it had some cosmetic bugs in it.
Here's an updated version.
Quick Start
1. Install JMF 2.1.1e (performance pack version)
( see imports list in source code if you really want to run it using the older version 2.1.1c )
2. You have to set the JMF_HOME or JMFHOME environment variable. Can't remember which one.
"Nearly sure" it's JMF_HOME.
3. Connect your camera
4. run jmfinit ( may need to do a few times until it detects your camera )
When it does, you're in business, and you can try to run the code
5. Run java -cp .;%JMF_HOME%\lib\jmf.jar JWebCam
known issue
Under Java 1.5 / 5 - When capturing a frame, and then resizing that snapshots JFrame, the image did not always scale up and display.
That does work under Java 1.3.1_06 .
Tested on Win98 2nd edition, Java 1.3.1_06, and Creative Web Cam Pro.
Legal stuff in plain english : This code is available for use by everyone, personal or commercial, no need to mention me in licenses or anything. It's just a demo I knocked up for myself. So I am under no obligation to support this. Use it at your own risk.... that implies you can't blame or sue me for anything that goes wrong.
If you like the code, I'd be happy to hear whereabouts you are in the world :-)
Also note : this is the limits of my JMF experience at present.
If you've a separate question, post it to a new topic!
regards,
Owen ( Dublin, Ireland )
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import javax.media.*;
import javax.media.datasink.*;
import javax.media.format.*;
import javax.media.protocol.*;
import javax.media.util.*;
import javax.media.control.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
// import com.sun.media.vfw.VFWCapture; // JMF 2.1.1c version
import com.sun.media.protocol.vfw.VFWCapture; // JMF 2.1.1e version
public class JWebCam extends JFrame
implements WindowListener, ComponentListener
protected final static int MIN_WIDTH = 100; // 320;
protected final static int MIN_HEIGHT = 100; // 240;
protected static int shotCounter = 1;
protected JLabel statusBar = null;
protected JPanel visualContainer = null;
protected Component visualComponent = null;
protected JToolBar toolbar = null;
protected MyToolBarAction formatButton = null;
protected MyToolBarAction captureButton = null;
protected Player player = null;
protected CaptureDeviceInfo webCamDeviceInfo = null;
protected MediaLocator ml = null;
protected Dimension imageSize = null;
protected FormatControl formatControl = null;
protected VideoFormat currentFormat = null;
protected Format[] videoFormats = null;
protected MyVideoFormat[] myFormatList = null;
protected MyCaptureDeviceInfo[] myCaptureDevices = null;
protected boolean initialised = false;
* Constructor
public JWebCam ( String frameTitle )
super ( frameTitle );
try
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
catch ( Exception cnfe )
System.out.println ("Note : Cannot load look and feel settings");
setSize ( 320, 260 ); // default size...
addWindowListener ( this );
addComponentListener ( this );
getContentPane().setLayout ( new BorderLayout() );
visualContainer = new JPanel();
visualContainer.setLayout ( new BorderLayout() );
getContentPane().add ( visualContainer, BorderLayout.CENTER );
statusBar = new JLabel ("")
// Nasty bug workaround
// The minimum JLabel size was determined by the text in the status bar
// So the layoutmanager wouldn't shrink the window for the video image
public Dimension getPreferredSize ( )
// get the JLabel to "allow" a minimum of 10 pixels width
// not to work out the minimum size from the text length
return ( new Dimension ( 10, super.getPreferredSize().height ) );
statusBar.setBorder ( new EtchedBorder() );
getContentPane().add ( statusBar, BorderLayout.SOUTH );
* Initialise
* @returns true if web cam is detected
public boolean initialise ( )
throws Exception
MyCaptureDeviceInfo[] cams = autoDetect();
if ( cams.length > 0 )
if ( cams.length == 1 )
System.out.println ("Note : 1 web cam detected");
return ( initialise ( cams[0].capDevInfo ) );
else
System.out.println ("Note : " + cams.length + " web cams detected");
Object selected = JOptionPane.showInputDialog (this,
"Select Video format",
"Capture format selection",
JOptionPane.INFORMATION_MESSAGE,
null, // Icon icon,
cams, // videoFormats,
cams[0] );
if ( selected != null )
return ( initialise ( ((MyCaptureDeviceInfo)selected).capDevInfo ) );
else
return ( initialise ( null ) );
else
return ( initialise ( null ) );
* Initialise
* @params _deviceInfo, specific web cam device if not autodetected
* @returns true if web cam is detected
public boolean initialise ( CaptureDeviceInfo _deviceInfo )
throws Exception
statusBar.setText ( "Initialising...");
webCamDeviceInfo = _deviceInfo;
if ( webCamDeviceInfo != null )
statusBar.setText ( "Connecting to : " + webCamDeviceInfo.getName() );
try
setUpToolBar();
getContentPane().add ( toolbar, BorderLayout.NORTH );
ml = webCamDeviceInfo.getLocator();
if ( ml != null )
player = Manager.createRealizedPlayer ( ml );
if ( player != null )
player.start();
formatControl = (FormatControl)player.getControl ( "javax.media.control.FormatControl" );
videoFormats = webCamDeviceInfo.getFormats();
myFormatList = new MyVideoFormat[videoFormats.length];
for ( int i=0; i<videoFormats.length; i++ )
myFormatList[i] = new MyVideoFormat ( (VideoFormat)videoFormats[i] );
Format currFormat = formatControl.getFormat();
visualComponent = player.getVisualComponent();
if ( visualComponent != null )
visualContainer.add ( visualComponent, BorderLayout.CENTER );
if ( currFormat instanceof VideoFormat )
currentFormat = (VideoFormat)currFormat;
imageSize = currentFormat.getSize();
visualContainer.setPreferredSize ( imageSize );
setSize ( imageSize.width, imageSize.height + statusBar.getHeight() + toolbar.getHeight() );
else
System.err.println ("Error : Cannot get current video format");
invalidate();
pack();
return ( true );
else
System.err.println ("Error : Could not get visual component");
return ( false );
else
System.err.println ("Error : Cannot create player");
statusBar.setText ( "Cannot create player" );
return ( false );
else
System.err.println ("Error : No MediaLocator for " + webCamDeviceInfo.getName() );
statusBar.setText ( "No Media Locator for : " + webCamDeviceInfo.getName() );
return ( false );
catch ( IOException ioEx )
System.err.println ("Error connecting to [" + webCamDeviceInfo.getName() + "] : " + ioEx.getMessage() );
statusBar.setText ( "Connecting to : " + webCamDeviceInfo.getName() );
return ( false );
catch ( NoPlayerException npex )
statusBar.setText ("Cannot create player");
return ( false );
catch ( CannotRealizeException nre )
statusBar.setText ( "Cannot realize player");
return ( false );
else
return ( false );
* Dynamically create menu items
* @returns the device info object if found, null otherwise
public void setFormat ( VideoFormat selectedFormat )
if ( formatControl != null )
// player.stop(); // not needed and big performance hit
currentFormat = selectedFormat;
if ( visualComponent != null )
visualContainer.remove ( visualComponent );
imageSize = currentFormat.getSize();
visualContainer.setPreferredSize ( imageSize );
statusBar.setText ( "Format : " + currentFormat );
System.out.println ("Format : " + currentFormat );
formatControl.setFormat ( currentFormat );
// player.start(); // not needed and big performance hit
visualComponent = player.getVisualComponent();
if ( visualComponent != null )
visualContainer.add ( visualComponent, BorderLayout.CENTER );
invalidate(); // let the layout manager work out the sizes
pack();
else
System.out.println ("Visual component not an instance of FormatControl");
statusBar.setText ( "Visual component cannot change format" );
public VideoFormat getFormat ( )
return ( currentFormat );
protected void setUpToolBar ( )
toolbar = new JToolBar();
// Note : due to cosmetic glitches when undocking and docking the toolbar,
// I've set this to false.
toolbar.setFloatable(false);
// Note : If you supply the 16 x 16 bitmaps then you can replace
// the commented line in the MyToolBarAction constructor
formatButton = new MyToolBarAction ( "Resolution", "BtnFormat.jpg" );
captureButton = new MyToolBarAction ( "Capture", "BtnCapture.jpg" );
toolbar.add ( formatButton );
toolbar.add ( captureButton );
getContentPane().add ( toolbar, BorderLayout.NORTH );
protected void toolbarHandler ( MyToolBarAction actionBtn )
if ( actionBtn == formatButton )
Object selected = JOptionPane.showInputDialog (this,
"Select Video format",
"Capture format selection",
JOptionPane.INFORMATION_MESSAGE,
null, // Icon icon,
myFormatList, // videoFormats,
currentFormat );
if ( selected != null )
setFormat ( ((MyVideoFormat)selected).format );
else if ( actionBtn == captureButton )
Image photo = grabFrameImage ( );
if ( photo != null )
MySnapshot snapshot = new MySnapshot ( photo, new Dimension ( imageSize ) );
else
System.err.println ("Error : Could not grab frame");
* autoDetects the first web camera in the system
* searches for video for windows ( vfw ) capture devices
* @returns the device info object if found, null otherwise
public MyCaptureDeviceInfo[] autoDetect ( )
Vector list = CaptureDeviceManager.getDeviceList ( null );
CaptureDeviceInfo devInfo = null;
String name;
Vector capDevices = new Vector();
if ( list != null )
for ( int i=0; i<list.size(); i++ )
devInfo = (CaptureDeviceInfo)list.elementAt ( i );
name = devInfo.getName();
if ( name.startsWith ("vfw:") )
System.out.println ("DeviceManager List : " + name );
capDevices.addElement ( new MyCaptureDeviceInfo ( devInfo ) );
else
for ( int i = 0; i < 10; i++ )
try
name = VFWCapture.capGetDriverDescriptionName ( i );
if (name != null && name.length() > 1)
devInfo = com.sun.media.protocol.vfw.VFWSourceStream.autoDetect ( i );
if ( devInfo != null )
System.out.println ("VFW Autodetect List : " + name );
capDevices.addElement ( new MyCaptureDeviceInfo ( devInfo ) );
catch ( Exception ioEx )
System.err.println ("Error connecting to [" + webCamDeviceInfo.getName() + "] : " + ioEx.getMessage() );
// ignore errors detecting device
statusBar.setText ( "AutoDetect failed : " + ioEx.getMessage() );
MyCaptureDeviceInfo[] detected = new MyCaptureDeviceInfo[ capDevices.size() ];
for ( int i=0; i<capDevices.size(); i++ )
detected[i] = (MyCaptureDeviceInfo)capDevices.elementAt ( i );
return ( detected );
* deviceInfo
* @note outputs text information
public void deviceInfo ( )
if ( webCamDeviceInfo != null )
Format[] formats = webCamDeviceInfo.getFormats();
if ( ( formats != null ) && ( formats.length > 0 ) )
for ( int i=0; i<formats.length; i++ )
Format aFormat = formats;
if ( aFormat instanceof VideoFormat )
Dimension dim = ((VideoFormat)aFormat).getSize();
// System.out.println ("Video Format " + i + " : " + formats[i].getEncoding() + ", " + dim.width + " x " + dim.height );
else
System.out.println ("Error : No web cam detected");
* grabs a frame's buffer from the web cam / device
* @returns A frames buffer
public Buffer grabFrameBuffer ( )
if ( player != null )
FrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl ( "javax.media.control.FrameGrabbingControl" );
if ( fgc != null )
return ( fgc.grabFrame() );
else
System.err.println ("Error : FrameGrabbingControl is null");
return ( null );
else
System.err.println ("Error : Player is null");
return ( null );
* grabs a frame's buffer, as an image, from the web cam / device
* @returns A frames buffer as an image
public Image grabFrameImage ( )
Buffer buffer = grabFrameBuffer();
if ( buffer != null )
// Convert it to an image
BufferToImage btoi = new BufferToImage ( (VideoFormat)buffer.getFormat() );
if ( btoi != null )
Image image = btoi.createImage ( buffer );
if ( image != null )
return ( image );
else
System.err.println ("Error : BufferToImage cannot convert buffer");
return ( null );
else
System.err.println ("Error : cannot create BufferToImage instance");
return ( null );
else
System.out.println ("Error : Buffer grabbed is null");
return ( null );
* Closes and cleans up the player
public void playerClose ( )
if ( player != null )
player.close();
player.deallocate();
player = null;
public void windowClosing ( WindowEvent e )
playerClose();
System.exit ( 1 );
public void componentResized ( ComponentEvent e )
Dimension dim = getSize();
boolean mustResize = false;
if ( dim.width < MIN_WIDTH )
dim.width = MIN_WIDTH;
mustResize = true;
if ( dim.height < MIN_HEIGHT )
dim.height = MIN_HEIGHT;
mustResize = true;
if ( mustResize )
setSize ( dim );
public void windowActivated ( WindowEvent e ) { }
public void windowClosed ( WindowEvent e ) { }
public void windowDeactivated ( WindowEvent e ) { }
public void windowDeiconified ( WindowEvent e ) { }
public void windowIconified ( WindowEvent e ) { }
public void windowOpened ( WindowEvent e ) { }
public void componentHidden(ComponentEvent e) { }
public void componentMoved(ComponentEvent e) { }
public void componentShown(ComponentEvent e) { }
protected void finalize ( ) throws Throwable
playerClose();
super.finalize();
class MyToolBarAction extends AbstractAction
public MyToolBarAction ( String name, String imagefile )
// Note : Use version this if you supply your own toolbar icons
// super ( name, new ImageIcon ( imagefile ) );
super ( name );
public void actionPerformed ( ActionEvent event )
toolbarHandler ( this );
class MyVideoFormat
public VideoFormat format;
public MyVideoFormat ( VideoFormat format )
this.format = format;
public String toString ( )
Dimension dim = format.getSize();
return ( format.getEncoding() + " [ " + dim.width + " x " + dim.height + " ]" );
class MyCaptureDeviceInfo
public CaptureDeviceInfo capDevInfo;
public MyCaptureDeviceInfo ( CaptureDeviceInfo devInfo )
capDevInfo = devInfo;
public String toString ( )
return ( capDevInfo.getName() );
class MySnapshot extends JFrame implements ImageObserver
protected Image photo = null;
protected int shotNumber;
public MySnapshot ( Image grabbedFrame, Dimension imageSize )
super ( );
shotNumber = shotCounter++;
setTitle ( "Photo" + shotNumber );
photo = grabbedFrame;
setDefaultCloseOperation ( WindowConstants.DISPOSE_ON_CLOSE );
int imageHeight = photo.getWidth ( this );
int imageWidth = photo.getHeight ( this );
setSize ( imageSize.width, imageSize.height );
final FileDialog saveDialog = new FileDialog ( this, "Save JPEG", FileDialog.SAVE );
final JFrame thisCopy = this;
saveDialog.setFile ( "Photo" + shotNumber );
addWindowListener ( new WindowAdapter()
public void windowClosing ( WindowEvent e )
saveDialog.show();
String filename = saveDialog.getFile();
if ( filename != null )
if ( saveJPEG ( filename ) )
JOptionPane.showMessageDialog ( thisCopy, "Saved " + filename );
setVisible ( false );
dispose();
else
JOptionPane.showMessageDialog ( thisCopy, "Error saving " + filename );
else
setVisible ( false );
dispose();
setVisible ( true );
public void paint ( Graphics g )
super.paint ( g );
g.drawImage ( photo, 0, 0, getWidth(), getHeight(), Color.black, this );
* Saves an image as a JPEG
* @params the image to save
* @params the filename to save the image as
public boolean saveJPEG ( String filename )
boolean saved = false;
BufferedImage bi = new BufferedImage ( photo.getWidth(null),
photo.getHeight(null),
BufferedImage.TYPE_INT_RGB );
Graphics2D g2 = bi.createGraphics();
g2.drawImage ( photo, null, null );
FileOutputStream out = null;
try
out = new FileOutputStream ( filename );
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder ( out );
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam ( bi );
param.setQuality ( 1.0f, false ); // 100% high quality setting, no compression
encoder.setJPEGEncodeParam ( param );
encoder.encode ( bi );
out.close();
saved = true;
catch ( Exception ex )
System.out.println ("Error saving JPEG : " + ex.getMessage() );
return ( saved );
} // of MySnapshot
public static void main (String[] args )
try
JWebCam myWebCam = new JWebCam ( "Web Cam Capture" );
myWebCam.setVisible ( true );
if ( !myWebCam.initialise() )
System.out.println ("Web Cam not detected / initialised");
catch ( Exception ex )
ex.printStackTrace();Hi,
Here's a working version.
If there are no spaces after the "<" symbol, it thinks it's a HTML tag.
Putting spaces in, stops this.
cheers,
Owen
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import javax.media.*;
import javax.media.datasink.*;
import javax.media.format.*;
import javax.media.protocol.*;
import javax.media.util.*;
import javax.media.control.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
// import com.sun.media.vfw.VFWCapture; // JMF 2.1.1c version
import com.sun.media.protocol.vfw.VFWCapture; // JMF 2.1.1e version
public class JWebCam extends JFrame
implements WindowListener, ComponentListener
protected final static int MIN_WIDTH = 100; // 320;
protected final static int MIN_HEIGHT = 100; // 240;
protected static int shotCounter = 1;
protected JLabel statusBar = null;
protected JPanel visualContainer = null;
protected Component visualComponent = null;
protected JToolBar toolbar = null;
protected MyToolBarAction formatButton = null;
protected MyToolBarAction captureButton = null;
protected Player player = null;
protected CaptureDeviceInfo webCamDeviceInfo = null;
protected MediaLocator ml = null;
protected Dimension imageSize = null;
protected FormatControl formatControl = null;
protected VideoFormat currentFormat = null;
protected Format[] videoFormats = null;
protected MyVideoFormat[] myFormatList = null;
protected MyCaptureDeviceInfo[] myCaptureDevices = null;
protected boolean initialised = false;
* Constructor
public JWebCam ( String frameTitle )
super ( frameTitle );
try
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
catch ( Exception cnfe )
System.out.println ("Note : Cannot load look and feel settings");
setSize ( 320, 260 ); // default size...
addWindowListener ( this );
addComponentListener ( this );
getContentPane().setLayout ( new BorderLayout() );
visualContainer = new JPanel();
visualContainer.setLayout ( new BorderLayout() );
getContentPane().add ( visualContainer, BorderLayout.CENTER );
statusBar = new JLabel ("")
// Nasty bug workaround
// The minimum JLabel size was determined by the text in the status bar
// So the layoutmanager wouldn't shrink the window for the video image
public Dimension getPreferredSize ( )
// get the JLabel to "allow" a minimum of 10 pixels width
// not to work out the minimum size from the text length
return ( new Dimension ( 10, super.getPreferredSize().height ) );
statusBar.setBorder ( new EtchedBorder() );
getContentPane().add ( statusBar, BorderLayout.SOUTH );
* Initialise
* @returns true if web cam is detected
public boolean initialise ( )
throws Exception
MyCaptureDeviceInfo[] cams = autoDetect();
if ( cams.length > 0 )
if ( cams.length == 1 )
System.out.println ("Note : 1 web cam detected");
return ( initialise ( cams[0].capDevInfo ) );
else
System.out.println ("Note : " + cams.length + " web cams detected");
Object selected = JOptionPane.showInputDialog (this,
"Select Video format",
"Capture format selection",
JOptionPane.INFORMATION_MESSAGE,
null, // Icon icon,
cams, // videoFormats,
cams[0] );
if ( selected != null )
return ( initialise ( ((MyCaptureDeviceInfo)selected).capDevInfo ) );
else
return ( initialise ( null ) );
else
return ( initialise ( null ) );
* Initialise
* @params _deviceInfo, specific web cam device if not autodetected
* @returns true if web cam is detected
public boolean initialise ( CaptureDeviceInfo _deviceInfo )
throws Exception
statusBar.setText ( "Initialising...");
webCamDeviceInfo = _deviceInfo;
if ( webCamDeviceInfo != null )
statusBar.setText ( "Connecting to : " + webCamDeviceInfo.getName() );
try
setUpToolBar();
getContentPane().add ( toolbar, BorderLayout.NORTH );
ml = webCamDeviceInfo.getLocator();
if ( ml != null )
player = Manager.createRealizedPlayer ( ml );
if ( player != null )
player.start();
formatControl = (FormatControl)player.getControl ( "javax.media.control.FormatControl" );
videoFormats = webCamDeviceInfo.getFormats();
myFormatList = new MyVideoFormat[videoFormats.length];
for ( int i=0; i < videoFormats.length; i++ )
myFormatList[i] = new MyVideoFormat ( (VideoFormat)videoFormats[i] );
Format currFormat = formatControl.getFormat();
visualComponent = player.getVisualComponent();
if ( visualComponent != null )
visualContainer.add ( visualComponent, BorderLayout.CENTER );
if ( currFormat instanceof VideoFormat )
currentFormat = (VideoFormat)currFormat;
imageSize = currentFormat.getSize();
visualContainer.setPreferredSize ( imageSize );
setSize ( imageSize.width, imageSize.height + statusBar.getHeight() + toolbar.getHeight() );
else
System.err.println ("Error : Cannot get current video format");
invalidate();
pack();
return ( true );
else
System.err.println ("Error : Could not get visual component");
return ( false );
else
System.err.println ("Error : Cannot create player");
statusBar.setText ( "Cannot create player" );
return ( false );
else
System.err.println ("Error : No MediaLocator for " + webCamDeviceInfo.getName() );
statusBar.setText ( "No Media Locator for : " + webCamDeviceInfo.getName() );
return ( false );
catch ( IOException ioEx )
System.err.println ("Error connecting to [" + webCamDeviceInfo.getName() + "] : " + ioEx.getMessage() );
statusBar.setText ( "Connecting to : " + webCamDeviceInfo.getName() );
return ( false );
catch ( NoPlayerException npex )
statusBar.setText ("Cannot create player");
return ( false );
catch ( CannotRealizeException nre )
statusBar.setText ( "Cannot realize player");
return ( false );
else
return ( false );
* Dynamically create menu items
* @returns the device info object if found, null otherwise
public void setFormat ( VideoFormat selectedFormat )
if ( formatControl != null )
player.stop();
currentFormat = selectedFormat;
if ( visualComponent != null )
visualContainer.remove ( visualComponent );
imageSize = currentFormat.getSize();
visualContainer.setPreferredSize ( imageSize );
statusBar.setText ( "Format : " + currentFormat );
System.out.println ("Format : " + currentFormat );
formatControl.setFormat ( currentFormat );
player.start();
visualComponent = player.getVisualComponent();
if ( visualComponent != null )
visualContainer.add ( visualComponent, BorderLayout.CENTER );
invalidate(); // let the layout manager work out the sizes
pack();
else
System.out.println ("Visual component not an instance of FormatControl");
statusBar.setText ( "Visual component cannot change format" );
public VideoFormat getFormat ( )
return ( currentFormat );
protected void setUpToolBar ( )
toolbar = new JToolBar();
// Note : due to cosmetic glitches when undocking and docking the toolbar,
// I've set this to false.
toolbar.setFloatable(false);
// Note : If you supply the 16 x 16 bitmaps then you can replace
// the commented line in the MyToolBarAction constructor
formatButton = new MyToolBarAction ( "Resolution", "BtnFormat.jpg" );
captureButton = new MyToolBarAction ( "Capture", "BtnCapture.jpg" );
toolbar.add ( formatButton );
toolbar.add ( captureButton );
getContentPane().add ( toolbar, BorderLayout.NORTH );
protected void toolbarHandler ( MyToolBarAction actionBtn )
if ( actionBtn == formatButton )
Object selected = JOptionPane.showInputDialog (this,
"Select Video format",
"Capture format selection",
JOptionPane.INFORMATION_MESSAGE,
null, // Icon icon,
myFormatList, // videoFormats,
currentFormat );
if ( selected != null )
setFormat ( ((MyVideoFormat)selected).format );
else if ( actionBtn == captureButton )
Image photo = grabFrameImage ( );
if ( photo != null )
MySnapshot snapshot = new MySnapshot ( photo, new Dimension ( imageSize ) );
else
System.err.println ("Error : Could not grab frame");
* autoDetects the first web camera in the system
* searches for video for windows ( vfw ) capture devices
* @returns the device info object if found, null otherwise
public MyCaptureDeviceInfo[] autoDetect ( )
Vector list = CaptureDeviceManager.getDeviceList ( null );
CaptureDeviceInfo devInfo = null;
String name;
Vector capDevices = new Vector();
if ( list != null )
for ( int i=0; i < list.size(); i++ )
devInfo = (CaptureDeviceInfo)list.elementAt ( i );
name = devInfo.getName();
if ( name.startsWith ("vfw:") )
System.out.println ("DeviceManager List : " + name );
capDevices.addElement ( new MyCaptureDeviceInfo ( devInfo ) );
else
for ( int i = 0; i < 10; i++ )
try
name = VFWCapture.capGetDriverDescriptionName ( i );
if (name != null && name.length() > 1)
devInfo = com.sun.media.protocol.vfw.VFWSourceStream.autoDetect ( i );
if ( devInfo != null )
System.out.println ("VFW Autodetect List : " + name );
capDevices.addElement ( new MyCaptureDeviceInfo ( devInfo ) );
catch ( Exception ioEx )
System.err.println ("Error connecting to [" + webCamDeviceInfo.getName() + "] : " + ioEx.getMessage() );
// ignore errors detecting device
statusBar.setText ( "AutoDetect failed : " + ioEx.getMessage() );
MyCaptureDeviceInfo[] detected = new MyCaptureDeviceInfo[ capDevices.size() ];
for ( int i=0; i < capDevices.size(); i++ )
detected[i] = (MyCaptureDeviceInfo)capDevices.elementAt ( i );
return ( detected );
* deviceInfo
* @note outputs text information
public void deviceInfo ( )
if ( webCamDeviceInfo != null )
Format[] formats = webCamDeviceInfo.getFormats();
if ( ( formats != null ) && ( formats.length > 0 ) )
for ( int i=0; i < formats.length; i++ )
Format aFormat = formats;
if ( aFormat instanceof VideoFormat )
Dimension dim = ((VideoFormat)aFormat).getSize();
// System.out.println ("Video Format " + i + " : " + formats[i].getEncoding() + ", " + dim.width + " x " + dim.height );
else
System.out.println ("Error : No web cam detected");
* grabs a frame's buffer from the web cam / device
* @returns A frames buffer
public Buffer grabFrameBuffer ( )
if ( player != null )
FrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl ( "javax.media.control.FrameGrabbingControl" );
if ( fgc != null )
return ( fgc.grabFrame() );
else
System.err.println ("Error : FrameGrabbingControl is null");
return ( null );
else
System.err.println ("Error : Player is null");
return ( null );
* grabs a frame's buffer, as an image, from the web cam / device
* @returns A frames buffer as an image
public Image grabFrameImage ( )
Buffer buffer = grabFrameBuffer();
if ( buffer != null )
// Convert it to an image
BufferToImage btoi = new BufferToImage ( (VideoFormat)buffer.getFormat() );
if ( btoi != null )
Image image = btoi.createImage ( buffer );
if ( image != null )
return ( image );
else
System.err.println ("Error : BufferToImage cannot convert buffer");
return ( null );
else
System.err.println ("Error : cannot create BufferToImage instance");
return ( null );
else
System.out.println ("Error : Buffer grabbed is null");
return ( null );
* Closes and cleans up the player
public void playerClose ( )
if ( player != null )
player.close();
player.deallocate();
player = null;
public void windowClosing ( WindowEvent e )
playerClose();
System.exit ( 1 );
public void componentResized ( ComponentEvent e )
Dimension dim = getSize();
boolean mustResize = false;
if ( dim.width < MIN_WIDTH )
dim.width = MIN_WIDTH;
mustResize = true;
if ( dim.height < MIN_HEIGHT )
dim.height = MIN_HEIGHT;
mustResize = true;
if ( mustResize )
setSize ( dim );
public void windowActivated ( WindowEvent e ) { }
public void windowClosed ( WindowEvent e ) { }
public void windowDeactivated ( WindowEvent e ) { }
public void windowDeiconified ( WindowEvent e ) { }
public void windowIconified ( WindowEvent e ) { }
public void windowOpened ( WindowEvent e ) { }
public void componentHidden(ComponentEvent e) { }
public void componentMoved(ComponentEvent e) { }
public void componentShown(ComponentEvent e) { }
protected void finalize ( ) throws Throwable
playerClose();
super.finalize();
class MyToolBarAction extends AbstractAction
public MyToolBarAction ( String name, String imagefile )
// Note : Use version this if you supply your own toolbar icons
// super ( name, new ImageIcon ( imagefile ) );
super ( name );
public void actionPerformed ( ActionEvent event )
toolbarHandler ( this );
class MyVideoFormat
public VideoFormat format;
public MyVideoFormat ( VideoFormat format )
this.format = format;
public String toString ( )
Dimension dim = format.getSize();
return ( format.getEncoding() + " [ " + dim.width + " x " + dim.height + " ]" );
class MyCaptureDeviceInfo
public CaptureDeviceInfo capDevInfo;
public MyCaptureDeviceInfo ( CaptureDeviceInfo devInfo )
capDevInfo = devInfo;
public String toString ( )
return ( capDevInfo.getName() );
class MySnapshot extends JFrame implements ImageObserver
protected Image photo = null;
protected int shotNumber;
public MySnapshot ( Image grabbedFrame, Dimension imageSize )
super ( );
shotNumber = shotCounter++;
setTitle ( "Photo" + shotNumber );
photo = grabbedFrame;
setDefaultCloseOperation ( WindowConstants.DISPOSE_ON_CLOSE );
int imageHeight = photo.getWidth ( this );
int imageWidth = photo.getHeight ( this );
setSize ( imageSize.width, imageSize.height );
final FileDialog saveDialog = new FileDialog ( this, "Save JPEG", FileDialog.SAVE );
final JFrame thisCopy = this;
saveDialog.setFile ( "Photo" + shotNumber );
addWindowListener ( new WindowAdapter()
public void windowClosing ( WindowEvent e )
saveDialog.show();
String filename = saveDialog.getFile();
if ( filename != null )
if ( saveJPEG ( filename ) )
JOptionPane.showMessageDialog ( thisCopy, "Saved " + filename );
setVisible ( false );
dispose();
else
JOptionPane.showMessageDialog ( thisCopy, "Error saving " + filename );
else
setVisible ( false );
dispose();
setVisible ( true );
public void paint ( Graphics g )
super.paint ( g );
g.drawImage ( photo, 0, 0, getWidth(), getHeight(), Color.black, this );
* Saves an image as a JPEG
* @params the image to save
* @params the filename to save the image as
public boolean saveJPEG ( String filename )
boolean saved = false;
BufferedImage bi = new BufferedImage ( photo.getWidth(null),
photo.getHeight(null),
BufferedImage.TYPE_INT_RGB );
Graphics2D g2 = bi.createGraphics();
g2.drawImage ( photo, null, null );
FileOutputStream out = null;
try
out = new FileOutputStream ( filename );
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder ( out );
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam ( bi );
param.setQuality ( 1.0f, false ); // 100% high quality setting, no compression
encoder.setJPEGEncodeParam ( param );
encoder.encode ( bi );
out.close();
saved = true;
catch ( Exception ex )
System.out.println ("Error saving JPEG : " + ex.getMessage() );
return ( saved );
} // of MySnapshot
public static void main (String[] args )
try
JWebCam myWebCam = new JWebCam ( "Web Cam Capture" );
myWebCam.setVisible ( true );
if ( !myWebCam.initialise() )
System.out.println ("Web Cam not detected / initialised");
catch ( Exception ex )
ex.printStackTrace(); -
No Question, just example web cam capture code
Hi,
Since loads of people ask for an example of capturing pics from a web cam, here's one that captures pics, lets you take snapshots, which it displays in another frame. When you shut down the frame it asks if you want to save it to a JPEG.
I'm mainly posting this to spite Eka_Kupkova, who only visits this forum to shamelessly advertise a commercial Twain based package in every single posting on this forum which mentions web cams.
Notes : ( Could be more, read the install docs for JMF )
1. you must download the "performance" version of jmf to capture video.
2. I "think" you need to setup the JMF_HOME environment variable
3. Run the jmfinit program to detect your camera and register it.
I had to run it a couple of times before it worked.
4. I had 2 icons for my toolbar, BtnFormat.jpg and BtnCapture.jpg.
They were just 16 x 16 pixel bitmaps, you can make them up yourself.
5. I assume you've got the webcam working and the driver installed already.
Ps. if you find this useful, then reply back with where you are in the world. I'm in Dublin, Ireland.
cheers,
Owen
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.util.*;
import javax.media.control.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
// Ps. I think JMF 2.1.1c used a different package for this class..
import com.sun.media.vfw.VFWCapture;
public class JWebCam extends JFrame
implements WindowListener,
ComponentListener
protected final static int MIN_WIDTH = 320;
protected final static int MIN_HEIGHT = 240;
protected static int shotCounter = 1;
protected JLabel statusBar = null;
protected Component visualComponent = null;
protected JToolBar toolbar = null;
protected MyToolBarAction formatButton = null;
protected MyToolBarAction captureButton = null;
protected Player player = null;
protected CaptureDeviceInfo webCamDeviceInfo = null;
protected MediaLocator ml = null;
protected Dimension imageSize = null;
protected FormatControl formatControl = null;
protected VideoFormat currentFormat = null;
protected Format[] videoFormats = null;
protected MyVideoFormat[] myFormatList = null;
* Constructor
public JWebCam ( String frameTitle )
super ( frameTitle );
try
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
catch ( Exception cnfe )
System.out.println ("Note : Cannot load look and feel settings");
addWindowListener ( this );
addComponentListener ( this );
getContentPane().setLayout ( new BorderLayout() );
statusBar = new JLabel ("Initialising...");
statusBar.setBorder ( new EtchedBorder() );
getContentPane().add ( statusBar, BorderLayout.SOUTH );
setSize ( 320, 260 ); // default size...
setVisible ( true );
* Initialise
* @returns true if web cam is detected
public boolean initialise ( )
throws Exception
return ( initialise ( autoDetect() ) );
* Initialise
* @params _deviceInfo, specific web cam device if not autodetected
* @returns true if web cam is detected
public boolean initialise ( CaptureDeviceInfo _deviceInfo )
throws Exception
webCamDeviceInfo = _deviceInfo;
if ( webCamDeviceInfo != null )
statusBar.setText ( "Connecting to : " + webCamDeviceInfo.getName() );
try
// setUpMenu ( );
setUpToolBar();
getContentPane().add ( toolbar, BorderLayout.NORTH );
ml = webCamDeviceInfo.getLocator();
if ( ml != null )
player = Manager.createRealizedPlayer ( ml );
if ( player != null )
formatControl = (FormatControl)player.getControl ( "javax.media.control.FormatControl" );
videoFormats = webCamDeviceInfo.getFormats();
setFormat ( (VideoFormat)videoFormats[0] );
// player.start();
visualComponent = player.getVisualComponent();
getContentPane().add ( visualComponent, BorderLayout.CENTER );
invalidate();
pack();
setSize ( imageSize.width, imageSize.height + statusBar.getHeight() + toolbar.getHeight() );
myFormatList = new MyVideoFormat[videoFormats.length];
for ( int i=0; i<videoFormats.length; i++ )
myFormatList[i] = new MyVideoFormat ( (VideoFormat)videoFormats[i] );
else
statusBar.setText ( "No Media Locator for : " + webCamDeviceInfo.getName() );
return ( true );
catch ( IOException ioEx )
statusBar.setText ( "Connecting to : " + webCamDeviceInfo.getName() );
return ( false );
catch ( NoPlayerException npex )
statusBar.setText ("Cannot create player");
return ( false );
catch ( CannotRealizeException nre )
statusBar.setText ( "Cannot realize player");
return ( false );
else
return ( false );
* Dynamically create menu items
* @returns the device info object if found, null otherwise
public void setFormat ( VideoFormat selectedFormat )
if ( formatControl != null )
player.stop();
statusBar.setText ( "Format : " + selectedFormat );
imageSize = selectedFormat.getSize();
formatControl.setFormat ( selectedFormat );
currentFormat = selectedFormat;
setSize ( imageSize.width, imageSize.height + statusBar.getHeight() + toolbar.getHeight() );
player.start();
else
System.out.println ("Visual component not an instance of FormatControl");
statusBar.setText ( "Visual component cannot change format" );
protected void setUpToolBar ( )
toolbar = new JToolBar();
formatButton = new MyToolBarAction ( "Format", "BtnFormat.jpg" );
captureButton = new MyToolBarAction ( "Capture", "BtnCapture.jpg" );
if ( formatButton != null )
toolbar.add ( formatButton );
toolbar.add ( captureButton );
getContentPane().add ( toolbar, BorderLayout.NORTH );
protected void toolbarHandler ( MyToolBarAction actionBtn )
if ( actionBtn == formatButton )
// JOptionPane.showConfirmDialog ( this, "Format Dialog" );
Object selected = JOptionPane.showInputDialog (this,
"Select Video format",
"Capture format selection",
JOptionPane.INFORMATION_MESSAGE,
null, // Icon icon,
myFormatList, // videoFormats,
currentFormat );
if ( selected != null )
setFormat ( ((MyVideoFormat)selected).format );
else if ( actionBtn == captureButton )
Image photo = grabFrameImage ( );
MySnapshot snapshot = new MySnapshot ( photo, new Dimension ( imageSize ) );
* autoDetects the first web camera in the system
* @returns the device info object if found, null otherwise
public CaptureDeviceInfo autoDetect ( )
Vector list = CaptureDeviceManager.getDeviceList ( null );
CaptureDeviceInfo devInfo = null;
if ( list != null )
String name;
for ( int i=0; i<list.size(); i++ )
devInfo = (CaptureDeviceInfo)list.elementAt ( i );
name = devInfo.getName();
if ( name.startsWith ("vfw:") )
break;
if ( devInfo != null && devInfo.getName().startsWith("vfw:") )
return ( devInfo );
else
for ( int i = 0; i < 10; i++ )
try
name = VFWCapture.capGetDriverDescriptionName ( i );
if (name != null && name.length() > 1)
devInfo = com.sun.media.protocol.vfw.VFWSourceStream.autoDetect ( i );
if ( devInfo != null )
return ( devInfo );
catch ( Exception ioEx )
// ignore errors detecting device
statusBar.setText ( "AutoDetect failed : " + ioEx.getMessage() );
return ( null );
else
return ( null );
* deviceInfo
* @note outputs text information
public void deviceInfo ( )
if ( webCamDeviceInfo != null )
Format[] formats = webCamDeviceInfo.getFormats();
if ( ( formats != null ) && ( formats.length > 0 ) )
for ( int i=0; i<formats.length; i++ )
Format aFormat = formats;
if ( aFormat instanceof VideoFormat )
Dimension dim = ((VideoFormat)aFormat).getSize();
System.out.println ("Video Format " + i + " : " + formats[i].getEncoding() + ", " + dim.width + " x " + dim.height );
else
System.out.println ("Format " + i + " : " + formats[i].getEncoding() );
else
System.out.println ("Error : No web cam detected");
* grabs a frame's buffer from the web cam / device
* @returns A frames buffer
public Buffer grabFrameBuffer ( )
if ( player != null )
FrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl ( "javax.media.control.FrameGrabbingControl" );
Buffer buf = fgc.grabFrame();
return ( buf );
else
return ( null );
* grabs a frame's buffer, as an image, from the web cam / device
* @returns A frames buffer as an image
public Image grabFrameImage ( )
Buffer buffer = grabFrameBuffer();
if ( buffer != null )
// Convert it to an image
BufferToImage btoi = new BufferToImage ( (VideoFormat)buffer.getFormat() );
Image image = btoi.createImage ( buffer );
return ( image );
else
System.out.println ("Error : Buffer grabbed is null");
return ( null );
* Closes and cleans up the player
public void playerClose ( )
if ( player != null )
player.close();
player.deallocate();
player = null;
public void windowClosing ( WindowEvent e )
playerClose();
System.exit ( 1 );
public void componentResized(ComponentEvent e)
Dimension dim = getSize();
boolean mustResize = false;
if ( dim.width < MIN_WIDTH )
dim.width = MIN_WIDTH;
mustResize = true;
if ( dim.height < MIN_HEIGHT )
dim.height = MIN_HEIGHT;
mustResize = true;
if ( mustResize )
setSize ( dim );
public void windowActivated ( WindowEvent e ) { }
public void windowClosed ( WindowEvent e ) { }
public void windowDeactivated ( WindowEvent e ) { }
public void windowDeiconified ( WindowEvent e ) { }
public void windowIconified ( WindowEvent e ) { }
public void windowOpened ( WindowEvent e ) { }
public void componentHidden(ComponentEvent e) { }
public void componentMoved(ComponentEvent e) { }
public void componentShown(ComponentEvent e) { }
protected void finalize ( ) throws Throwable
playerClose();
super.finalize();
class MyToolBarAction extends AbstractAction
public MyToolBarAction ( String name, String imagefile )
super ( name, new ImageIcon ( imagefile ) );
public void actionPerformed ( ActionEvent event )
toolbarHandler ( this );
class MyVideoFormat
public VideoFormat format;
public MyVideoFormat ( VideoFormat _format )
format = _format;
public String toString ( )
Dimension dim = format.getSize();
return ( format.getEncoding() + " [ " + dim.width + " x " + dim.height + " ]" );
class MySnapshot extends JFrame
protected Image photo = null;
protected int shotNumber;
public MySnapshot ( Image grabbedFrame, Dimension imageSize )
super ( );
shotNumber = shotCounter++;
setTitle ( "Photo" + shotNumber );
photo = grabbedFrame;
setDefaultCloseOperation ( WindowConstants.DO_NOTHING_ON_CLOSE );
int imageHeight = photo.getWidth ( this );
int imageWidth = photo.getHeight ( this );
setSize ( imageSize.width, imageSize.height );
final FileDialog saveDialog = new FileDialog ( this, "Save JPEG", FileDialog.SAVE );
final JFrame thisCopy = this;
saveDialog.setFile ( "Photo" + shotNumber );
addWindowListener ( new WindowAdapter()
public void windowClosing ( WindowEvent e )
saveDialog.show();
String filename = saveDialog.getFile();
if ( filename != null )
if ( saveJPEG ( filename ) )
JOptionPane.showMessageDialog ( thisCopy, "Saved " + filename );
setVisible ( false );
dispose();
else
JOptionPane.showMessageDialog ( thisCopy, "Error saving " + filename );
else
setVisible ( false );
dispose();
setVisible ( true );
public void paint ( Graphics g )
g.drawImage ( photo, 0, 0, getWidth(), getHeight(), this );
* Saves an image as a JPEG
* @params the image to save
* @params the filename to save the image as
public boolean saveJPEG ( String filename )
boolean saved = false;
BufferedImage bi = new BufferedImage ( photo.getWidth(null),
photo.getHeight(null),
BufferedImage.TYPE_INT_RGB );
Graphics2D g2 = bi.createGraphics();
g2.drawImage ( photo, null, null );
FileOutputStream out = null;
try
out = new FileOutputStream ( filename );
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder ( out );
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam ( bi );
param.setQuality ( 1.0f, false );
encoder.setJPEGEncodeParam ( param );
encoder.encode ( bi );
out.close();
saved = true;
catch ( Exception ex )
System.out.println ("Error saving JPEG : " + ex.getMessage() );
return ( saved );
} // of MySnapshot
public static void main (String[] args )
try
JWebCam myWebCam = new JWebCam ( "TimeSlice Web Cam Capture" );
if ( myWebCam.initialise() )
// myWebCam.deviceInfo(); // outputs device info
else
System.out.println ("Web Cam not detected / initialised");
catch ( Exception ex )
ex.printStackTrace();Doohhh... I posted an old version which didn't work.
I tried and tested this last night, and it runs grand using Ver 2.1.1e.
Tested under Windows 98, using an old Creative GO Camera.
Haven't tried it under Linux, but suspect you'd have to at least change an references to "vfw" to "v4l".
You'll need jmf.jar in your classpath to run it too.
cheers,
Owen
import javax.swing.*;
import javax.swing.border.*;
import java.io.*;
import javax.media.*;
import javax.media.datasink.*;
import javax.media.format.*;
import javax.media.protocol.*;
import javax.media.util.*;
import javax.media.control.*;
import java.util.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
// import com.sun.media.vfw.VFWCapture; // JMF 2.1.1c version
import com.sun.media.protocol.vfw.VFWCapture; // JMF 2.1.1e version
public class JWebCam extends JFrame
implements WindowListener, ComponentListener
protected final static int MIN_WIDTH = 320;
protected final static int MIN_HEIGHT = 240;
protected static int shotCounter = 1;
protected JLabel statusBar = null;
protected JPanel visualContainer = null;
protected Component visualComponent = null;
protected JToolBar toolbar = null;
protected MyToolBarAction formatButton = null;
protected MyToolBarAction captureButton = null;
protected Player player = null;
protected CaptureDeviceInfo webCamDeviceInfo = null;
protected MediaLocator ml = null;
protected Dimension imageSize = null;
protected FormatControl formatControl = null;
protected VideoFormat currentFormat = null;
protected Format[] videoFormats = null;
protected MyVideoFormat[] myFormatList = null;
protected boolean initialised = false;
* Constructor
public JWebCam ( String frameTitle )
super ( frameTitle );
try
UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
catch ( Exception cnfe )
System.out.println ("Note : Cannot load look and feel settings");
setSize ( 320, 260 ); // default size...
addWindowListener ( this );
addComponentListener ( this );
getContentPane().setLayout ( new BorderLayout() );
visualContainer = new JPanel();
visualContainer.setLayout ( new BorderLayout() );
getContentPane().add ( visualContainer, BorderLayout.CENTER );
statusBar = new JLabel ("");
statusBar.setBorder ( new EtchedBorder() );
getContentPane().add ( statusBar, BorderLayout.SOUTH );
* Initialise
* @returns true if web cam is detected
public boolean initialise ( )
throws Exception
return ( initialise ( autoDetect() ) );
* Initialise
* @params _deviceInfo, specific web cam device if not autodetected
* @returns true if web cam is detected
public boolean initialise ( CaptureDeviceInfo _deviceInfo )
throws Exception
statusBar.setText ( "Initialising...");
webCamDeviceInfo = _deviceInfo;
if ( webCamDeviceInfo != null )
statusBar.setText ( "Connecting to : " + webCamDeviceInfo.getName() );
try
setUpToolBar();
getContentPane().add ( toolbar, BorderLayout.NORTH );
ml = webCamDeviceInfo.getLocator();
if ( ml != null )
player = Manager.createRealizedPlayer ( ml );
if ( player != null )
player.start();
formatControl = (FormatControl)player.getControl ( "javax.media.control.FormatControl" );
videoFormats = webCamDeviceInfo.getFormats();
visualComponent = player.getVisualComponent();
if ( visualComponent != null )
visualContainer.add ( visualComponent, BorderLayout.CENTER );
myFormatList = new MyVideoFormat[videoFormats.length];
for ( int i=0; i<videoFormats.length; i++ )
myFormatList[i] = new MyVideoFormat ( (VideoFormat)videoFormats[i] );
Format currFormat = formatControl.getFormat();
if ( currFormat instanceof VideoFormat )
currentFormat = (VideoFormat)currFormat;
imageSize = currentFormat.getSize();
visualContainer.setPreferredSize ( imageSize );
setSize ( imageSize.width, imageSize.height + statusBar.getHeight() + toolbar.getHeight() );
else
System.err.println ("Error : Cannot get current video format");
invalidate();
pack();
return ( true );
else
System.err.println ("Error : Could not get visual component");
return ( false );
else
System.err.println ("Error : Cannot create player");
statusBar.setText ( "Cannot create player" );
return ( false );
else
System.err.println ("Error : No MediaLocator for " + webCamDeviceInfo.getName() );
statusBar.setText ( "No Media Locator for : " + webCamDeviceInfo.getName() );
return ( false );
catch ( IOException ioEx )
statusBar.setText ( "Connecting to : " + webCamDeviceInfo.getName() );
return ( false );
catch ( NoPlayerException npex )
statusBar.setText ("Cannot create player");
return ( false );
catch ( CannotRealizeException nre )
statusBar.setText ( "Cannot realize player");
return ( false );
else
return ( false );
* Dynamically create menu items
* @returns the device info object if found, null otherwise
public void setFormat ( VideoFormat selectedFormat )
if ( formatControl != null )
player.stop();
imageSize = selectedFormat.getSize();
formatControl.setFormat ( selectedFormat );
player.start();
statusBar.setText ( "Format : " + selectedFormat );
currentFormat = selectedFormat;
visualContainer.setPreferredSize ( currentFormat.getSize() );
setSize ( imageSize.width, imageSize.height + statusBar.getHeight() + toolbar.getHeight() );
else
System.out.println ("Visual component not an instance of FormatControl");
statusBar.setText ( "Visual component cannot change format" );
public VideoFormat getFormat ( )
return ( currentFormat );
protected void setUpToolBar ( )
toolbar = new JToolBar();
// Note : If you supply the 16 x 16 bitmaps then you can replace
// the commented line in the MyToolBarAction constructor
formatButton = new MyToolBarAction ( "Resolution", "BtnFormat.jpg" );
captureButton = new MyToolBarAction ( "Capture", "BtnCapture.jpg" );
toolbar.add ( formatButton );
toolbar.add ( captureButton );
getContentPane().add ( toolbar, BorderLayout.NORTH );
protected void toolbarHandler ( MyToolBarAction actionBtn )
if ( actionBtn == formatButton )
Object selected = JOptionPane.showInputDialog (this,
"Select Video format",
"Capture format selection",
JOptionPane.INFORMATION_MESSAGE,
null, // Icon icon,
myFormatList, // videoFormats,
currentFormat );
if ( selected != null )
setFormat ( ((MyVideoFormat)selected).format );
else if ( actionBtn == captureButton )
Image photo = grabFrameImage ( );
if ( photo != null )
MySnapshot snapshot = new MySnapshot ( photo, new Dimension ( imageSize ) );
else
System.err.println ("Error : Could not grab frame");
* autoDetects the first web camera in the system
* searches for video for windows ( vfw ) capture devices
* @returns the device info object if found, null otherwise
public CaptureDeviceInfo autoDetect ( )
Vector list = CaptureDeviceManager.getDeviceList ( null );
CaptureDeviceInfo devInfo = null;
if ( list != null )
String name;
for ( int i=0; i<list.size(); i++ )
devInfo = (CaptureDeviceInfo)list.elementAt ( i );
name = devInfo.getName();
if ( name.startsWith ("vfw:") )
break;
if ( devInfo != null && devInfo.getName().startsWith("vfw:") )
return ( devInfo );
else
for ( int i = 0; i < 10; i++ )
try
name = VFWCapture.capGetDriverDescriptionName ( i );
if (name != null && name.length() > 1)
devInfo = com.sun.media.protocol.vfw.VFWSourceStream.autoDetect ( i );
if ( devInfo != null )
return ( devInfo );
catch ( Exception ioEx )
// ignore errors detecting device
statusBar.setText ( "AutoDetect failed : " + ioEx.getMessage() );
return ( null );
else
return ( null );
* deviceInfo
* @note outputs text information
public void deviceInfo ( )
if ( webCamDeviceInfo != null )
Format[] formats = webCamDeviceInfo.getFormats();
if ( ( formats != null ) && ( formats.length > 0 ) )
for ( int i=0; i<formats.length; i++ )
Format aFormat = formats;
if ( aFormat instanceof VideoFormat )
Dimension dim = ((VideoFormat)aFormat).getSize();
// System.out.println ("Video Format " + i + " : " + formats[i].getEncoding() + ", " + dim.width + " x " + dim.height );
else
System.out.println ("Error : No web cam detected");
* grabs a frame's buffer from the web cam / device
* @returns A frames buffer
public Buffer grabFrameBuffer ( )
if ( player != null )
FrameGrabbingControl fgc = (FrameGrabbingControl)player.getControl ( "javax.media.control.FrameGrabbingControl" );
if ( fgc != null )
return ( fgc.grabFrame(); );
else
System.err.println ("Error : FrameGrabbingControl is null");
return ( null );
else
System.err.println ("Error : Player is null");
return ( null );
* grabs a frame's buffer, as an image, from the web cam / device
* @returns A frames buffer as an image
public Image grabFrameImage ( )
Buffer buffer = grabFrameBuffer();
if ( buffer != null )
// Convert it to an image
BufferToImage btoi = new BufferToImage ( (VideoFormat)buffer.getFormat() );
if ( btoi != null )
Image image = btoi.createImage ( buffer );
if ( image != null )
return ( image );
else
System.err.println ("Error : BufferToImage cannot convert buffer");
return ( null );
else
System.err.println ("Error : cannot create BufferToImage instance");
return ( null );
else
System.out.println ("Error : Buffer grabbed is null");
return ( null );
* Closes and cleans up the player
public void playerClose ( )
if ( player != null )
player.close();
player.deallocate();
player = null;
public void windowClosing ( WindowEvent e )
playerClose();
System.exit ( 1 );
public void componentResized ( ComponentEvent e )
Dimension dim = getSize();
boolean mustResize = false;
if ( dim.width < MIN_WIDTH )
dim.width = MIN_WIDTH;
mustResize = true;
if ( dim.height < MIN_HEIGHT )
dim.height = MIN_HEIGHT;
mustResize = true;
if ( mustResize )
setSize ( dim );
public void windowActivated ( WindowEvent e ) { }
public void windowClosed ( WindowEvent e ) { }
public void windowDeactivated ( WindowEvent e ) { }
public void windowDeiconified ( WindowEvent e ) { }
public void windowIconified ( WindowEvent e ) { }
public void windowOpened ( WindowEvent e ) { }
public void componentHidden(ComponentEvent e) { }
public void componentMoved(ComponentEvent e) { }
public void componentShown(ComponentEvent e) { }
protected void finalize ( ) throws Throwable
playerClose();
super.finalize();
class MyToolBarAction extends AbstractAction
public MyToolBarAction ( String name, String imagefile )
// Note : Use version this if you supply your own toolbar icons
// super ( name, new ImageIcon ( imagefile ) );
super ( name );
public void actionPerformed ( ActionEvent event )
toolbarHandler ( this );
class MyVideoFormat
public VideoFormat format;
public MyVideoFormat ( VideoFormat _format )
format = _format;
public String toString ( )
Dimension dim = format.getSize();
return ( format.getEncoding() + " [ " + dim.width + " x " + dim.height + " ]" );
class MySnapshot extends JFrame
protected Image photo = null;
protected int shotNumber;
public MySnapshot ( Image grabbedFrame, Dimension imageSize )
super ( );
shotNumber = shotCounter++;
setTitle ( "Photo" + shotNumber );
photo = grabbedFrame;
setDefaultCloseOperation ( WindowConstants.DISPOSE_ON_CLOSE );
int imageHeight = photo.getWidth ( this );
int imageWidth = photo.getHeight ( this );
setSize ( imageSize.width, imageSize.height );
final FileDialog saveDialog = new FileDialog ( this, "Save JPEG", FileDialog.SAVE );
final JFrame thisCopy = this;
saveDialog.setFile ( "Photo" + shotNumber );
addWindowListener ( new WindowAdapter()
public void windowClosing ( WindowEvent e )
saveDialog.show();
String filename = saveDialog.getFile();
if ( filename != null )
if ( saveJPEG ( filename ) )
JOptionPane.showMessageDialog ( thisCopy, "Saved " + filename );
setVisible ( false );
dispose();
else
JOptionPane.showMessageDialog ( thisCopy, "Error saving " + filename );
else
setVisible ( false );
dispose();
setVisible ( true );
public void paint ( Graphics g )
g.drawImage ( photo, 0, 0, getWidth(), getHeight(), this );
* Saves an image as a JPEG
* @params the image to save
* @params the filename to save the image as
public boolean saveJPEG ( String filename )
boolean saved = false;
BufferedImage bi = new BufferedImage ( photo.getWidth(null),
photo.getHeight(null),
BufferedImage.TYPE_INT_RGB );
Graphics2D g2 = bi.createGraphics();
g2.drawImage ( photo, null, null );
FileOutputStream out = null;
try
out = new FileOutputStream ( filename );
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder ( out );
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam ( bi );
param.setQuality ( 1.0f, false ); // 100% high quality setting, no compression
encoder.setJPEGEncodeParam ( param );
encoder.encode ( bi );
out.close();
saved = true;
catch ( Exception ex )
System.out.println ("Error saving JPEG : " + ex.getMessage() );
return ( saved );
} // of MySnapshot
public static void main (String[] args )
try
JWebCam myWebCam = new JWebCam ( "TimeSlice Web Cam Capture" );
myWebCam.setVisible ( true );
if ( !myWebCam.initialise() )
System.out.println ("Web Cam not detected / initialised");
catch ( Exception ex )
ex.printStackTrace(); -
Satellite T130: inbuilt web camera has stopped working
Hi, I have the same problem of the question bellow, like I have looked around and I was not able to find the answer I need.
I have a Satellite T130 and, suddenly, the inbuilt web camera has stopped working properly. A blue light is on, but there is no image. What can I do?
Thank youHi,
the blue light is beside the web cam, on the top of screen. But this light is on when I try to use the web cam in anywhere, like Skype, Msn or even in programs in the computer that only take a pictue or make a video of you, without ineternet (I do not know the name of this program). But it seems that computer and the programs recognize the web cam, because there is no messages when I turn on the web cam.
In Skype settings is the same, there is nothing wrong, there is no different message. The only thing is when I try to take picture a message appears: "failed", but the video seems to record normally, although everythng is black.
Could you understand what I meant?
Sorry about my english.... -
I have a Satellite P855, and I've recently been having trouble with my web camera while on Skype.
Throughout my video call, my picture will freeze. If I try to turn the camera off and on to fix this problem, Skype no longer recognizes my camera. I have to quit and re-log into Skype to have video again. Then, after maybe 20 minutes, the whole process starts over again.
I've had this computer for over a year, so I know it is not a problem with the original manufacturing.
Any advice?I have a P855-S5102. My part number is PSPKEU-62002, serial number XXXXXXXXX.
I didn't start having troulbe with Skype until about two weeks ago.
[Moderator edit to remove serial number.] -
3rd party mic & web-cam for 1GHz mirror G4
hi,
I have try the old apple mic & got a mic froma computer store but all doesn't work...
Seems like all the salesman does not know much about mac and keep giving me the wrong information... and they don't accept returns...
Pls recommend any cheap or good mic & web-cam that works for my G4.
Also is there anyway to tell if the product works with mac as the packaging normally only give infor for PC. I have so far collected alot of 'junk' which the salesman promise it works with all computer but that doesn't seems the case... not for me...
I'll be using the mic & web-cam mostly on skype. ThanksHi-
The following is a list of Mac compatible web cams, particularly when used with Skype:
http://forum.skype.com/index.php?showtopic=69289
Note that many use the Macam driver, or for example, as in the case of the Logitech QuickCam Ultra, no driver. I use the Ultra, and have had no problems. Most of the logitech line, as well as the Macally camera, will give good results
To use many of the cameras with iChat, the iChatUSBCam is the ticket. -
i just got a Presario CQ56-219WM laptop. It looks like it has a Web Cam. The "get to know your PC" diagram points to the little red plastic rectagle above the monitor screen in the middle there, and calls it "web cam". However, I have no idea how to get it to work. When I go into the CyberLink YouCam program, it says "No Web Cam detected. try plugging web cam into computer now. If you have an intergrated camera, make sure it is turned on"
It seems that I have an integrated camera, but I can't figure out how to turn it on. I looked on some other chats about this problem, but none pertained to my model type, and the few things I tried didn't get me anywhere.Your CQ56-219WM does not include a built-in webcam. If you wish to use a webcam with this model you will need to purchase a USB webcam and plug it in.
-
Neither Skype nor test web sites can detect a web camera.
In Control Panel, the integrated camera is reported as functioning properly.
I have updated the integrated driver software, updated DirectX. No change.
Any ideas?Wow that's pretty strange and I'm wondering if it's a bug within Vista.
Out of curiosity, can you download this free video capturing software and this works pretty well in detecting a webcam...
http://www.nchsoftware.com/capture/
I hope this works for you and I'm totally lost for more additional clues. Is your T400 still under warranty? -
Internal microphone and web camera not being detected
I've just bought last week this toshiba Satellite L845D-SP4387RM model and my microphone was working just fine a few days ago, yesterday that I wanted to use it for skype it just stoped working, actually the computer does not detect any internal micro nor the internal web camera, I've allready tried reinstalling the Conexant Audio drivers, restoring Windows 8, reseting BIOS to default configuration, I've also tried going to control panel and check if the micro and camera are enabled but the internal ones just does not appear on the list, the only ones that appear are the corresponding to external ones. I don't believe that the problem is hardware malfunction because everything was just fine a few days ago.
Some help on how to fix this problem would be greatly appreciated!After some reading I found that the intenal camera and microphone are connected with the same cable, so I believe that if the camera is not working then the micro will not work too, I'm triying to fix this, perhaps the problem is with the camera drivers, Does anybody have any idea that will provide me with some help? thx.
-
How do I use an external web cam with my Mac Pro on Skype?
I am trying to use my MAC Pro with an external web cam (Logitec C615) on Skype. I want to use the external so that I can pan and video a room full of people. Kind of hard to do with the built in cam.
How do I tell the Mac Pro to use the external for Skype and not the built in?Go to Skype preferences, click on audio/video, and choose your camera from the drop down menu...
Maybe you are looking for
-
I am trying to sync a iPhone 3GS (I have 4 phones on my account) and I haven't sync'd it since October? (It's my brother's phone and he doesn't use a lot of the features and wasn't willing to give it up for me to do so) anyway, I have over the years
-
Event handler when using partial page refresh ?
Hi I have a calendar, which uses partial page refresh. The problem is how to make javascript wait until the calendar has loaded and then do some updates on the calendar (after the user has pressed the next button that runs apex.widget.calendar.ajax_c
-
Wired keyboard not being found
Every time I power down my iMac it will not find the wired keyboard on start up instead it stalls looking for a bluetooth wireless keyboard. I know I can get around this by resetting the peripheral parameters each time by holding down CMD,ALT,P and R
-
Everytime I open iPhoto, the number of items in my albums change.
-
N95 V20 Welcome Note/Logo BUG!
Hello Everyone After I upgraded to V20 from V11, I have this bug. Welcome Note /Logo does not work properly anymore. Forexample; If I write a text to show up when the phone boots, some times (one in 10) it does not show up, the blue NOKIA logo appear