janus-gateway icon indicating copy to clipboard operation
janus-gateway copied to clipboard

[1.x] It cannot get the info about "audiolevel_ext_id""videoorient_ext_id""playoutdelay_ext_id" of remote publisher

Open jamken opened this issue 1 year ago • 2 comments

What version of Janus is this happening on? v1.1.4 about cascade featre

Have you tested a more recent version of Janus too? Yes

Was this working before? No

Is there a gdb or libasan trace of the issue? No

Additional context

hi, @lminiero

I am the maintainer of Janus-cloud (https://github.com/OpenSight/janus-cloud), which is a orchestrator of Janus-gateway. When I try to support the cascade feature for Janus-gateway, I found I don't know about"audiolevel_ext_id""videoorient_ext_id""playoutdelay_ext_id" info of remote publisher when invoking "add_remote_publisher" and "update_remote_publisher" request. The other stream's info, like type, code, mid, can be retrieved from the reply of the "publish" request for the original publisher. So, maybe Janus-gateway can add these stream's info ("audiolevel_ext_id""videoorient_ext_id""playoutdelay_ext_id" ) to the reply of "publish/configure" request of the normal publisher in next version. The current code which return the publisher's stream info is like below:

       while(temp) {
              ......
					temp = temp->next;
					/* Add to the info we send back to the publisher */
					json_t *info = json_object();
					json_object_set_new(info, "type", json_string(janus_videoroom_media_str(ps->type)));
					json_object_set_new(info, "mindex", json_integer(ps->mindex));
					json_object_set_new(info, "mid", json_string(ps->mid));
					if(ps->disabled) {
						json_object_set_new(info, "disabled", json_true());
					} else {
						if(ps->description)
							json_object_set_new(info, "description", json_string(ps->description));
						if(ps->type == JANUS_VIDEOROOM_MEDIA_AUDIO) {
							json_object_set_new(info, "codec", json_string(janus_audiocodec_name(ps->acodec)));
							if(ps->acodec == JANUS_AUDIOCODEC_OPUS) {
								if(ps->opusstereo)
									json_object_set_new(info, "stereo", json_true());
								if(ps->opusfec)
									json_object_set_new(info, "fec", json_true());
								if(ps->opusdtx)
									json_object_set_new(info, "dtx", json_true());
							}
						} else if(ps->type == JANUS_VIDEOROOM_MEDIA_VIDEO) {
							json_object_set_new(info, "codec", json_string(janus_videocodec_name(ps->vcodec)));
							if(ps->vcodec == JANUS_VIDEOCODEC_H264 && ps->h264_profile != NULL)
								json_object_set_new(info, "h264_profile", json_string(ps->h264_profile));
							else if(ps->vcodec == JANUS_VIDEOCODEC_VP9 && ps->vp9_profile != NULL)
								json_object_set_new(info, "vp9_profile", json_string(ps->vp9_profile));
							if(ps->simulcast)
								json_object_set_new(info, "simulcast", json_true());
							if(ps->svc)
								json_object_set_new(info, "svc", json_true());
						}
					}
					json_array_append_new(media, info);
				}


If Janus-gateway can return "audiolevel_ext_id""videoorient_ext_id""playoutdelay_ext_id" for the normal publisher, it's more convenient for orchestrator to create the remote publisher. Thanks

jamken avatar Aug 06 '23 04:08 jamken

The whole team is on vacation, we'll have a look when we're back in a few weeks.

lminiero avatar Aug 09 '23 07:08 lminiero

This sounds like a useful feature. Feel free to submit a pull request with the changes you'd need, and I'll have a look.

lminiero avatar Aug 30 '23 09:08 lminiero