Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| cdn [2025/11/03 11:20] – ischluff | cdn [2026/07/26 22:27] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | = CDN | + | # CDN |
| < | < | ||
| Line 7: | Line 7: | ||
| </ | </ | ||
| - | ==== Repo Links | + | #### Repo Links |
| * Stream-api, Upload-Proxy, | * Stream-api, Upload-Proxy, | ||
| * rtmp-auth daemon: https:// | * rtmp-auth daemon: https:// | ||
| * Transcoding-Script: | * Transcoding-Script: | ||
| - | == Architecture | + | ## Architecture |
| The CDN-Cascade has 6 stages: Encoder, Ingest, Transcoder, Origin-Relays, | The CDN-Cascade has 6 stages: Encoder, Ingest, Transcoder, Origin-Relays, | ||
| {{: | {{: | ||
| - | === 1. Encoder | + | ### 1. Encoder |
| - | The master | + | The initial |
| - | The master | + | The encoding |
| The translated audio tracks and the slide video track are optional. | The translated audio tracks and the slide video track are optional. | ||
| - | The master | + | The origin |
| - | === 2. Ingest | + | ### 2. Ingest |
| - | The ingest machines run both [[https:// | + | The ingest machines run both [[https:// |
| Additionally the ingest machines run a stream-api daemon which scrapes the local stream information from both srtrelay and nginx-rtmp and publishes it to consul KV. | Additionally the ingest machines run a stream-api daemon which scrapes the local stream information from both srtrelay and nginx-rtmp and publishes it to consul KV. | ||
| Line 33: | Line 33: | ||
| ``` | ``` | ||
| - | === 3. Transcoder | + | ### 3. Transcoder |
| The stream transcoding transforms the mpegts stream into multiple segmented streams (one per quality) via one big ffmpeg script. Additionally it creates thumbnails and preview images. | The stream transcoding transforms the mpegts stream into multiple segmented streams (one per quality) via one big ffmpeg script. Additionally it creates thumbnails and preview images. | ||
| The transcoding script can be found here https:// | The transcoding script can be found here https:// | ||
| Line 52: | Line 52: | ||
| The transcoding outputs are directly pushed with HTTP uploads to the Origin relays. To ensure proper retries the uploads are sent over a local http-proxy (https:// | The transcoding outputs are directly pushed with HTTP uploads to the Origin relays. To ensure proper retries the uploads are sent over a local http-proxy (https:// | ||
| - | === 4. Origin Relays | + | ### 4. Origin Relays |
| Origin relays run the upload server (https:// | Origin relays run the upload server (https:// | ||
| The upload server has some additional logic to rewrite the HLS playlists on the fly in order to properly handle stream restarts. | The upload server has some additional logic to rewrite the HLS playlists on the fly in order to properly handle stream restarts. | ||
| Line 58: | Line 58: | ||
| The segmented streams, thumbnails etc. are currently served by nginx. | The segmented streams, thumbnails etc. are currently served by nginx. | ||
| - | === 5. Edge-Relays | + | ### 5. Edge-Relays |
| - | The edge relays run nginx with caching proxy config and upstream set to the master | + | The edge relays run nginx with caching proxy config and upstream set to the active origin |
| - | === 6. Loadbalancer | + | ### 6. Loadbalancer |
| The end-user facing domains '' | The end-user facing domains '' | ||
| - | ==== streaming.media.ccc.de | + | #### streaming.media.ccc.de |
| The load-balancers serve the [[: | The load-balancers serve the [[: | ||
| - | ==== cdn.c3voc.de | + | #### cdn.c3voc.de |
| Requests to '' | Requests to '' | ||
| Line 81: | Line 81: | ||
| Because of the behavior of HLS/DASH clients if a client fetches a playlist file and gets a redirect, all further requests go to the same origin. With this trick the clients stay persistently on one relay until they are redirected. | Because of the behavior of HLS/DASH clients if a client fetches a playlist file and gets a redirect, all further requests go to the same origin. With this trick the clients stay persistently on one relay until they are redirected. | ||
| - | == Stream-URLs | + | ## Stream-URLs |
| The resulting stream URLs are as follows (replace @slug with your actual stream slug): | The resulting stream URLs are as follows (replace @slug with your actual stream slug): | ||
| Line 109: | Line 109: | ||
| * http:// | * http:// | ||
| * http:// | * http:// | ||
| - | == Dynamic SRT/RTMP endpoints with RTMP Auth | + | ## Dynamic SRT/RTMP endpoints with RTMP Auth |
| SRT and RTMP Endpoints can be created under https:// | SRT and RTMP Endpoints can be created under https:// | ||
| Line 116: | Line 116: | ||
| The SRT-URL would be : '' | The SRT-URL would be : '' | ||
| - | == Future improvements | + | ## Future improvements |
| The diagram below shows the envisioned architecture as of 2020. In the meantime many of the improvements have been integrated into the CDN. | The diagram below shows the envisioned architecture as of 2020. In the meantime many of the improvements have been integrated into the CDN. | ||
| Line 123: | Line 123: | ||
| * Building a live status dashboard which shows the current stream-> | * Building a live status dashboard which shows the current stream-> | ||
| * To gracefully shutdown a relay it could be instructed via consul KV to redirect all clients back to a load balancer while taking it out of the haproxy redirects. That way all clients would be redistributed to different relays. | * To gracefully shutdown a relay it could be instructed via consul KV to redirect all clients back to a load balancer while taking it out of the haproxy redirects. That way all clients would be redistributed to different relays. | ||
| - | * Build master | + | * Build origin |
| * Use DNS rotation on ingest | * Use DNS rotation on ingest | ||
| * Finalize srtrelay meshing to allow pushed streams to be pulled from any ingest machine. | * Finalize srtrelay meshing to allow pushed streams to be pulled from any ingest machine. | ||