Loading...
Searching...
No Matches
plugin.h
Go to the documentation of this file.
#ifndef JANUS_PLUGIN_H
#define JANUS_PLUGIN_H
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <inttypes.h>
#include <glib.h>
#include "refcount.h"
#define JANUS_PLUGIN_API_VERSION 102
#define JANUS_PLUGIN_INIT(...) { \
.init = NULL, \
.destroy = NULL, \
.get_api_compatibility = NULL, \
.get_version = NULL, \
.get_version_string = NULL, \
.get_description = NULL, \
.get_name = NULL, \
.get_author = NULL, \
.get_package = NULL, \
.create_session = NULL, \
.handle_message = NULL, \
.handle_admin_message = NULL, \
.setup_media = NULL, \
.incoming_rtp = NULL, \
.incoming_rtcp = NULL, \
.incoming_data = NULL, \
.data_ready = NULL, \
.slow_link = NULL, \
.hangup_media = NULL, \
.destroy_session = NULL, \
.query_session = NULL, \
## __VA_ARGS__ }
typedef struct janus_callbacks janus_callbacks;
typedef struct janus_plugin janus_plugin;
typedef struct janus_plugin_session janus_plugin_session;
typedef struct janus_plugin_result janus_plugin_result;
typedef struct janus_plugin_rtp janus_plugin_rtp;
typedef struct janus_plugin_rtp_extensions janus_plugin_rtp_extensions;
typedef struct janus_plugin_rtcp janus_plugin_rtcp;
typedef struct janus_plugin_data janus_plugin_data;
/* Use forward declaration to avoid including jansson.h */
typedef struct json_t json_t;
struct janus_plugin_session {
void *gateway_handle;
void *plugin_handle;
volatile gint stopped;
janus_refcount ref;
};
struct janus_plugin {
int (* const init)(janus_callbacks *callback, const char *config_path);
void (* const destroy)(void);
int (* const get_api_compatibility)(void);
int (* const get_version)(void);
const char *(* const get_version_string)(void);
const char *(* const get_description)(void);
const char *(* const get_name)(void);
const char *(* const get_author)(void);
const char *(* const get_package)(void);
void (* const create_session)(janus_plugin_session *handle, int *error);
struct janus_plugin_result * (* const handle_message)(janus_plugin_session *handle, char *transaction, json_t *message, json_t *jsep);
struct json_t * (* const handle_admin_message)(json_t *message);
void (* const setup_media)(janus_plugin_session *handle);
void (* const incoming_rtp)(janus_plugin_session *handle, janus_plugin_rtp *packet);
void (* const incoming_rtcp)(janus_plugin_session *handle, janus_plugin_rtcp *packet);
void (* const incoming_data)(janus_plugin_session *handle, janus_plugin_data *packet);
void (* const data_ready)(janus_plugin_session *handle);
void (* const slow_link)(janus_plugin_session *handle, int mindex, gboolean video, gboolean uplink);
void (* const hangup_media)(janus_plugin_session *handle);
void (* const destroy_session)(janus_plugin_session *handle, int *error);
json_t *(* const query_session)(janus_plugin_session *handle);
};
struct janus_callbacks {
int (* const push_event)(janus_plugin_session *handle, janus_plugin *plugin, const char *transaction, json_t *message, json_t *jsep);
void (* const relay_rtp)(janus_plugin_session *handle, janus_plugin_rtp *packet);
void (* const relay_rtcp)(janus_plugin_session *handle, janus_plugin_rtcp *packet);
void (* const relay_data)(janus_plugin_session *handle, janus_plugin_data *packet);
void (* const send_pli)(janus_plugin_session *handle);
void (* const send_pli_stream)(janus_plugin_session *handle, int mindex);
void (* const send_remb)(janus_plugin_session *handle, guint32 bitrate);
void (* const close_pc)(janus_plugin_session *handle);
void (* const end_session)(janus_plugin_session *handle);
gboolean (* const events_is_enabled)(void);
void (* const notify_event)(janus_plugin *plugin, janus_plugin_session *handle, json_t *event);
gboolean (* const auth_is_signed)(void);
gboolean (* const auth_is_signature_valid)(janus_plugin *plugin, const char *token);
gboolean (* const auth_signature_contains)(janus_plugin *plugin, const char *token, const char *descriptor);
};
typedef janus_plugin* create_p(void);
typedef enum janus_plugin_result_type {
JANUS_PLUGIN_ERROR = -1,
JANUS_PLUGIN_OK,
JANUS_PLUGIN_OK_WAIT,
} janus_plugin_result_type;
struct janus_plugin_result {
janus_plugin_result_type type;
const char *text;
json_t *content;
};
janus_plugin_result *janus_plugin_result_new(janus_plugin_result_type type, const char *text, json_t *content);
void janus_plugin_result_destroy(janus_plugin_result *result);
struct janus_plugin_rtp_extensions {
int8_t audio_level;
gboolean audio_level_vad;
int16_t video_rotation;
gboolean video_back_camera;
gboolean video_flipped;
int16_t min_delay, max_delay;
uint8_t dd_len;
uint8_t dd_content[256];
};
void janus_plugin_rtp_extensions_reset(janus_plugin_rtp_extensions *extensions);
struct janus_plugin_rtp {
int mindex;
gboolean video;
char *buffer;
uint16_t length;
janus_plugin_rtp_extensions extensions;
};
void janus_plugin_rtp_reset(janus_plugin_rtp *packet);
struct janus_plugin_rtcp {
int mindex;
gboolean video;
char *buffer;
uint16_t length;
};
void janus_plugin_rtcp_reset(janus_plugin_rtcp *packet);
struct janus_plugin_data {
char *label;
char *protocol;
gboolean binary;
char *buffer;
uint16_t length;
};
void janus_plugin_data_reset(janus_plugin_data *packet);
#endif
json_t
struct json_t json_t
Definition plugin.h:236
janus_plugin_result_type
janus_plugin_result_type
Result types.
Definition plugin.h:463
JANUS_PLUGIN_OK_WAIT
@ JANUS_PLUGIN_OK_WAIT
The request was correctly handled and notifications will follow with more info (asynchronous)
Definition plugin.h:469
JANUS_PLUGIN_ERROR
@ JANUS_PLUGIN_ERROR
A severe error happened (not an application level error)
Definition plugin.h:465
JANUS_PLUGIN_OK
@ JANUS_PLUGIN_OK
The request was correctly handled and a response is provided (synchronous)
Definition plugin.h:467
janus_plugin_rtp_extensions_reset
void janus_plugin_rtp_extensions_reset(janus_plugin_rtp_extensions *extensions)
Helper method to initialise/reset the RTP extensions field.
Definition plugin.c:39
janus_plugin_result_new
janus_plugin_result * janus_plugin_result_new(janus_plugin_result_type type, const char *text, json_t *content)
Helper to quickly create a janus_plugin_result instance.
Definition plugin.c:20
janus_plugin_rtp_reset
void janus_plugin_rtp_reset(janus_plugin_rtp *packet)
Helper method to initialise/reset the RTP packet.
Definition plugin.c:53
janus_plugin_data_reset
void janus_plugin_data_reset(janus_plugin_data *packet)
Helper method to initialise/reset the data message.
Definition plugin.c:66
janus_plugin_rtcp_reset
void janus_plugin_rtcp_reset(janus_plugin_rtcp *packet)
Helper method to initialise/reset the RTCP packet.
Definition plugin.c:60
janus_plugin_result_destroy
void janus_plugin_result_destroy(janus_plugin_result *result)
Helper to quickly destroy a janus_plugin_result instance.
Definition plugin.c:29
create_p
janus_plugin * create_p(void)
The hook that plugins need to implement to be created from the Janus core.
Definition plugin.h:440
refcount.h
Reference counter mechanism.
janus_callbacks
Callbacks to contact the Janus core.
Definition plugin.h:355
janus_callbacks::end_session
void(*const end_session)(janus_plugin_session *handle)
Callback to ask the core to get rid of a plugin/gateway session.
Definition plugin.h:411
janus_callbacks::relay_data
void(*const relay_data)(janus_plugin_session *handle, janus_plugin_data *packet)
Callback to relay SCTP/DataChannel messages to a peer.
Definition plugin.h:381
janus_callbacks::events_is_enabled
gboolean(*const events_is_enabled)(void)
Callback to check whether the event handlers mechanism is enabled.
Definition plugin.h:415
janus_callbacks::close_pc
void(*const close_pc)(janus_plugin_session *handle)
Callback to ask the core to close a WebRTC PeerConnection.
Definition plugin.h:406
janus_callbacks::auth_is_signature_valid
gboolean(*const auth_is_signature_valid)(janus_plugin *plugin, const char *token)
Method to check whether a signed token is valid.
Definition plugin.h:430
janus_callbacks::auth_signature_contains
gboolean(*const auth_signature_contains)(janus_plugin *plugin, const char *token, const char *descriptor)
Method to verify a signed token grants access to a descriptor.
Definition plugin.h:436
janus_callbacks::push_event
int(*const push_event)(janus_plugin_session *handle, janus_plugin *plugin, const char *transaction, json_t *message, json_t *jsep)
Callback to push events/messages to a peer.
Definition plugin.h:365
janus_callbacks::send_pli_stream
void(*const send_pli_stream)(janus_plugin_session *handle, int mindex)
Helper to ask for a keyframe via a RTCP PLI to a specific video stream.
Definition plugin.h:394
janus_callbacks::relay_rtcp
void(*const relay_rtcp)(janus_plugin_session *handle, janus_plugin_rtcp *packet)
Callback to relay RTCP messages to a peer.
Definition plugin.h:374
janus_callbacks::send_pli
void(*const send_pli)(janus_plugin_session *handle)
Helper to ask for a keyframe via a RTCP PLI to all video streams.
Definition plugin.h:387
janus_callbacks::notify_event
void(*const notify_event)(janus_plugin *plugin, janus_plugin_session *handle, json_t *event)
Callback to notify an event to the registered and subscribed event handlers.
Definition plugin.h:421
janus_callbacks::auth_is_signed
gboolean(*const auth_is_signed)(void)
Method to check whether the core is using signed tokens.
Definition plugin.h:425
janus_callbacks::send_remb
void(*const send_remb)(janus_plugin_session *handle, guint32 bitrate)
Helper to ask for a keyframe via a RTCP PLI.
Definition plugin.h:400
janus_callbacks::relay_rtp
void(*const relay_rtp)(janus_plugin_session *handle, janus_plugin_rtp *packet)
Callback to relay RTP packets to a peer.
Definition plugin.h:370
janus_plugin_data
Janus plugin data message.
Definition plugin.h:637
janus_plugin_data::binary
gboolean binary
Whether the message data is text (default=FALSE) or binary.
Definition plugin.h:643
janus_plugin_data::buffer
char * buffer
The message data.
Definition plugin.h:645
janus_plugin_data::protocol
char * protocol
The subprotocol this message refers to.
Definition plugin.h:641
janus_plugin_data::label
char * label
The label this message belongs to.
Definition plugin.h:639
janus_plugin_data::length
uint16_t length
The message length.
Definition plugin.h:647
janus_plugin_result
Janus plugin result.
Definition plugin.h:473
janus_plugin_result::text
const char * text
Text associated with this plugin result.
Definition plugin.h:482
janus_plugin_result::content
json_t * content
Result content.
Definition plugin.h:490
janus_plugin_result::type
janus_plugin_result_type type
Result type.
Definition plugin.h:475
janus_plugin_rtcp
Janus plugin RTCP packet.
Definition plugin.h:613
janus_plugin_rtcp::mindex
int mindex
Index of the stream (relative to the SDP)
Definition plugin.h:620
janus_plugin_rtcp::length
uint16_t length
The packet length.
Definition plugin.h:626
janus_plugin_rtcp::buffer
char * buffer
The packet data.
Definition plugin.h:624
janus_plugin_rtcp::video
gboolean video
Whether this is an audio or video RTCP packet.
Definition plugin.h:622
janus_plugin_rtp_extensions
Janus plugin RTP extensions.
Definition plugin.h:558
janus_plugin_rtp_extensions::video_back_camera
gboolean video_back_camera
Whether the video orientation extension says this is the back camera.
Definition plugin.h:568
janus_plugin_rtp_extensions::min_delay
int16_t min_delay
Min and max playout delay, if available; -1 means no extension.
Definition plugin.h:573
janus_plugin_rtp_extensions::audio_level
int8_t audio_level
Audio level, in DB (0-127, 127=silence); -1 means no extension.
Definition plugin.h:560
janus_plugin_rtp_extensions::video_rotation
int16_t video_rotation
Video orientation rotation (0, 90, 180, 270); -1 means no extension.
Definition plugin.h:565
janus_plugin_rtp_extensions::max_delay
int16_t max_delay
Definition plugin.h:573
janus_plugin_rtp_extensions::audio_level_vad
gboolean audio_level_vad
Whether the encoder detected voice activity (part of audio-level extension)
Definition plugin.h:563
janus_plugin_rtp_extensions::video_flipped
gboolean video_flipped
Whether the video orientation extension says it's flipped horizontally.
Definition plugin.h:571
janus_plugin_rtp_extensions::dd_content
uint8_t dd_content[256]
Dependency Descriptor content.
Definition plugin.h:577
janus_plugin_rtp_extensions::dd_len
uint8_t dd_len
Length of Dependency Descriptor data, if available.
Definition plugin.h:575
janus_plugin_rtp
Janus plugin RTP packet.
Definition plugin.h:588
janus_plugin_rtp::buffer
char * buffer
The packet data.
Definition plugin.h:599
janus_plugin_rtp::extensions
janus_plugin_rtp_extensions extensions
RTP extensions.
Definition plugin.h:603
janus_plugin_rtp::video
gboolean video
Whether this is an audio or video RTP packet.
Definition plugin.h:597
janus_plugin_rtp::length
uint16_t length
The packet length.
Definition plugin.h:601
janus_plugin_rtp::mindex
int mindex
Index of the stream (relative to the SDP)
Definition plugin.h:595
janus_plugin_session
Plugin-Gateway session mapping.
Definition plugin.h:239
janus_plugin_session::gateway_handle
void * gateway_handle
Opaque pointer to the Janus core-level handle.
Definition plugin.h:241
janus_plugin_session::plugin_handle
void * plugin_handle
Opaque pointer to the plugin session.
Definition plugin.h:243
janus_plugin_session::stopped
volatile gint stopped
Whether this mapping has been stopped definitely or not: if so, the plugin shouldn't make use of it a...
Definition plugin.h:246
janus_plugin_session::ref
janus_refcount ref
Reference counter for this instance.
Definition plugin.h:248
janus_plugin
The plugin session and callbacks interface.
Definition plugin.h:252
janus_plugin::destroy
void(*const destroy)(void)
Plugin deinitialization/destructor.
Definition plugin.h:259
janus_plugin::handle_message
struct janus_plugin_result *(*const handle_message)(janus_plugin_session *handle, char *transaction, json_t *message, json_t *jsep)
Method to handle an incoming message/request from a peer.
Definition plugin.h:292
janus_plugin::get_author
const char *(*const get_author)(void)
Informative method to request the author of the plugin.
Definition plugin.h:277
janus_plugin::hangup_media
void(*const hangup_media)(janus_plugin_session *handle)
Callback to be notified about DTLS alerts from a peer (i.e., the PeerConnection is not valid any more...
Definition plugin.h:340
janus_plugin::handle_admin_message
struct json_t *(*const handle_admin_message)(json_t *message)
Method to handle an incoming Admin API message/request.
Definition plugin.h:296
janus_plugin::incoming_rtp
void(*const incoming_rtp)(janus_plugin_session *handle, janus_plugin_rtp *packet)
Method to handle an incoming RTP packet from a peer.
Definition plugin.h:303
janus_plugin::setup_media
void(*const setup_media)(janus_plugin_session *handle)
Callback to be notified when the associated PeerConnection is up and ready to be used.
Definition plugin.h:299
janus_plugin::get_version
int(*const get_version)(void)
Informative method to request the numeric version of the plugin.
Definition plugin.h:269
janus_plugin::get_package
const char *(*const get_package)(void)
Informative method to request the package name of the plugin (what will be used in web applications t...
Definition plugin.h:279
janus_plugin::get_description
const char *(*const get_description)(void)
Informative method to request a description of the plugin.
Definition plugin.h:273
janus_plugin::get_api_compatibility
int(*const get_api_compatibility)(void)
Informative method to request the API version this plugin was compiled against.
Definition plugin.h:267
janus_plugin::create_session
void(*const create_session)(janus_plugin_session *handle, int *error)
Method to create a new session/handle for a peer.
Definition plugin.h:284
janus_plugin::destroy_session
void(*const destroy_session)(janus_plugin_session *handle, int *error)
Method to destroy a session/handle for a peer.
Definition plugin.h:344
janus_plugin::get_name
const char *(*const get_name)(void)
Informative method to request the name of the plugin.
Definition plugin.h:275
janus_plugin::incoming_rtcp
void(*const incoming_rtcp)(janus_plugin_session *handle, janus_plugin_rtcp *packet)
Method to handle an incoming RTCP packet from a peer.
Definition plugin.h:307
janus_plugin::query_session
json_t *(*const query_session)(janus_plugin_session *handle)
Method to get plugin-specific info of a session/handle.
Definition plugin.h:350
janus_plugin::init
int(*const init)(janus_callbacks *callback, const char *config_path)
Plugin initialization/constructor.
Definition plugin.h:257
janus_plugin::slow_link
void(*const slow_link)(janus_plugin_session *handle, int mindex, gboolean video, gboolean uplink)
Method to be notified by the core when too many NACKs have been received or sent by Janus,...
Definition plugin.h:337
janus_plugin::data_ready
void(*const data_ready)(janus_plugin_session *handle)
Method to be notified about the fact that the datachannel is ready to be written.
Definition plugin.h:319
janus_plugin::incoming_data
void(*const incoming_data)(janus_plugin_session *handle, janus_plugin_data *packet)
Method to handle incoming SCTP/DataChannel data from a peer (text only, for the moment)
Definition plugin.h:314
janus_plugin::get_version_string
const char *(*const get_version_string)(void)
Informative method to request the string version of the plugin.
Definition plugin.h:271
janus_refcount
Definition refcount.h:78