Loading...
Searching...
No Matches
janus_audiobridge.c File Reference
Plugins

Janus AudioBridge plugin. More...

`#include "plugin.h"`
`#include <jansson.h>`
`#include <opus/opus.h>`
`#include "audiobridge-deps/speex/speex_jitter.h"`
`#include "audiobridge-deps/speex/speex_resampler.h"`
`#include <arpa/inet.h>`
`#include <net/if.h>`
`#include <sys/socket.h>`
`#include <netdb.h>`
`#include <sys/time.h>`
`#include <poll.h>`
`#include "../debug.h"`
`#include "../apierror.h"`
`#include "../config.h"`
`#include "../mutex.h"`
`#include "../rtp.h"`
`#include "../rtpsrtp.h"`
`#include "../rtcp.h"`
`#include "../rtpfwd.h"`
`#include "../record.h"`
`#include "../sdp-utils.h"`
`#include "../utils.h"`
`#include "../ip-utils.h"`
Include dependency graph for janus_audiobridge.c:

## Data Structures

struct | janus_audiobridge_message
struct | janus_audiobridge_room
struct | janus_audiobridge_session
struct | janus_audiobridge_plainrtp_media
struct | janus_audiobridge_participant
struct | janus_audiobridge_rtp_relay_packet
struct | janus_audiobridge_buffer_packet
struct | janus_audiobridge_rtp_forwarder_metadata
struct | wav_header

## Macros

#define | JANUS_AUDIOBRIDGE_VERSION 13
#define | JANUS_AUDIOBRIDGE_VERSION_STRING "0.0.13"
#define | JANUS_AUDIOBRIDGE_DESCRIPTION "This is a plugin implementing an audio conference bridge for Janus, mixing Opus streams."
#define | JANUS_AUDIOBRIDGE_NAME "JANUS AudioBridge plugin"
#define | JANUS_AUDIOBRIDGE_AUTHOR "Meetecho s.r.l."
#define | JANUS_AUDIOBRIDGE_PACKAGE "janus.plugin.audiobridge"
#define | MIN_SEQUENTIAL 2
#define | MAX_MISORDER 50
#define | JANUS_AUDIOBRIDGE_MAX_GROUPS 5
#define | JANUS_AUDIOBRIDGE_DEFAULT_RTP_RANGE_MIN 10000
#define | JANUS_AUDIOBRIDGE_DEFAULT_RTP_RANGE_MAX 60000
#define | OPUS_SAMPLES 960
#define | G711_SAMPLES 160
#define | BUFFER_SAMPLES OPUS_SAMPLES*12
#define | DEFAULT_COMPLEXITY 4
#define | JITTER_BUFFER_MIN_PACKETS 2
#define | JITTER_BUFFER_MAX_PACKETS 50
#define | JITTER_BUFFER_MAX_GAP_SIZE 20
#define | JITTER_BUFFER_CHECK_USECS 1*G_USEC_PER_SEC
#define | QUEUE_IN_MAX_PACKETS 4
#define | JANUS_AUDIOBRIDGE_ERROR_UNKNOWN_ERROR 499
#define | JANUS_AUDIOBRIDGE_ERROR_NO_MESSAGE 480
#define | JANUS_AUDIOBRIDGE_ERROR_INVALID_JSON 481
#define | JANUS_AUDIOBRIDGE_ERROR_INVALID_REQUEST 482
#define | JANUS_AUDIOBRIDGE_ERROR_MISSING_ELEMENT 483
#define | JANUS_AUDIOBRIDGE_ERROR_INVALID_ELEMENT 484
#define | JANUS_AUDIOBRIDGE_ERROR_NO_SUCH_ROOM 485
#define | JANUS_AUDIOBRIDGE_ERROR_ROOM_EXISTS 486
#define | JANUS_AUDIOBRIDGE_ERROR_NOT_JOINED 487
#define | JANUS_AUDIOBRIDGE_ERROR_LIBOPUS_ERROR 488
#define | JANUS_AUDIOBRIDGE_ERROR_UNAUTHORIZED 489
#define | JANUS_AUDIOBRIDGE_ERROR_ID_EXISTS 490
#define | JANUS_AUDIOBRIDGE_ERROR_ALREADY_JOINED 491
#define | JANUS_AUDIOBRIDGE_ERROR_NO_SUCH_USER 492
#define | JANUS_AUDIOBRIDGE_ERROR_INVALID_SDP 493
#define | JANUS_AUDIOBRIDGE_ERROR_NO_SUCH_GROUP 494

## Typedefs

typedef struct janus_audiobridge_message | janus_audiobridge_message
typedef struct janus_audiobridge_room | janus_audiobridge_room
typedef struct janus_audiobridge_session | janus_audiobridge_session
typedef struct janus_audiobridge_plainrtp_media | janus_audiobridge_plainrtp_media
typedef struct janus_audiobridge_participant | janus_audiobridge_participant
typedef struct janus_audiobridge_rtp_relay_packet | janus_audiobridge_rtp_relay_packet
typedef struct janus_audiobridge_buffer_packet | janus_audiobridge_buffer_packet
typedef struct janus_audiobridge_rtp_forwarder_metadata | janus_audiobridge_rtp_forwarder_metadata
typedef struct wav_header | wav_header

## Functions

janus_plugin * | create (void)
int | janus_audiobridge_init (janus_callbacks *callback, const char *config_path)
void | janus_audiobridge_destroy (void)
int | janus_audiobridge_get_api_compatibility (void)
int | janus_audiobridge_get_version (void)
const char * | janus_audiobridge_get_version_string (void)
const char * | janus_audiobridge_get_description (void)
const char * | janus_audiobridge_get_name (void)
const char * | janus_audiobridge_get_author (void)
const char * | janus_audiobridge_get_package (void)
void | janus_audiobridge_create_session (janus_plugin_session *handle, int *error)
struct janus_plugin_result * | janus_audiobridge_handle_message (janus_plugin_session *handle, char *transaction, json_t *message, json_t *jsep)
json_t * | janus_audiobridge_handle_admin_message (json_t *message)
void | janus_audiobridge_setup_media (janus_plugin_session *handle)
void | janus_audiobridge_incoming_rtp (janus_plugin_session *handle, janus_plugin_rtp *packet)
void | janus_audiobridge_incoming_rtcp (janus_plugin_session *handle, janus_plugin_rtcp *packet)
void | janus_audiobridge_hangup_media (janus_plugin_session *handle)
void | janus_audiobridge_destroy_session (janus_plugin_session *handle, int *error)
json_t * | janus_audiobridge_query_session (janus_plugin_session *handle)

## Detailed Description

Janus AudioBridge plugin.

Author
  Lorenzo Miniero loren.nosp@m.zo@m.nosp@m.eetec.nosp@m.ho.c.nosp@m.om

Copyright
  GNU General Public License v3

Check the AudioBridge plugin documentation for more details.

Plugins

## Macro Definition Documentation

## BUFFER_SAMPLES

#define BUFFER_SAMPLES OPUS_SAMPLES*12

## DEFAULT_COMPLEXITY

#define DEFAULT_COMPLEXITY 4

## G711_SAMPLES

#define G711_SAMPLES 160

## JANUS_AUDIOBRIDGE_AUTHOR

#define JANUS_AUDIOBRIDGE_AUTHOR "Meetecho s.r.l."

## JANUS_AUDIOBRIDGE_DEFAULT_RTP_RANGE_MAX

#define JANUS_AUDIOBRIDGE_DEFAULT_RTP_RANGE_MAX 60000

## JANUS_AUDIOBRIDGE_DEFAULT_RTP_RANGE_MIN

#define JANUS_AUDIOBRIDGE_DEFAULT_RTP_RANGE_MIN 10000

## JANUS_AUDIOBRIDGE_DESCRIPTION

#define JANUS_AUDIOBRIDGE_DESCRIPTION "This is a plugin implementing an audio conference bridge for Janus, mixing Opus streams."

## JANUS_AUDIOBRIDGE_ERROR_ALREADY_JOINED

#define JANUS_AUDIOBRIDGE_ERROR_ALREADY_JOINED 491

## JANUS_AUDIOBRIDGE_ERROR_ID_EXISTS

#define JANUS_AUDIOBRIDGE_ERROR_ID_EXISTS 490

## JANUS_AUDIOBRIDGE_ERROR_INVALID_ELEMENT

#define JANUS_AUDIOBRIDGE_ERROR_INVALID_ELEMENT 484

## JANUS_AUDIOBRIDGE_ERROR_INVALID_JSON

#define JANUS_AUDIOBRIDGE_ERROR_INVALID_JSON 481

## JANUS_AUDIOBRIDGE_ERROR_INVALID_REQUEST

#define JANUS_AUDIOBRIDGE_ERROR_INVALID_REQUEST 482

## JANUS_AUDIOBRIDGE_ERROR_INVALID_SDP

#define JANUS_AUDIOBRIDGE_ERROR_INVALID_SDP 493

## JANUS_AUDIOBRIDGE_ERROR_LIBOPUS_ERROR

#define JANUS_AUDIOBRIDGE_ERROR_LIBOPUS_ERROR 488

## JANUS_AUDIOBRIDGE_ERROR_MISSING_ELEMENT

#define JANUS_AUDIOBRIDGE_ERROR_MISSING_ELEMENT 483

## JANUS_AUDIOBRIDGE_ERROR_NO_MESSAGE

#define JANUS_AUDIOBRIDGE_ERROR_NO_MESSAGE 480

## JANUS_AUDIOBRIDGE_ERROR_NO_SUCH_GROUP

#define JANUS_AUDIOBRIDGE_ERROR_NO_SUCH_GROUP 494

## JANUS_AUDIOBRIDGE_ERROR_NO_SUCH_ROOM

#define JANUS_AUDIOBRIDGE_ERROR_NO_SUCH_ROOM 485

## JANUS_AUDIOBRIDGE_ERROR_NO_SUCH_USER

#define JANUS_AUDIOBRIDGE_ERROR_NO_SUCH_USER 492

## JANUS_AUDIOBRIDGE_ERROR_NOT_JOINED

#define JANUS_AUDIOBRIDGE_ERROR_NOT_JOINED 487

## JANUS_AUDIOBRIDGE_ERROR_ROOM_EXISTS

#define JANUS_AUDIOBRIDGE_ERROR_ROOM_EXISTS 486

## JANUS_AUDIOBRIDGE_ERROR_UNAUTHORIZED

#define JANUS_AUDIOBRIDGE_ERROR_UNAUTHORIZED 489

## JANUS_AUDIOBRIDGE_ERROR_UNKNOWN_ERROR

#define JANUS_AUDIOBRIDGE_ERROR_UNKNOWN_ERROR 499

## JANUS_AUDIOBRIDGE_MAX_GROUPS

#define JANUS_AUDIOBRIDGE_MAX_GROUPS 5

## JANUS_AUDIOBRIDGE_NAME

#define JANUS_AUDIOBRIDGE_NAME "JANUS AudioBridge plugin"

## JANUS_AUDIOBRIDGE_PACKAGE

#define JANUS_AUDIOBRIDGE_PACKAGE "janus.plugin.audiobridge"

## JANUS_AUDIOBRIDGE_VERSION

#define JANUS_AUDIOBRIDGE_VERSION 13

## JANUS_AUDIOBRIDGE_VERSION_STRING

#define JANUS_AUDIOBRIDGE_VERSION_STRING "0.0.13"

## JITTER_BUFFER_CHECK_USECS

#define JITTER_BUFFER_CHECK_USECS 1*G_USEC_PER_SEC

## JITTER_BUFFER_MAX_GAP_SIZE

#define JITTER_BUFFER_MAX_GAP_SIZE 20

## JITTER_BUFFER_MAX_PACKETS

#define JITTER_BUFFER_MAX_PACKETS 50

## JITTER_BUFFER_MIN_PACKETS

#define JITTER_BUFFER_MIN_PACKETS 2

## MAX_MISORDER

#define MAX_MISORDER 50

## MIN_SEQUENTIAL

#define MIN_SEQUENTIAL 2

## OPUS_SAMPLES

#define OPUS_SAMPLES 960

## QUEUE_IN_MAX_PACKETS

#define QUEUE_IN_MAX_PACKETS 4

## Typedef Documentation

## janus_audiobridge_buffer_packet

typedef struct janus_audiobridge_buffer_packet janus_audiobridge_buffer_packet

## janus_audiobridge_message

typedef struct janus_audiobridge_message janus_audiobridge_message

## janus_audiobridge_participant

typedef struct janus_audiobridge_participant janus_audiobridge_participant

## janus_audiobridge_plainrtp_media

typedef struct janus_audiobridge_plainrtp_media janus_audiobridge_plainrtp_media

## janus_audiobridge_room

typedef struct janus_audiobridge_room janus_audiobridge_room

## janus_audiobridge_rtp_forwarder_metadata

typedef struct janus_audiobridge_rtp_forwarder_metadata janus_audiobridge_rtp_forwarder_metadata

## janus_audiobridge_rtp_relay_packet

typedef struct janus_audiobridge_rtp_relay_packet janus_audiobridge_rtp_relay_packet

## janus_audiobridge_session

typedef struct janus_audiobridge_session janus_audiobridge_session

## wav_header

typedef struct wav_header wav_header

## Function Documentation

## create()

janus_logger * create | ( | void |  | ) |

## janus_audiobridge_create_session()

void janus_audiobridge_create_session | ( | janus_plugin_session * | handle,
|  | int * | error )

## janus_audiobridge_destroy()

void janus_audiobridge_destroy | ( | void |  | ) |

## janus_audiobridge_destroy_session()

void janus_audiobridge_destroy_session | ( | janus_plugin_session * | handle,
|  | int * | error )

## janus_audiobridge_get_api_compatibility()

int janus_audiobridge_get_api_compatibility | ( | void |  | ) |

## janus_audiobridge_get_author()

const char * janus_audiobridge_get_author | ( | void |  | ) |

## janus_audiobridge_get_description()

const char * janus_audiobridge_get_description | ( | void |  | ) |

## janus_audiobridge_get_name()

const char * janus_audiobridge_get_name | ( | void |  | ) |

## janus_audiobridge_get_package()

const char * janus_audiobridge_get_package | ( | void |  | ) |

## janus_audiobridge_get_version()

int janus_audiobridge_get_version | ( | void |  | ) |

## janus_audiobridge_get_version_string()

const char * janus_audiobridge_get_version_string | ( | void |  | ) |

## janus_audiobridge_handle_admin_message()

json_t * janus_audiobridge_handle_admin_message | ( | json_t * | message | ) |

## janus_audiobridge_handle_message()

struct janus_plugin_result * janus_audiobridge_handle_message | ( | janus_plugin_session * | handle,
|  | char * | transaction,
|  | json_t * | message,
|  | json_t * | jsep )

## janus_audiobridge_hangup_media()

void janus_audiobridge_hangup_media | ( | janus_plugin_session * | handle | ) |

## janus_audiobridge_incoming_rtcp()

void janus_audiobridge_incoming_rtcp | ( | janus_plugin_session * | handle,
|  | janus_plugin_rtcp * | packet )

## janus_audiobridge_incoming_rtp()

void janus_audiobridge_incoming_rtp | ( | janus_plugin_session * | handle,
|  | janus_plugin_rtp * | packet )

## janus_audiobridge_init()

int janus_audiobridge_init | ( | janus_callbacks * | callback,
|  | const char * | config_path )

## janus_audiobridge_query_session()

json_t * janus_audiobridge_query_session | ( | janus_plugin_session * | handle | ) |

## janus_audiobridge_setup_media()

void janus_audiobridge_setup_media | ( | janus_plugin_session * | handle | ) |