MT#56447 allow specific publisher feed ID

Support the "id" parameter for the "join" as "publisher" message.
Preempts choosing a random feed ID.

Add a test case for this.

Change-Id: Iae8c2f50864adf913b288085aa70d5427e0a4456
pull/1675/head
Richard Fuchs 2 years ago
parent 41cf4fe7b6
commit b5e1d20024

@ -507,14 +507,20 @@ static const char *janus_videoroom_join(struct websocket_message *wm, struct jan
AUTO_CLEANUP(GQueue ret_streams, janus_clear_ret_streams) = G_QUEUE_INIT; // return list for multiple subs
if (is_pub) {
// random feed ID
while (1) {
feed_id = janus_random();
if (json_reader_read_member(reader, "id")) {
feed_id = jr_str_int(reader);
if (!feed_id)
continue;
return "Invalid feed ID requested";
if (g_hash_table_lookup(room->feeds, &feed_id))
continue;
break;
return "Feed already exists";
}
json_reader_end_member(reader);
// random feed ID?
while (!feed_id) {
feed_id = janus_random();
if (feed_id && g_hash_table_lookup(room->feeds, &feed_id))
feed_id = 0;
}
// feed ID points to the handle

@ -355,13 +355,18 @@ class TestVideoroom(unittest.TestCase):
return handle
def createPublisher(self, token, session, room, handle, pubs=[], conn_num=0):
def createPublisher(self, token, session, room, handle, pubs=[], conn_num=0, feed_id=0):
body = {"request": "join", "ptype": "publisher", "room": room}
if feed_id:
body["id"] = feed_id
eventloop.run_until_complete(
testIOJanus(
self,
{
"janus": "message",
"body": {"request": "join", "ptype": "publisher", "room": room},
"body": body,
"handle_id": handle,
"session_id": session,
"token": token,
@ -378,6 +383,8 @@ class TestVideoroom(unittest.TestCase):
self.assertNotEqual(feed, session)
self.assertNotEqual(feed, room)
self.assertNotEqual(feed, handle)
if feed_id:
self.assertEqual(feed_id, feed)
self.assertEqual(
self._res,
{
@ -1818,7 +1825,7 @@ class TestVideoroom(unittest.TestCase):
pub_handle = self.createHandle(token, session)
self.assertNotEqual(pub_handle, control_handle)
feed = self.createPublisher(token, session, room, pub_handle)
feed = self.createPublisher(token, session, room, pub_handle, feed_id=123)
self.assertNotEqual(feed, control_handle)
eventloop.run_until_complete(

Loading…
Cancel
Save