Fork me on GitHub
Macros | Functions
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. More...
 
void janus_recorder_deinit (void)
 De-initialize the recorder code. More...
 
janus_recorderjanus_recorder_create (const char *dir, const char *codec, const char *filename)
 Create a new recorder. More...
 
janus_recorderjanus_recorder_create_full (const char *dir, const char *codec, const char *fmtp, const char *filename)
 Create a new recorder with additional info. More...
 
int janus_recorder_add_extmap (janus_recorder *recorder, int id, const char *extmap)
 Add an RTP extension to this recording. More...
 
int janus_recorder_encrypted (janus_recorder *recorder)
 Mark this recorder as end-to-end encrypted (e.g., via Insertable Streams) More...
 
int janus_recorder_save_frame (janus_recorder *recorder, char *buffer, uint length)
 Save an RTP frame in the recorder. More...
 
int janus_recorder_close (janus_recorder *recorder)
 Close the recorder. More...
 
void janus_recorder_destroy (janus_recorder *recorder)
 Destroy the recorder instance. More...
 

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]recorderThe janus_recorder instance to add the extension to
[in]idNumeric ID of the RTP extension
[in]extmapNamespace 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]recorderThe 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]dirPath of the directory to save the recording into (will try to create it if it doesn't exist)
[in]codecCodec the packets to record are encoded in ("vp8", "opus", "h264", "g711", "vp9")
[in]filenameFilename 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]dirPath of the directory to save the recording into (will try to create it if it doesn't exist)
[in]codecCodec the packets to record are encoded in ("vp8", "opus", "h264", "g711", "vp9")
[in]fmtpCodec-specific details (e.g., the H.264 or VP9 profile)
[in]filenameFilename 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_destroy()

void janus_recorder_destroy ( janus_recorder recorder)

Destroy the recorder instance.

Parameters
[in]recorderThe 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]recorderThe 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]tempnamesWhether the filenames should have a temporary extension, while saving, or not
[in]extensionExtension to add in case tempnames is true

◆ 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]recorderThe janus_recorder instance to save the frame to
[in]bufferThe frame data to save
[in]lengthThe frame data length
Returns
0 in case of success, a negative integer otherwise