Skip to content

Commit

Permalink
Added separate property for extension id meetecho#3
Browse files Browse the repository at this point in the history
  • Loading branch information
IbrayevRamil committed Nov 22, 2023
1 parent c8f7269 commit 8c09ad5
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 42 deletions.
7 changes: 2 additions & 5 deletions conf/janus.plugin.streaming.jcfg.sample.in
Expand Up @@ -84,13 +84,10 @@
# playoutdelay_ext = true
#
# To allow mountpoints to negotiate the abs-capture-time RTP extension,
# you can set the 'abscapturetime_ext' property to true: this way, any
# you can set the 'abscapturetime_src_ext_id' property to value in range 1..14 inclusive: this way, any
# subscriber can receive the abs-capture-time of incoming RTP streams,
# assuming the browser supports the RTP extension in the first place.
# abscapturetime_ext = true
#
# Extension header id in which RTP source provides abs-capture-time.
# Should be in range 1..14 inclusive.
# Incoming RTP stream should provide abs-capture-time exactly in the same header id.
# abscapturetime_src_ext_id = 1
#
# The following options are only valid for the 'rtsp' type:
Expand Down
65 changes: 28 additions & 37 deletions src/plugins/janus_streaming.c
Expand Up @@ -145,13 +145,10 @@ assuming the browser supports the RTP extension in the first place.
playoutdelay_ext = true
To allow mountpoints to negotiate the abs-capture-time RTP extension,
you can set the 'abscapturetime_ext' property to true: this way, any
subscriber can receive the abs-capture-time of incoming video streams,
you can set the 'abscapturetime_src_ext_id' property to value in range 1..14 inclusive: this way, any
subscriber can receive the abs-capture-time of incoming RTP streams,
assuming the browser supports the RTP extension in the first place.
abscapturetime_ext = true
Extension header id in which RTP source provides abs-capture-time.
Should be in range 1..14 inclusive.
Incoming RTP stream should provide abs-capture-time exactly in the same header id.
abscapturetime_src_ext_id = 1
The following options are only valid for the 'rtsp' type:
Expand Down Expand Up @@ -1061,7 +1058,6 @@ static struct janus_json_parameter rtp_parameters[] = {
{"srtpcrypto", JSON_STRING, 0},
{"e2ee", JANUS_JSON_BOOL, 0},
{"playoutdelay_ext", JANUS_JSON_BOOL, 0},
{"abscapturetime_ext", JANUS_JSON_BOOL, 0},
{"abscapturetime_src_ext_id", JSON_INTEGER, JANUS_JSON_PARAM_POSITIVE}
};
static struct janus_json_parameter live_parameters[] = {
Expand Down Expand Up @@ -1352,8 +1348,6 @@ typedef struct janus_streaming_rtp_source {
gboolean e2ee;
/* Whether the playout-delay extension should be negotiated or not for new subscribers */
gboolean playoutdelay_ext;
/* Whether the abs-capture-time extension should be negotiated or not for new subscribers */
gboolean abscapturetime_ext;
/* Extension header id in RTP source with abs-capture-time */
int abscapturetime_src_ext_id;
} janus_streaming_rtp_source;
Expand Down Expand Up @@ -1505,7 +1499,7 @@ janus_streaming_rtp_source_stream *janus_streaming_create_rtp_source_stream(
janus_streaming_mountpoint *janus_streaming_create_rtp_source(
uint64_t id, char *id_str, char *name, char *desc, char *metadata,
GList *media, int srtpsuite, char *srtpcrypto, int threads, int rtp_collision,
gboolean e2ee, gboolean playoutdelay_ext, gboolean abscapturetime_ext, int abscapturetime_src_ext_id);
gboolean e2ee, gboolean playoutdelay_ext, int abscapturetime_src_ext_id);
/* Helper to create a file/ondemand live source */
janus_streaming_mountpoint *janus_streaming_create_file_source(
uint64_t id, char *id_str, char *name, char *desc, char *metadata, char *filename, gboolean live,
Expand Down Expand Up @@ -1564,8 +1558,7 @@ typedef struct janus_streaming_session {
gboolean e2ee;
/* Whether the playout-delay extension should be negotiated */
gboolean playoutdelay_ext;
/* Whether the abs-capture-time extension should be negotiated */
gboolean abscapturetime_ext;
/* Extension header id in RTP source with abs-capture-time */
int abscapturetime_src_ext_id;
janus_mutex mutex;
volatile gint dataready;
Expand Down Expand Up @@ -2114,7 +2107,6 @@ int janus_streaming_init(janus_callbacks *callback, const char *config_path) {
janus_config_item *scrypto = janus_config_get(config, cat, janus_config_type_item, "srtpcrypto");
janus_config_item *e2ee = janus_config_get(config, cat, janus_config_type_item, "e2ee");
janus_config_item *pd = janus_config_get(config, cat, janus_config_type_item, "playoutdelay_ext");
janus_config_item *abscaptime = janus_config_get(config, cat, janus_config_type_item, "abscapturetime_ext");
janus_config_item *abscaptime_src_id = janus_config_get(config, cat, janus_config_type_item, "abscapturetime_src_ext_id");
gboolean is_private = priv && priv->value && janus_is_true(priv->value);
if(ssuite && ssuite->value && atoi(ssuite->value) != 32 && atoi(ssuite->value) != 80) {
Expand Down Expand Up @@ -2529,7 +2521,6 @@ int janus_streaming_init(janus_callbacks *callback, const char *config_path) {
(rtpcollision && rtpcollision->value) ? atoi(rtpcollision->value) : 0,
(e2ee && e2ee->value) ? janus_is_true(e2ee->value) : FALSE,
(pd && pd->value) ? janus_is_true(pd->value) : FALSE,
(abscaptime && abscaptime->value) ? janus_is_true(abscaptime->value) : FALSE,
(abscaptime_src_id && abscaptime_src_id->value) ? atoi(abscaptime_src_id->value) : 0)) == NULL) {
JANUS_LOG(LOG_ERR, "Error creating 'rtp' mountpoint '%s'...\n", cat->name);
cl = cl->next;
Expand Down Expand Up @@ -3026,11 +3017,9 @@ json_t *janus_streaming_query_session(janus_plugin_session *handle) {
json_object_set_new(pd, "max-delay", json_integer(s->max_delay));
json_object_set_new(info, "playout-delay", pd);
}
if(session->abscapturetime_ext && session->abscapturetime_src_ext_id > 0) {
json_object_set_new(info, "abs-capture-time", json_true());
json_object_set_new(info, "abs-capture-time-src-ext-id", json_integer(session->abscapturetime_src_ext_id));
if(session->abscapturetime_src_ext_id > 0) {
json_object_set_new(info, "abs-capture-time-src-ext-id", json_integer(session->abscapturetime_src_ext_id));
}

json_array_append_new(media, info);
temp = temp->next;
}
Expand Down Expand Up @@ -3428,8 +3417,16 @@ static json_t *janus_streaming_process_synchronous_request(janus_streaming_sessi
json_t *scrypto = json_object_get(root, "srtpcrypto");
json_t *e2ee = json_object_get(root, "e2ee");
json_t *pd = json_object_get(root, "playoutdelay_ext");
json_t *abscaptime = json_object_get(root, "abscapturetime_ext");
json_t *abscaptime_src_id = json_object_get(root, "abscapturetime_src_ext_id");
if (abscaptime_src_id && (json_integer_value(abscaptime_src_id) < 1 || json_integer_value(abscaptime_src_id) > 14)) {
JANUS_LOG(LOG_ERR, "Can't add 'rtp' stream, invalid abscaptime_src_id value...\n");
error_code = JANUS_STREAMING_ERROR_CANT_CREATE;
g_snprintf(error_cause, 512, "Can't add 'rtp' stream, invalid abscaptime_src_id value...");
janus_mutex_lock(&mountpoints_mutex);
g_hash_table_remove(mountpoints_temp, string_ids ? (gpointer)mpid_str : (gpointer)&mpid);
janus_mutex_unlock(&mountpoints_mutex);
goto prepare_response;
}
if(ssuite && json_integer_value(ssuite) != 32 && json_integer_value(ssuite) != 80) {
JANUS_LOG(LOG_ERR, "Can't add 'rtp' stream, invalid SRTP suite...\n");
error_code = JANUS_STREAMING_ERROR_CANT_CREATE;
Expand Down Expand Up @@ -3855,7 +3852,6 @@ static json_t *janus_streaming_process_synchronous_request(janus_streaming_sessi
rtpcollision ? json_integer_value(rtpcollision) : 0,
e2ee ? json_is_true(e2ee) : FALSE,
pd ? json_is_true(pd) : FALSE,
abscaptime ? json_is_true(abscaptime) : FALSE,
abscaptime_src_id ? json_integer_value(abscaptime_src_id) : 0);
janus_mutex_lock(&mountpoints_mutex);
g_hash_table_remove(mountpoints_temp, string_ids ? (gpointer)mpid_str : (gpointer)&mpid);
Expand Down Expand Up @@ -4214,8 +4210,7 @@ static json_t *janus_streaming_process_synchronous_request(janus_streaming_sessi
janus_config_add(config, c, janus_config_item_create("e2ee", "true"));
if(source->playoutdelay_ext)
janus_config_add(config, c, janus_config_item_create("playoutdelay_ext", "true"));
if(source->abscapturetime_ext && source->abscapturetime_src_ext_id > 0) {
janus_config_add(config, c, janus_config_item_create("abscapturetime_ext", "true"));
if(source->abscapturetime_src_ext_id > 0) {
g_snprintf(value, BUFSIZ, "%d", source->abscapturetime_src_ext_id);
janus_config_add(config, c, janus_config_item_create("abscapturetime_src_ext_id", value));
}
Expand Down Expand Up @@ -4618,8 +4613,7 @@ static json_t *janus_streaming_process_synchronous_request(janus_streaming_sessi
janus_config_add(config, c, janus_config_item_create("e2ee", "true"));
if(source->playoutdelay_ext)
janus_config_add(config, c, janus_config_item_create("playoutdelay_ext", "true"));
if(source->abscapturetime_ext && source->abscapturetime_src_ext_id > 0) {
janus_config_add(config, c, janus_config_item_create("abscapturetime_ext", "true"));
if( source->abscapturetime_src_ext_id > 0) {
g_snprintf(value, BUFSIZ, "%d", source->abscapturetime_src_ext_id);
janus_config_add(config, c, janus_config_item_create("abscapturetime_src_ext_id", value));
}
Expand Down Expand Up @@ -6181,7 +6175,6 @@ static void *janus_streaming_handler(void *data) {
/* Also check if we have to offer the playout-delay extension */
session->playoutdelay_ext = source->playoutdelay_ext;
/* Also check if we have to offer the abs-capture-time extension */
session->abscapturetime_ext = source->abscapturetime_ext;
session->abscapturetime_src_ext_id = source->abscapturetime_src_ext_id;
}
janus_refcount_increase(&session->ref);
Expand All @@ -6205,7 +6198,7 @@ static void *janus_streaming_handler(void *data) {
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_MID, janus_rtp_extension_id(JANUS_RTP_EXTMAP_MID),
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_ABS_SEND_TIME, janus_rtp_extension_id(JANUS_RTP_EXTMAP_ABS_SEND_TIME),
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_ABS_CAPTURE_TIME,
(session->abscapturetime_ext ? janus_rtp_extension_id(JANUS_RTP_EXTMAP_ABS_CAPTURE_TIME) : 0),
(session->abscapturetime_src_ext_id > 0 ? janus_rtp_extension_id(JANUS_RTP_EXTMAP_ABS_CAPTURE_TIME) : 0),
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_PLAYOUT_DELAY,
(session->playoutdelay_ext ? janus_rtp_extension_id(JANUS_RTP_EXTMAP_PLAYOUT_DELAY) : 0),
JANUS_SDP_OA_DONE);
Expand All @@ -6230,7 +6223,7 @@ static void *janus_streaming_handler(void *data) {
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_MID, janus_rtp_extension_id(JANUS_RTP_EXTMAP_MID),
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_ABS_SEND_TIME, janus_rtp_extension_id(JANUS_RTP_EXTMAP_ABS_SEND_TIME),
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_ABS_CAPTURE_TIME,
(session->abscapturetime_ext && session->abscapturetime_src_ext_id > 0 ? janus_rtp_extension_id(JANUS_RTP_EXTMAP_ABS_CAPTURE_TIME) : 0),
(session->abscapturetime_src_ext_id > 0 ? janus_rtp_extension_id(JANUS_RTP_EXTMAP_ABS_CAPTURE_TIME) : 0),
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_PLAYOUT_DELAY,
(session->playoutdelay_ext ? janus_rtp_extension_id(JANUS_RTP_EXTMAP_PLAYOUT_DELAY) : 0),
JANUS_SDP_OA_DONE);
Expand All @@ -6248,7 +6241,7 @@ static void *janus_streaming_handler(void *data) {
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_MID, janus_rtp_extension_id(JANUS_RTP_EXTMAP_MID),
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_ABS_SEND_TIME, janus_rtp_extension_id(JANUS_RTP_EXTMAP_ABS_SEND_TIME),
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_ABS_CAPTURE_TIME,
(session->abscapturetime_ext && session->abscapturetime_src_ext_id > 0 ? janus_rtp_extension_id(JANUS_RTP_EXTMAP_ABS_CAPTURE_TIME) : 0),
(session->abscapturetime_src_ext_id > 0 ? janus_rtp_extension_id(JANUS_RTP_EXTMAP_ABS_CAPTURE_TIME) : 0),
JANUS_SDP_OA_EXTENSION, JANUS_RTP_EXTMAP_PLAYOUT_DELAY,
(session->playoutdelay_ext ? janus_rtp_extension_id(JANUS_RTP_EXTMAP_PLAYOUT_DELAY) : 0),
JANUS_SDP_OA_DONE);
Expand Down Expand Up @@ -6520,7 +6513,6 @@ static void *janus_streaming_handler(void *data) {
/* Also check if we have to offer the playout-delay extension */
session->playoutdelay_ext = source->playoutdelay_ext;
/* Also check if we have to offer the abs-capture-time extension */
session->abscapturetime_ext = source->abscapturetime_ext;
session->abscapturetime_src_ext_id = source->abscapturetime_src_ext_id;
/* Accept the m-line */
janus_sdp_generate_answer_mline(parsed_sdp, answer, m,
Expand Down Expand Up @@ -7610,7 +7602,7 @@ janus_streaming_rtp_source_stream *janus_streaming_create_rtp_source_stream(
janus_streaming_mountpoint *janus_streaming_create_rtp_source(
uint64_t id, char *id_str, char *name, char *desc, char *metadata,
GList *media, int srtpsuite, char *srtpcrypto, int threads, int rtp_collision,
gboolean e2ee, gboolean playoutdelay_ext, gboolean abscapturetime_ext, int abscapturetime_src_ext_id) {
gboolean e2ee, gboolean playoutdelay_ext, int abscapturetime_src_ext_id) {
char id_num[30];
if(!string_ids) {
g_snprintf(id_num, sizeof(id_num), "%"SCNu64, id);
Expand Down Expand Up @@ -7736,7 +7728,6 @@ janus_streaming_mountpoint *janus_streaming_create_rtp_source(
live_rtp_source->rtp_collision = rtp_collision;
live_rtp_source->e2ee = e2ee;
live_rtp_source->playoutdelay_ext = playoutdelay_ext;
live_rtp_source->abscapturetime_ext = abscapturetime_ext;
live_rtp_source->abscapturetime_src_ext_id = abscapturetime_src_ext_id;
live_rtp->source = live_rtp_source;
live_rtp->source_destroy = (GDestroyNotify) janus_streaming_rtp_source_free;
Expand Down Expand Up @@ -10257,10 +10248,10 @@ static void janus_streaming_relay_rtp_packet(gpointer data, gpointer user_data)
rtp.extensions.min_delay = s->min_delay;
rtp.extensions.max_delay = s->max_delay;
}
if(session->abscapturetime_ext && (session->abscapturetime_src_ext_id > 0 && session->abscapturetime_src_ext_id < 15)) {
if(session->abscapturetime_src_ext_id > 0) {
uint64_t abs_ts = 0;
if(janus_rtp_header_extension_parse_abs_capture_time((char *)packet->data, packet->length,
session->abscapturetime_src_ext_id, &abs_ts) == 0) {
session->abscapturetime_src_ext_id, &abs_ts) == 0) {
rtp.extensions.abs_capture_ts = abs_ts;
}
}
Expand Down Expand Up @@ -10339,10 +10330,10 @@ static void janus_streaming_relay_rtp_packet(gpointer data, gpointer user_data)
rtp.extensions.min_delay = s->min_delay;
rtp.extensions.max_delay = s->max_delay;
}
if(session->abscapturetime_ext && (session->abscapturetime_src_ext_id > 0 && session->abscapturetime_src_ext_id < 15)) {
if(session->abscapturetime_src_ext_id > 0) {
uint64_t abs_ts = 0;
if(janus_rtp_header_extension_parse_abs_capture_time((char *)packet->data, packet->length,
session->abscapturetime_src_ext_id, &abs_ts) == 0) {
session->abscapturetime_src_ext_id, &abs_ts) == 0) {
rtp.extensions.abs_capture_ts = abs_ts;
}
}
Expand All @@ -10367,10 +10358,10 @@ static void janus_streaming_relay_rtp_packet(gpointer data, gpointer user_data)
rtp.extensions.min_delay = s->min_delay;
rtp.extensions.max_delay = s->max_delay;
}
if(session->abscapturetime_ext && (session->abscapturetime_src_ext_id > 0 && session->abscapturetime_src_ext_id < 15)) {
if(session->abscapturetime_src_ext_id > 0) {
uint64_t abs_ts = 0;
if(janus_rtp_header_extension_parse_abs_capture_time((char *)packet->data, packet->length,
session->abscapturetime_src_ext_id, &abs_ts) == 0) {
session->abscapturetime_src_ext_id, &abs_ts) == 0) {
rtp.extensions.abs_capture_ts = abs_ts;
}
}
Expand Down

0 comments on commit 8c09ad5

Please sign in to comment.