LIVE STREAMING AT SCALE
Jordi Cenzano | Director of engineering
jcenzano@brightcove.com jordicenzano
mmsys2019 2019/06/19
LIVE STREAMING AT SCALE Jordi Cenzano | Director of engineering - - PowerPoint PPT Presentation
LIVE STREAMING AT SCALE Jordi Cenzano | Director of engineering mmsys2019 jcenzano@brightcove.com 2019/06/19 jordicenzano Agenda Simple live streaming Real (complex) live streaming blocks Some challenges Ingest
LIVE STREAMING AT SCALE
Jordi Cenzano | Director of engineering
jcenzano@brightcove.com jordicenzano
mmsys2019 2019/06/19
Agenda
WHAT IS LIVE STREAMING?
Simple live streaming
Simple live streaming demo
WebServer (nodeJS): https://gist.github.com/jordicenzano/a943bda656ad1e0a0568fbaad311af05 RTMP + transcode + HLS (ffmpeg): https://gist.github.com/jordicenzano/c5516b5854eb046bd1c27076fe4ba917#!/usr/bin/env bash ffmpeg -hide_banner \
#!/usr/bin/env bash http-server ~ -p 8080 --cors -c -1
WHAT IS REALLY LIVE STREAMING?
Live streaming blocks
RTMP TS + ?
(h264+AAC)h264 AAC Nxh264 NxAAC TS fMP4 Txt XML HLS DASH HTTP[s] HLS DASH HTTP[s]
LIVE INGEST
Live ingest
From: https://en.wikipedia.org/wiki/Internet_service_providerS L A
Live ingest options: RTMP
Live ingest options
Live ingest RTMP vs SRT
Source code: https://github.com/jordicenzano/live-streaming-ingest-advance d-simulationPERSONALIZATION
(SSAI: Server Side ad insertion)
Live streaming Live SSAI
Live stream personalization
1M CCU HLS 6s TD 2.5 Tbps(@2.5Mbps) 333K rps
(1 m3u8 1 redir ts/fmp4)166K r-w/s
Live streaming SSAI
SCTE 35 SCTE35 info Session info Job info Ad-123c.mp4 ad-123c-0001.ts
Live streaming SSAI
... #EXTINF:8.0, A-0000.ts #EXTINF:6.40, A-0001.ts #AD-BREAK #EXTINF:8.0, A-0002.ts #EXTINF:4.0, A-0003.ts ... ... #EXTINF:8.0, A-0000.ts #EXTINF:6.40, A-0001.ts #EXT-X-DISCONTINUITY #EXTINF:8.0, ad-123c-0001.ts #EXT-X-DISCONTINUITY #EXTINF:4.0, A-0003.ts ...
Live streaming SSAI impressions
1M CCU 6 ads / adbreak 20 imp / ad 120 M imp / adbreak
MONITORING
Monitoring
LATENCY Latency ≠ BAD
HLS Latency sources
Low latency “simple” demo
Source code: https://github.com/jordicenzano/go-ts-segmenter https://github.com/mjneil/go-chunked-streaming-server (From Matthew Neil)REDUNDANCY
Redundancy blocks
Redundancy blocks
#EXTM3U #Example of HLS REDUNDANT STREAMS #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000, RESOLUTION=720x480 http://ALPHA.mycompany.com/lo/prog_index.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000, RESOLUTION=720x480 http://BETA.mycompany.com/lo/prog_index.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=1920x1080 http://ALPHA.mycompany.com/md/prog_index.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=500000, RESOLUTION=1920x1080 http://BETA.mycompany.com/md/prog_index.m3u8
Redundancy blocks: Full sync approach
Redundancy blocks: non-sync approach
... #EXTINF:4.000000, from-A-0000.ts #EXTINF:4.000000, from-A-0001.ts #EXT-X-DISCONTINUITY #EXTINF:4.000000, from-B-0001.ts ....
A B
Future
Conclusions: Experience based
Jordi Cenzano jcenzano@brightcove.com jordicenzano