Overview | Package | Class | Tree | Deprecated | Index | Help
| Copyright 2012-04-26 Werner Randelshofer
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.monte.screenrecorder
Class ScreenRecorder

    java.lang.Object
      org.monte.media.beans.AbstractStateModel
          org.monte.screenrecorder.ScreenRecorder

    public class ScreenRecorder

extends AbstractStateModel

A screen recorder written in pure Java.

Captures the screen, the mouse cursor and audio.

This recorder uses four threads. Three capture threads for screen, mouse cursor and audio, and one output thread for the movie writer.

FIXME - This class is a horrible mess.

Version:
  $Id: ScreenRecorder.java 210 2012-04-26 08:34:24Z werner $
Author:
  Werner Randelshofer

Nested Class Summary
`static class` | `ScreenRecorder.State`

Field Summary
`protected int` | `audioTrack` Id of the audio track.
`static java.lang.String` | `ENCODING_BLACK_CURSOR` "Encoding" for black mouse cursor.
`static java.lang.String` | `ENCODING_WHITE_CURSOR` "Encoding" for white mouse cursor.
`protected int` | `videoTrack` Id of the video track.

Fields inherited from class org.monte.media.beans.AbstractStateModel
`changeEvent, listenerList`

Constructor Summary
`ScreenRecorder(java.awt.GraphicsConfiguration cfg)` Creates a screen recorder.
`ScreenRecorder(java.awt.GraphicsConfiguration cfg, Format fileFormat, Format screenFormat, Format mouseFormat, Format audioFormat)` Creates a screen recorder.
`ScreenRecorder(java.awt.GraphicsConfiguration cfg, java.awt.Rectangle captureArea, Format fileFormat, Format screenFormat, Format mouseFormat, Format audioFormat)` Creates a screen recorder.

Method Summary
`protected java.io.File` | `createMovieFile(Format fileFormat)` Creates a file for recording the movie.
`protected void` | `createMovieWriter()`
`java.util.List<java.io.File>` | `getCreatedMovieFiles()` Returns a list of all files that the screen recorder created.
`ScreenRecorder.State` | `getState()` Returns the state of the recorder.
`void` | `start()` Starts the screen recorder.
`void` | `stop()` Stops the screen recorder.
`protected void` | `write(Buffer buf)` Writes a buffer into the movie.

Methods inherited from class org.monte.media.beans.AbstractStateModel
`addChangeListener, fireStateChanged, removeChangeListener`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### ENCODING_BLACK_CURSOR

    public static final java.lang.String ENCODING_BLACK_CURSOR

  "Encoding" for black mouse cursor.

  See Also:
    Constant Field Values

### ENCODING_WHITE_CURSOR

    public static final java.lang.String ENCODING_WHITE_CURSOR

  "Encoding" for white mouse cursor.

  See Also:
    Constant Field Values

### videoTrack

    protected int videoTrack

  Id of the video track.

### audioTrack

    protected int audioTrack

  Id of the audio track.

Constructor Detail

### ScreenRecorder

    public ScreenRecorder(java.awt.GraphicsConfiguration cfg)
                   throws java.io.IOException,
                          java.awt.AWTException

  Creates a screen recorder.

  Parameters:
    `cfg` - Graphics configuration of the capture screen.
  Throws:
    `java.io.IOException`
    `java.awt.AWTException`

### ScreenRecorder

    public ScreenRecorder(java.awt.GraphicsConfiguration cfg,
                          Format fileFormat,
                          Format screenFormat,
                          Format mouseFormat,
                          Format audioFormat)
                   throws java.io.IOException,
                          java.awt.AWTException

  Creates a screen recorder.

  Parameters:
    `cfg` - Graphics configuration of the capture screen.
    `fileFormat` - The file format "AVI" or "QuickTime".
    `screenFormat` - The video format for screen capture.
    `mouseFormat` - The video format for mouse capture. The `EncodingKey` must be ENCODING_BLACK_CURSOR or ENCODING_WHITE_CURSOR. The `SampleRateKey` can be independent from the `screenFormat`. Specify null if you don't want to capture the mouse cursor.
    `audioFormat` - The audio format for audio capture. Specify null if you don't want audio capture.
  Throws:
    `java.io.IOException`
    `java.awt.AWTException`

### ScreenRecorder

    public ScreenRecorder(java.awt.GraphicsConfiguration cfg,
                          java.awt.Rectangle captureArea,
                          Format fileFormat,
                          Format screenFormat,
                          Format mouseFormat,
                          Format audioFormat)
                   throws java.io.IOException,
                          java.awt.AWTException

  Creates a screen recorder.

  Parameters:
    `cfg` - Graphics configuration of the capture screen.
    `captureArea` - Defines the area of the screen that shall be captured.
    `fileFormat` - The file format "AVI" or "QuickTime".
    `screenFormat` - The video format for screen capture.
    `mouseFormat` - The video format for mouse capture. The `EncodingKey` must be ENCODING_BLACK_CURSOR or ENCODING_WHITE_CURSOR. The `SampleRateKey` can be independent from the `screenFormat`. Specify null if you don't want to capture the mouse cursor.
    `audioFormat` - The audio format for audio capture. Specify null if you don't want audio capture.
  Throws:
    `java.io.IOException`
    `java.awt.AWTException`

Method Detail

### createMovieWriter

    protected void createMovieWriter()
                              throws java.io.IOException

  Throws:
    `java.io.IOException`

### getCreatedMovieFiles

    public java.util.List<java.io.File> getCreatedMovieFiles()

  Returns a list of all files that the screen recorder created.

### createMovieFile

    protected java.io.File createMovieFile(Format fileFormat)
                                    throws java.io.IOException

  Creates a file for recording the movie.

  This implementation creates a file in the users "Video" folder on Windows, or in the users "Movies" folders on Mac OS X.

  You can override this method, if you would like to create a movie file at a different location.

  Parameters:
    `fileFormat` -
  Returns:
    the file
  Throws:
    `java.io.IOException`

### getState

    public ScreenRecorder.State getState()

  Returns the state of the recorder.

### start

    public void start()
               throws java.io.IOException

  Starts the screen recorder.

  Throws:
    `java.io.IOException`

### stop

    public void stop()
              throws java.io.IOException

  Stops the screen recorder.

  Stopping the screen recorder may take several seconds, because audio capture uses a large capture buffer. Also, the MovieWriter has to finish up a movie file which may take some time depending on the amount of meta-data that needs to be written.

  Throws:
    `java.io.IOException`

### write

    protected void write(Buffer buf)
                  throws java.io.IOException,
                         java.lang.InterruptedException

  Writes a buffer into the movie. Since the file system may not be immediately available at all times, we do this asynchronously.

  The buffer is copied and passed to the writer queue, which is consumed by the writer thread. See method startWriter().

  AVI does not support a variable frame rate for the video track. Since we can not capture frames at a fixed frame rate we have to resend the same captured screen multiple times to the writer.

  This method is called asynchronously from different threads.

  You can override this method if you wish to process the media data.

  Parameters:
    `buf` - A buffer with un-encoded media data. If `buf.track==videoTrack`, then the buffer contains a `BufferedImage` in `buffer.data` and a `Point` in `buffer.header` with the recorded mouse location. The header is null if the mouse is outside the capture area, or mouse recording has not been enabled.
  Throws:
    `java.io.IOException`
    `java.lang.InterruptedException`

Overview | Package | Class | Tree | Deprecated | Index | Help
| Copyright 2012-04-26 Werner Randelshofer
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD