## Option 1: Stream coming from cloud ```plantuml @startuml entity Cloud as ec2cloud actor host as host actor participants == Currently will need to schedule cloud resource \n for streaming using this == host -> ec2cloud: Play video for workout party ec2cloud -> host : Start streaming video ec2cloud -> participants: Start streaming video ``` ## Pros - Video would be synced to all participants - Even if host is leaves, it would not affect the streaming video - Video quality will be great throughout the klass, and wont be affected as there is very little possibility for bandwidth issue on cloud ## Cons - With the current infra can have only 4 streaming simultaneously on prod & 2 in uat - Need to check schedule for infra everytime before scheduling ## Option 2(Current Implementation): Host streaming ```plantuml @startuml actor host as host == Host has access to video to be streamed == actor participants host -> participants: Click on play stream button host -> participants: Stream video to other participants ``` ## Pros - Cheapest solution with minimal effort - Already had components to built for this solution - Can have unlimited workout parties ## Cons - Have single point of failure(If trainer has bad bandwidth it's will affect ) - If trainer leaves the stream will be closed - if trainer rejoins & start streaming, video will start from beginning - Do not have ability to seek video ## Option 3 Host streaming but with a service in between ```plantuml @startuml actor host as host entity VideoService as ec2cloud == Host has access to video to be streamed == actor participants host -> ec2cloud: Click on play stream button ec2cloud -> participants: Stream video to other participants ec2cloud -> host: Stream video to other participants ``` ## Pros - Streaming would be synced for everyone - Host will have access to start / stop ( may be ) ## Cons - Streaming would be charged pay per minutes - We would need to use some services to achieve - Will need to have development around this service into our ecosystem - Will take time to R&D and then create these sort of system - Pricing would be a factor when we use this