Loading...
Searching...
No Matches
record.c File Reference
`#include <arpa/inet.h>`
`#include <sys/stat.h>`
`#include <errno.h>`
`#include <libgen.h>`
`#include <glib.h>`
`#include <jansson.h>`
`#include "record.h"`
`#include "debug.h"`
`#include "utils.h"`
Include dependency graph for record.c:

## Macros

#define | htonll(x) ((1==htonl(1)) ? (x) : ((gint64)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32))
#define | ntohll(x) ((1==ntohl(1)) ? (x) : ((gint64)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32))

## Functions

void | janus_recorder_init (gboolean tempnames, const char *extension)
| Initialize the recorder code.
void | janus_recorder_deinit (void)
| De-initialize the recorder code.
janus_recorder * | janus_recorder_create (const char *dir, const char *codec, const char *filename)
| Create a new recorder.
janus_recorder * | janus_recorder_create_full (const char *dir, const char *codec, const char *fmtp, const char *filename)
| Create a new recorder with additional info.
int | janus_recorder_pause (janus_recorder *recorder)
| Pause recording packets.
int | janus_recorder_resume (janus_recorder *recorder)
| Resume recording packets.
int | janus_recorder_add_extmap (janus_recorder *recorder, int id, const char *extmap)
| Add an RTP extension to this recording.
int | janus_recorder_description (janus_recorder *recorder, const char *description)
| Set the description for this recording.
int | janus_recorder_opusred (janus_recorder *recorder, int red_pt)
| Mark this recording as using RED for audio.
int | janus_recorder_encrypted (janus_recorder *recorder)
| Mark this recorder as end-to-end encrypted (e.g., via Insertable Streams)
int | janus_recorder_save_frame (janus_recorder *recorder, char *buffer, uint length)
| Save an RTP frame in the recorder.
int | janus_recorder_close (janus_recorder *recorder)
| Close the recorder.
void | janus_recorder_destroy (janus_recorder *recorder)
| Destroy the recorder instance.

## Macro Definition Documentation

## htonll

#define htonll | ( |  | x | ) | ((1==htonl(1)) ? (x) : ((gint64)htonl((x) & 0xFFFFFFFF) << 32) | htonl((x) >> 32))

## ntohll

#define ntohll | ( |  | x | ) | ((1==ntohl(1)) ? (x) : ((gint64)ntohl((x) & 0xFFFFFFFF) << 32) | ntohl((x) >> 32))

## Function Documentation

## janus_recorder_add_extmap()

int janus_recorder_add_extmap | ( | janus_recorder * | recorder,
|  | int | id,
|  | const char * | extmap
| ) |  |

Add an RTP extension to this recording.

Note
  This will only be possible BEFORE the first frame is written, as it needs to be reflected in the .mjr header: doing this after that will return an error.

Parameters

  [in] | recorder | The janus_recorder instance to add the extension to
  [in] | id | Numeric ID of the RTP extension
  [in] | extmap | Namespace of the RTP extension

Returns
  0 in case of success, a negative integer otherwise

## janus_recorder_close()

int janus_recorder_close | ( | janus_recorder * | recorder | ) |

Close the recorder.

Parameters

  [in] | recorder | The janus_recorder instance to close

Returns
  0 in case of success, a negative integer otherwise

## janus_recorder_create()

janus_recorder * janus_recorder_create | ( | const char * | dir,
|  | const char * | codec,
|  | const char * | filename
| ) |  |

Create a new recorder.

Note
  If no target directory is provided, the current directory will be used. If no filename is passed, a random filename will be used.

Parameters

  [in] | dir | Path of the directory to save the recording into (will try to create it if it doesn't exist)
  [in] | codec | Codec the packets to record are encoded in ("vp8", "opus", "h264", "g711", "vp9")
  [in] | filename | Filename to use for the recording

Returns
  A valid janus_recorder instance in case of success, NULL otherwise

## janus_recorder_create_full()

janus_recorder * janus_recorder_create_full | ( | const char * | dir,
|  | const char * | codec,
|  | const char * | fmtp,
|  | const char * | filename
| ) |  |

Create a new recorder with additional info.

Note
  This is to allow adding more arguments to janus_recorder_create, but still keep janus_recorder_create in place for backwards compatibility.

Parameters

  [in] | dir | Path of the directory to save the recording into (will try to create it if it doesn't exist)
  [in] | codec | Codec the packets to record are encoded in ("vp8", "opus", "h264", "g711", "vp9")
  [in] | fmtp | Codec-specific details (e.g., the H.264 or VP9 profile)
  [in] | filename | Filename to use for the recording

Returns
  A valid janus_recorder instance in case of success, NULL otherwise

## janus_recorder_deinit()

void janus_recorder_deinit | ( | void |  | ) |

De-initialize the recorder code.

## janus_recorder_description()

int janus_recorder_description | ( | janus_recorder * | recorder,
|  | const char * | description
| ) |  |

Set the description for this recording.

Parameters

  [in] | recorder | The janus_recorder instance to add the description to
  [in] | description | The description

Returns
  0 in case of success, a negative integer otherwise

## janus_recorder_destroy()

void janus_recorder_destroy | ( | janus_recorder * | recorder | ) |

Destroy the recorder instance.

Parameters

  [in] | recorder | The janus_recorder instance to destroy

## janus_recorder_encrypted()

int janus_recorder_encrypted | ( | janus_recorder * | recorder | ) |

Mark this recorder as end-to-end encrypted (e.g., via Insertable Streams)

Note
  This will only be possible BEFORE the first frame is written, as it needs to be reflected in the .mjr header: doing this after that will return an error. Also notice that an encrypted recording will NOT be processable with `janus-pp-rec` out of the box, since the post-processor will not have access to unencrypted media

Parameters

  [in] | recorder | The janus_recorder instance to mark as encrypted

Returns
  0 in case of success, a negative integer otherwise

## janus_recorder_init()

void janus_recorder_init | ( | gboolean | tempnames,
|  | const char * | extension
| ) |  |

Initialize the recorder code.

Parameters

  [in] | tempnames | Whether the filenames should have a temporary extension, while saving, or not
  [in] | extension | Extension to add in case tempnames is true

## janus_recorder_opusred()

int janus_recorder_opusred | ( | janus_recorder * | recorder,
|  | int | red_pt
| ) |  |

Mark this recording as using RED for audio.

Note
  This will only be possible BEFORE the first frame is written, as it needs to be reflected in the .mjr header: doing this after that will return an error.

Parameters

  [in] | recorder | The janus_recorder instance to configure
  [in] | red_pt | Payload type of RED

Returns
  0 in case of success, a negative integer otherwise

## janus_recorder_pause()

int janus_recorder_pause | ( | janus_recorder * | recorder | ) |

Pause recording packets.

Note
  This is to allow pause and resume recorder functionality.

Parameters

  [in] | recorder | The janus_recorder to pause

Returns
  0 in case of success, a negative integer otherwise

## janus_recorder_resume()

int janus_recorder_resume | ( | janus_recorder * | recorder | ) |

Resume recording packets.

Note
  This is to allow pause and resume recorder functionality.

Parameters

  [in] | recorder | The janus_recorder to resume

Returns
  0 in case of success, a negative integer otherwise

## janus_recorder_save_frame()

int janus_recorder_save_frame | ( | janus_recorder * | recorder,
|  | char * | buffer,
|  | uint | length
| ) |  |

Save an RTP frame in the recorder.

Parameters

  [in] | recorder | The janus_recorder instance to save the frame to
  [in] | buffer | The frame data to save
  [in] | length | The frame data length

Returns
  0 in case of success, a negative integer otherwise