events:34c3:cdn

34C3 CDN

Die CDN-Kaskade hat 4 Stufen

Das Master-Encoding entsteht auf dem encoder-cube im Saal aus dem Ausgabesignal des Voctomix. Das Master-Encoding enthält den Mix als 1080p25 in h264 sowie die Slides als 1080p5 in h264 sowie aac von allen 3 Audiospuren.

Das Master-Encoding wird von einem Script erzeugt, welches vom ansible aus folgendem Template erzeugt wird: https://github.com/voc/cm/blob/master/ansible/roles/encoder/templates/voctomix-scripts/streaming-sink-mkvonly.sh.j2

Das Master-Encoding wird auf den lokalen (= auf dem encoder-cube laufenden) Icecast auf Port 7999 gepusht (http://encoderX.lan.c3voc.de:7999/sX). live.lan.c3voc.de pullt diesen und bietet ihn seinerseits auf http://live.lan.c3voc.de:7999/sX an.

Das Transcoding läuft im CCL auf den Minions 1, 5 und 6 (die Minions der neusten Generation). Dabei sind die Räume wie folgt auf die Minions verteilt:

  • minion1: s1
  • minion2: s2
  • minion3: s3 & s4

Diese Verteilung wird über Host-Attribute im cm geregelt: https://github.com/voc/cm/blob/master/ansible/event#L41-L44.

Die Transcoding-Scripte holen sich die Master-Streams von http://live.lan.c3voc.de:7999 und erzeugen die fehlenden Formate: vpx-hd/sd/slides, vorbis-audio (für webm), h264-sd sowie mp3/opus-audio.

Die Scripte dazu werden vom ansible aus folgenden Templates erzeugt werden: https://github.com/voc/cm/tree/master/ansible/roles/transcoder/templates/transcoder

Die drei Scripte (h264, vpx, audio) erzeugen aus dem Master-Stream drei Format-Streams: (sXh264, sXwebm, sX_audio), welche wieder gegen live.lan.c3voc.de gepusht werden. Diese Format-Streams sind dann unter folgenden URLs verfügbar:

Da jeder Format-Stream aus einem einzelnen ffmpeg-Prozess stammt und in einem Container landet sind die darin enthaltenen Videoströme Zeitsynchron zueinander. Die Trennung nach Formaten soll ermöglichem einzelne Format-Transport-Chains bei Problemen neustarten zu können, ohne die andere zu stören.

Die Pull-Quelle und das Push-Ziel ist über Group-Vars konfigurierbar: https://github.com/voc/cm/blob/master/ansible/group_vars/transcoders

Diese 3 Format-Streams je Raum werden von der nächsten Stufe auf live.lan.c3voc.de in die finalen Streams in allen für Endnutzer angebotenen Kombinationen auseinander gemuxt (=“fanout”).

Dabei entstehen alle Kombinationen aus sX_[hd|sd|slides]_[native|translated|translated-2] in webm und hls sowie sX_[native|translated|translated-2].[mp3|opus] erzeugt. Die WebM- und die Audio-Streams werden gegen den Icecast auf http://live.lan.c3voc.de:8000/ gepusht, die HLS-Streams werden vom nginx unter http://live.lan.c3voc.de/hls/ angeboten.

Die Scripte dazu werden vom ansible aus folgenden Templates erzeugt werden: https://github.com/voc/cm/tree/master/ansible/roles/relay/templates/fanout.

Zusätzlich werden vom Ansible Master-Playlisten für jede Sprache in jedem Raum aus folgendem Template erzeugt: https://github.com/voc/cm/blob/master/ansible/roles/relay/templates/fanout/hls_master.m3u8.j2. Diese Master-Playlisten erlauben ein nahtloses umschalten auf verschiedene Qualitätsstufen von Kompatiblen Geräten (insb. iOS/macOS).

Die Pull-Quelle und das Push-Ziel sowie der Pfad unter dem die HLS-Schnipsel und Playlisten abgelegt werden ist über Group-Vars konfigurierbar: https://github.com/voc/cm/blob/master/ansible/group_vars/relays#L5

Zu dne Aufgaben der fanout-Scripte gehört auch das übermitteln des h264-Videostroms zu Youtube. Die Stream-Keys dazu kommen aus dem KeePass, die Scripte aus dem oben verlinkten Git-Repo.

Die (Non-Public) Transport-Nodes ziehen alle Daten via Icecast oder nginx-Proxy-Konfiguration von live.lan.c3voc.de. Die (Public) Edge-Nodes ziehen ihre Daten von den jeweiligen Transport-Nodes.

Streamdump des mkv-multiformat-Streams wie ihn die encoder produzieren werden (mit 2 Video und 3 Audiospuren): https://c3voc.mazdermind.de/volatile/main-plus-slides-with-two-translations-stream.mkv

Die Zertifikate für TLS auf allen Hosts kommt von Let's Encrypt (“LE”). Damit wir aber nicht von der Verfügbarkeit von LE abhängig sind oder in Rate Limits laufen, generieren wir die benötigten Zertifikate vorher und speichern diese im KeePass, von woher sie via Ansible ausgerollt werden. Nach dem Congress schalten wir zurück auf selbst Verwaltete LE-Zertifikate.

Wir wollen versuche ein Zertifikat mit allen Domain-Namen aller Edge-Relays zu erzeugen. Dazu wollen wir die DNS-Basierte Authorisierungsmethode verwenden.

  • events/34c3/cdn.1512904777.txt.gz
  • Last modified: 2017/12/10 12:19
  • by mazdermind