

Summary
-
We depend on Zoom to process recorded meetings in a timely manner, but have no fallback when it doesn't
-
Zoom has functionality to live stream RTMP push while meetings are happening.
-
AWS Elemental allows for capturing and encoding of RTMP streams to S3
-
Opencast can ingest from S3
-
Jay, Kenny & Gabe (Russell) ran a successful proof of concept
-
All of this can be done programmatically
Per Meeting Requirements
- AWS MediaLive Channel Input (type: RTMP_PUSH)
- provides the rtmp endpoint URL
- defines the "Stream Key" value
- allows standard AWS Security Group restrictions
- AWS MediaLive Channel
- channels connect inputs <-> outputs
- start/stop via an API or preset schedules
- AWS MediaLive Channel Output (to S3)
- aac/h264, various a/v encoding options
- Zoom Meeting Custom Livestream Settings
- rtmp Stream URL + Stream Key


rtmp://3.225.222.157:1935/rtmp-test
zoom
https://example.edu (???)
Initial Setup
- MediaLive Channel plus all inputs/outputs created via one-time scripted process
- Zoom meeting livestream settings updated via one-time scripted process
- Channels, inputs, outputs, S3 object paths named according to meeting/series metadata (crn, meeting id, series id, etc)
- Stream URL and stream key obfuscated
- potentially our only safeguard as AWS security group configuration is ??
- All necessary URLS & attributes stored in a database
Livestream Capture Process
- Start the MediaLive Channel
- via preset schedule
- could also be triggered by a Zoom Webhook event
- Start the Zoom meeting
- Meeting start sends a Zoom Webhook event to an endpoint service (Lambda or Gather)
- Endpoint service sends livestream start to Zoom API
- Livestream feed is captured and encoded by the MediaLive Channel to S3
- Ingest to Opencast would be manual based on need
- Encoded files stay in S3 for 7 (?) days


client = ZoomClient(api_key, api_secret)
livestream_status_endpoint = 'meetings/98522241042/livestream/status'
r = client.patch_request(
livestream_status_endpoint,
data={ 'action': 'start' }
)
Live Stream indicator comes on
Livestream Start via API

Optional: if you create an additional MediaLive channel output to AWS MediaPackage you get a stream preview
Cost Estimate
WARNING: first pass, not double-checked
MediaLive: $400/month *
S3: $15/month **
* ~120 Single-pipe channels, HD, <10Mbps, 250 hours of "uptime", channels on for +/- 15m scheduled meeting time
** 2.5GB per hour of video, 250 hours per week, bucket policy to only keep objects <= 7 days old
Zoom livestream capture to S3
By James Luker
Zoom livestream capture to S3
- 426