## 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