Spaces:
Paused
Paused
backend_max_speakers (#14)
Browse files- Backend changes to read in MAX_SPEAKERS env var (343dd345a0767df37e58cfb01d5963d23bf38253)
- Update correct file (7571f4ca2df769af86a904202e0e147c24cea6d7)
- Merge changes (6a17cbca89841bbb939d12f019c4ce7e63e11294)
- Check int type (a5278e321d0a99e5e75fe4c90fed1886599fe556)
seamless_server/app_pubsub.py
CHANGED
|
@@ -123,9 +123,12 @@ class ServerLock(TypedDict):
|
|
| 123 |
client_id: str
|
| 124 |
member_object: Member
|
| 125 |
|
|
|
|
| 126 |
|
| 127 |
if os.environ.get("LOCK_SERVER_COMPLETELY", "0") == "1":
|
| 128 |
logger.info("LOCK_SERVER_COMPLETELY is set. Server will be locked on startup.")
|
|
|
|
|
|
|
| 129 |
dummy_server_lock_member_object = Member(
|
| 130 |
client_id="seamless_user", session_id="dummy", name="Seamless User"
|
| 131 |
)
|
|
@@ -556,6 +559,12 @@ async def join_room(sid, client_id, room_id_from_client, config_dict):
|
|
| 556 |
|
| 557 |
return {"roomsJoined": sio.rooms(sid), "roomID": room_id}
|
| 558 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 559 |
|
| 560 |
# TODO: Add code to prevent more than one speaker from connecting/streaming at a time
|
| 561 |
@sio.event
|
|
@@ -576,6 +585,12 @@ async def configure_stream(sid, config):
|
|
| 576 |
)
|
| 577 |
return {"status": "error", "message": "member_or_room_is_none"}
|
| 578 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 579 |
# If there is a server lock WITH an active transcoder session, prevent other users from configuring and starting a stream
|
| 580 |
# If the server lock client does NOT have an active transcoder session allow this to proceed, knowing that
|
| 581 |
# this stream will be interrupted if the server lock client starts streaming
|
|
|
|
| 123 |
client_id: str
|
| 124 |
member_object: Member
|
| 125 |
|
| 126 |
+
MAX_SPEAKERS = os.environ.get("MAX_SPEAKERS")
|
| 127 |
|
| 128 |
if os.environ.get("LOCK_SERVER_COMPLETELY", "0") == "1":
|
| 129 |
logger.info("LOCK_SERVER_COMPLETELY is set. Server will be locked on startup.")
|
| 130 |
+
if MAX_SPEAKERS is not None and int(MAX_SPEAKERS):
|
| 131 |
+
logger.info(f"MAX_SPEAKERS is set to: {MAX_SPEAKERS}")
|
| 132 |
dummy_server_lock_member_object = Member(
|
| 133 |
client_id="seamless_user", session_id="dummy", name="Seamless User"
|
| 134 |
)
|
|
|
|
| 559 |
|
| 560 |
return {"roomsJoined": sio.rooms(sid), "roomID": room_id}
|
| 561 |
|
| 562 |
+
def allow_speaker(room, client_id):
|
| 563 |
+
if MAX_SPEAKERS is not None and client_id in room.speakers:
|
| 564 |
+
room_statuses = {room_id: room.get_room_status_dict() for room_id, room in rooms.items()}
|
| 565 |
+
speakers = sum(room_status["activeTranscoders"] for room_status in room_statuses.values())
|
| 566 |
+
return speakers < int(MAX_SPEAKERS)
|
| 567 |
+
return True
|
| 568 |
|
| 569 |
# TODO: Add code to prevent more than one speaker from connecting/streaming at a time
|
| 570 |
@sio.event
|
|
|
|
| 585 |
)
|
| 586 |
return {"status": "error", "message": "member_or_room_is_none"}
|
| 587 |
|
| 588 |
+
if not allow_speaker(room, client_id):
|
| 589 |
+
logger.error(
|
| 590 |
+
f"In MAX_SPEAKERS mode we only allow one speaker at a time. Ignoring request to configure stream from client {client_id}."
|
| 591 |
+
)
|
| 592 |
+
return {"status": "error", "message": "max_speakers"}
|
| 593 |
+
|
| 594 |
# If there is a server lock WITH an active transcoder session, prevent other users from configuring and starting a stream
|
| 595 |
# If the server lock client does NOT have an active transcoder session allow this to proceed, knowing that
|
| 596 |
# this stream will be interrupted if the server lock client starts streaming
|