## shell-recorder shell-recorder — Record from a ClutterStage |

## Synopsis

                        ShellRecorder;
                        ShellRecorderClass;
    void                shell_recorder_close                (ShellRecorder *recorder);
    gboolean            shell_recorder_is_recording         (ShellRecorder *recorder);
    ShellRecorder *     shell_recorder_new                  (ClutterStage *stage);
    void                shell_recorder_pause                (ShellRecorder *recorder);
    gboolean            shell_recorder_record               (ShellRecorder *recorder);
    void                shell_recorder_set_filename         (ShellRecorder *recorder,
                                                             const char *filename);
    void                shell_recorder_set_framerate        (ShellRecorder *recorder,
                                                             int framerate);
    void                shell_recorder_set_pipeline         (ShellRecorder *recorder,
                                                             const char *pipeline);

## Object Hierarchy

      GObject
       +----ShellRecorder

## Properties

      "filename"                 gchar*                : Read / Write
      "framerate"                gint                  : Read / Write
      "pipeline"                 gchar*                : Read / Write
      "stage"                    ClutterStage*         : Read / Write

## Description

The ShellRecorder object is used to make recordings ("screencasts") of a ClutterStage. Recording is done via GStreamer. The default is to encode as a Theora movie and write it to a file in the current directory named after the date, but the encoding and output can be configured.

## Details

### ShellRecorder

    typedef struct _ShellRecorder ShellRecorder;

### ShellRecorderClass

    typedef struct _ShellRecorderClass ShellRecorderClass;

### shell_recorder_close ()

    void                shell_recorder_close                (ShellRecorder *recorder);

Stops recording. It's possible to call `shell_recorder_record()` again to reopen a new recording stream, but unless change the recording filename, this may result in the old recording being overwritten.

`recorder` : | the ShellRecorder

### shell_recorder_is_recording ()

    gboolean            shell_recorder_is_recording         (ShellRecorder *recorder);

Determine if recording is currently in progress. (The recorder is not paused or closed.)

Returns : | `TRUE` if the recorder is currently recording.

### shell_recorder_new ()

    ShellRecorder *     shell_recorder_new                  (ClutterStage *stage);

Create a new ShellRecorder to record movies of a ClutterStage

`stage` : | The ClutterStage
Returns : | The newly created ShellRecorder object

### shell_recorder_pause ()

    void                shell_recorder_pause                (ShellRecorder *recorder);

Temporarily stop recording. If the specified filename includes the `c` escape, then the stream is closed and a new stream with an incremented counter will be created. Otherwise the stream is paused and will be continued when `shell_recorder_record()` is next called.

`recorder` : | the ShellRecorder

### shell_recorder_record ()

    gboolean            shell_recorder_record               (ShellRecorder *recorder);

Starts recording, or continues a recording that was previously paused. Starting the recording may fail if the output file cannot be opened, or if the output stream cannot be created for other reasons. In that case a warning is printed to stderr. There is no way currently to get details on how recording failed to start.

An extra reference count is added to the recorder if recording is succesfully started; the recording object will not be freed until recording is stopped even if the creator no longer holds a reference. Recording is automatically stopped if the stage is destroyed.

`recorder` : | the ShellRecorder
Returns : | `TRUE` if recording was succesfully started

### shell_recorder_set_filename ()

    void                shell_recorder_set_filename         (ShellRecorder *recorder,
                                                             const char *filename);

Sets the filename that will be used when creating output files. This is only used if the configured pipeline has an unconnected source pad (as the default pipeline does). If the pipeline is complete, then the filename is unused. The provided string is used as a template.It can contain the following escapes:

`d`: The current date as YYYYYMMDD `u`: A string added to make the filename unique. '', 'a', 'b', ... 'aa', 'ab', .. `c`: A counter that is updated (opening a new file) each time the recording stream is paused. %%: A literal percent

The default value is 'shell-`d`%u-`c`.ogg'.

`recorder` : | the ShellRecorder
`filename` : | the filename template to use for output files, or `NULL` for the defalt value.

### shell_recorder_set_framerate ()

    void                shell_recorder_set_framerate        (ShellRecorder *recorder,
                                                             int framerate);

Sets the number of frames per second we try to record. Less frames will be recorded when the screen doesn't need to be redrawn this quickly. (This value will also be set as the framerate for the GStreamer pipeline; whether that has an effect on the resulting video will depend on the details of the pipeline and the codec. The default encoding to webm format doesn't pay attention to the pipeline framerate.)

The default value is 30.

`recorder` : | the ShellRecorder
`framerate` : | Framerate used for resulting video in frames-per-second.

### shell_recorder_set_pipeline ()

    void                shell_recorder_set_pipeline         (ShellRecorder *recorder,
                                                             const char *pipeline);

Sets the GStreamer pipeline used to encode recordings. It follows the syntax used for gst-launch. The pipeline should have an unconnected sink pad where the recorded video is recorded. It will normally have a unconnected source pad; output from that pad will be written into the output file. (See `shell_recorder_set_filename()`.) However the pipeline can also take care of its own output - this might be used to send the output to an icecast server via shout2send or similar.

The default value is 'vp8enc quality=8 speed=6 threads=`T` ! queue ! webmmux'

`recorder` : | the ShellRecorder
`pipeline` : | the GStreamer pipeline used to encode recordings or `NULL` for the default value. [allow-none]

## Property Details

### The `"filename"` property

      "filename"                 gchar*                : Read / Write

The filename template to use for output files.

Default value: NULL

### The `"framerate"` property

      "framerate"                gint                  : Read / Write

Framerate used for resulting video in frames-per-second.

Allowed values: >= 0

Default value: 30

### The `"pipeline"` property

      "pipeline"                 gchar*                : Read / Write

GStreamer pipeline description to encode recordings.

Default value: NULL

### The `"stage"` property

      "stage"                    ClutterStage*         : Read / Write

Stage to record.