mirror of
https://github.com/voc/streaming-website
synced 2024-11-10 06:34:17 +00:00
655 lines
23 KiB
JSON
655 lines
23 KiB
JSON
{
|
||
"$schema": "http://json-schema.org/draft-07/schema",
|
||
"$id": "https://c3voc.de/streaming-website/config",
|
||
"type": "object",
|
||
"title": "VOC streaming-website configuration",
|
||
"description": " deployed at https://streaming.media.ccc.de",
|
||
"required": ["conference"],
|
||
"properties": {
|
||
"conference": {
|
||
"type": "object",
|
||
"required": ["title", "acronym"],
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"title": {
|
||
"type": "string",
|
||
"title": "Titel der Konferenz",
|
||
"description": "Kann Leer- und Sonderzeichen enthalten. Dieser wird im Seiten-Header, im <title>-Tag, in der About-Seite und ggf. ab weiteren Stellen als Anzeigetext benutzt.",
|
||
"examples": ["DiVOC - Reboot to Respawn"]
|
||
},
|
||
"acronym": {
|
||
"title": "Acronym",
|
||
"description": "VOC Kürzel für die Konferenz, falls nicht bekannt bitte nicht selbst ausdenken sondern nachfragen. Wird in den URLs als Slug für die Konferenz verwendet.",
|
||
"type": "string",
|
||
"examples": ["36c3", "rc3", "divoc-ptt"],
|
||
"pattern": "^[a-z0-9_-]+$"
|
||
},
|
||
"organizer": {
|
||
"type": "string",
|
||
"title": "Veranstalter",
|
||
"description": "Wird für den <meta name=\"author\">-Tag verwendt. Ist das Feld leer, wird kein solcher <meta>-Tag generiert.",
|
||
"examples": ["CCC", "DiVOC"]
|
||
},
|
||
"description": {
|
||
"type": "string",
|
||
"title": "Beschreibungstext",
|
||
"description": "Wird für den <meta name=\"description\">-Tag verwendet. Wird diese Option ignoriert, wird kein solcher <meta>-Tag generiert.",
|
||
"examples": [
|
||
"Livestream des Digital verteilten Online-Chaos",
|
||
"Live streaming from the 36th Chaos Communication Congress"
|
||
]
|
||
},
|
||
"start": {
|
||
"type": "string",
|
||
"format": "datetime-local",
|
||
"title": "Startzeitpunkt der Konferenz",
|
||
"description": "Befinden wir uns davor, wird die Closed-Seite mit einem Text der Art 'hat noch nicht angefangen' angezeigt. Wird dieser Zeitpunkt nicht angegeben, gilt die Konferenz immer als angefangen. ",
|
||
"examples": ["2021-04-02T09:30:00+02:00"],
|
||
"options": {
|
||
"grid_columns": 2,
|
||
"inputAttributes": {
|
||
"placeholder": "Enter datetime"
|
||
},
|
||
"flatpickr": {
|
||
"wrap": true,
|
||
"time_24hr": true,
|
||
"allowInput": true
|
||
}
|
||
}
|
||
},
|
||
"end": {
|
||
"type": "string",
|
||
"format": "datetime-local",
|
||
"examples": ["2021-04-05T18:30:00+02:00"],
|
||
"options": {
|
||
"grid_columns": 2,
|
||
"inputAttributes": {
|
||
"placeholder": "Enter datetime"
|
||
},
|
||
"flatpickr": {
|
||
"wrap": true,
|
||
"time_24hr": true,
|
||
"allowInput": true
|
||
}
|
||
}
|
||
},
|
||
"time_zone_name": {
|
||
"title": "Zeitzone",
|
||
"type": "string",
|
||
"examples": ["Europe/Amsterdam", "Europe/Berlin"],
|
||
"default": "Europe/Amsterdam",
|
||
"pattern": "^[A-Z][a-z+]/[A-Z][a-z+]$"
|
||
},
|
||
"colors": {
|
||
"type": "object",
|
||
"properties": {
|
||
"main": {
|
||
"type": "string",
|
||
"format": "color"
|
||
},
|
||
"background": {
|
||
"type": "string",
|
||
"format": "color"
|
||
}
|
||
}
|
||
},
|
||
"keywords" :{
|
||
"type":"array",
|
||
"items": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
"streamingConfig": {
|
||
"$ref": "#/definitions/StreamingConfig"
|
||
},
|
||
"rooms": {
|
||
"type": "array",
|
||
"title": "Räume",
|
||
"description": "(= Audio & Video Produktionen, also auch DJ-Sets o.ä.)",
|
||
"default": [],
|
||
"additionalItems": true,
|
||
"items": {
|
||
"anyOf": [
|
||
{
|
||
"type": "object",
|
||
"default": {},
|
||
"required": ["name", "slug", "streamId"],
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"guid": {
|
||
"type": ["string", "null"],
|
||
"format": "uuid",
|
||
"title": "Raum GUID",
|
||
"description": "(aus Schedule)",
|
||
"default": "",
|
||
"examples": ["64f358c2-82f2-11ed-b6f2-370ab4c5fdf0"]
|
||
},
|
||
"name": {
|
||
"type": "string",
|
||
"title": "Raum Name",
|
||
"description": "(aus Schedule)",
|
||
"default": "",
|
||
"examples": ["Saal 1"]
|
||
},
|
||
"slug": {
|
||
"type": "string",
|
||
"title": "Raum-Slug",
|
||
"description": "Wird in den URLs oder im Feedback verwendet",
|
||
"default": "",
|
||
"examples": ["halla", "vortrag", "piscopia"]
|
||
},
|
||
"streamId": {
|
||
"type": "string",
|
||
"title": "Stream ID",
|
||
"description": "Der Name des Kanals im VOC Streaming CDN z.B. s1",
|
||
"default": "",
|
||
"examples": ["s1", "s2", "s3", "s4", "q1", "divoc", "cccb"]
|
||
},
|
||
"streamingConfig": {
|
||
"$ref": "#/definitions/RoomStreamingConfig"
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"definitions": {
|
||
"Room": {
|
||
"type": "object",
|
||
"description": "Liste der Räume/Streams/Channels (= Audio & Video Produktionen, also auch DJ-Sets o.ä.)",
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"name": {
|
||
"type": "string"
|
||
},
|
||
"slug": {
|
||
"type": "string"
|
||
},
|
||
"streamId": {
|
||
"type": "string"
|
||
},
|
||
"streamingConfig": {
|
||
"$ref": "#/definitions/RoomStreamingConfig"
|
||
}
|
||
},
|
||
"required": ["streamId", "name", "slug"]
|
||
},
|
||
"Features": {
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"title": "Globale Schalter",
|
||
"description": "",
|
||
"properties": {
|
||
"relive": {
|
||
"type": "boolean",
|
||
"title": "Relive aktiv",
|
||
"description": "Wird diese Option deaktivert, wird die UI für temporäre Mitschnitte nicht angezeigt",
|
||
"default": false
|
||
},
|
||
"embed": {
|
||
"type": "boolean",
|
||
"title": "Embedding",
|
||
"description": "Wird diese Option deaktivert, werden alle Embedding-Funktionen deaktiviert.",
|
||
"default": true
|
||
},
|
||
"feedback": {
|
||
"type": "boolean",
|
||
"title": "Feedback Formular",
|
||
"description": "Wird diese Option deaktivert, wird das gesamte Feedback-System deaktiviert",
|
||
"default": false
|
||
},
|
||
"chat": {
|
||
"type": "object",
|
||
"title": "Globale Konfiguration für Chat",
|
||
"properties": {
|
||
"matrix": {
|
||
"$ref": "#/definitions/IrcConfig",
|
||
"type": ["object", "boolean"]
|
||
},
|
||
"irc": {
|
||
"$ref": "#/definitions/IrcConfig",
|
||
"title": "Globale Konfiguration der IRC-Links",
|
||
"description": "Wird dieser Block auf null gesetzt, werden keine IRC-Links mehr erzeugt. Sollen die IRC-Links für jeden Raum einzeln konfiguriert werden, muss dieser Block trotzdem existieren sein. ggf. einfach auf true setzen.",
|
||
"required": ["display", "url"],
|
||
"properties": {
|
||
"url": {
|
||
"title": "URL für die IRC-Links",
|
||
"description": "Hierbei kann sowohl ein irc://-Link als auch ein Link zu einem WebIrc-Provider wie z.B. 'https://webirc.hackint.org/#irc://irc.hackint.org/#36C3-%s' verwendet werden. %s wird durch den urlencodeten Raum-Slug ersetzt. Eine Anpassung kann ebenfalls in der Raum-Konfiguration vorgenommen werden.",
|
||
"examples": ["https://webirc.hackint.org/#irc://irc.hackint.org/#36C3-%s", "ircs://irc.hackint.eu:6667/36C3-%s"]
|
||
},
|
||
"display": {
|
||
"type": "string",
|
||
"title": "Anzeigetext für die IRC-Links",
|
||
"description": "%s wird durch den Raum-Slug ersetzt. Ist eine weitere Anpassung erfoderlich, kann ein IRC_CONFIG-Block in der Raum-Konfiguration zum Überschreiben dieser Angaben verwendet werden."
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"social": {
|
||
"type": "object",
|
||
"title": "Globale Konfiguration für Social Media",
|
||
"properties": {
|
||
"hashtag": {
|
||
"type": "string",
|
||
"title": "Hashtag der Konferenz",
|
||
"examples": ["#36C3", "#divocr2r"]
|
||
},
|
||
"mastodon":{
|
||
"type": "boolean"
|
||
},
|
||
"twitter": {
|
||
"type": ["boolean", "object"]
|
||
}
|
||
},
|
||
"examples": [
|
||
{
|
||
"hashtag": "#37C3",
|
||
"mastodon": true
|
||
}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"StreamingConfig": {
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"title": "Konfigurationen",
|
||
"description": "",
|
||
"default": {},
|
||
"required": ["features"],
|
||
"properties": {
|
||
"schedule": {
|
||
"type": "object",
|
||
"title": "Konferenz-Fahrplan",
|
||
"required": ["url", "scale"],
|
||
"properties": {
|
||
"url": {
|
||
"type": "string",
|
||
"title": "URL zum Fahrplan-XML",
|
||
"description": "Diese URL muss immer verfügbar sein, sonst können kann die Programm-Ansicht aufhören zu funktionieren. Wenn die Quelle unverlässlich ist ;) sollte ein externer HTTP-Cache vorgeschaltet werden.",
|
||
"default": "",
|
||
"examples": [
|
||
"https://data.c3voc.de/divoc/everything.schedule.xml"
|
||
]
|
||
},
|
||
"scale": {
|
||
"$id": "#/properties/conference/properties/streamingConfig/properties/schedule/properties/scale",
|
||
"type": "integer",
|
||
"title": "Skalierung der Programm-Vorschau ",
|
||
"description": "in Sekunden pro Pixel",
|
||
"default": 7
|
||
},
|
||
"roomfilter": {
|
||
"type": "array",
|
||
"title": "Nur die angegebenen Räume aus dem Fahrplan beachten",
|
||
"description": "Wird diese Option ignoriert, werden alle Räume angezeigt",
|
||
"default": [],
|
||
"additionalItems": true,
|
||
"items": {
|
||
"type": "string",
|
||
"description": "",
|
||
"default": "",
|
||
"examples": ["Piscopia"]
|
||
}
|
||
}
|
||
},
|
||
"additionalProperties": true
|
||
},
|
||
"features": {
|
||
"$ref": "#/definitions/Features"
|
||
},
|
||
"overviewPage": {
|
||
"$ref": "#/definitions/Page"
|
||
},
|
||
"html": {
|
||
"type": "object",
|
||
"description": "Anpassung der Standard-Texte",
|
||
"properties": {
|
||
"banner": {
|
||
"type": ["string", "null"],
|
||
"format": "text",
|
||
"title": "HTML-Code für den Banner (nur auf der Startseite, direkt unter dem Header)",
|
||
"description": "wird üblicherweise für KeyVisuals oder Textmarke verwendet (vgl. Hintergrund des Sliders oben auf http://media.ccc.de/)\nDieser HTML-Block wird üblicherweise in der main.less speziell für die Konferenz umgestaltet.\nWird diese Zeile nicht konnfiguriert, wird kein Banner ausgegeben.",
|
||
"examples": [
|
||
"<img src=\"../configs/conferences/fiffkon16/logo.png\" class=\"FIfFKon\">",
|
||
"<div class=\"congress\"></div><div class=\"congress-motto\"></div>"
|
||
]
|
||
},
|
||
"footer": {
|
||
"type": ["string", "null"],
|
||
"format": "html",
|
||
"title": "HTML-Code für den Footer (z.B. für spezielle Attribuierung mit <a>-Tags)",
|
||
"description": "Sollte üblicherweise nur Inline-Elemente enthalten. Wird diese Zeile gelassen, wird die Standard-Attribuierung für (c3voc.de) verwendet",
|
||
"default": null,
|
||
"examples": [
|
||
"by <a href=\"https://di.c3voc.de\">DiVOC Organizers</a> &<a href=\"https://c3voc.de\">C3VOC</a>\n\t"
|
||
]
|
||
},
|
||
"not_started": {
|
||
"$id": "#/properties/conference/properties/streamingConfig/properties/html/properties/not_started",
|
||
"type": ["string", "null"],
|
||
"format": "textarea",
|
||
"title": "HTML-Code für die 'Event has not started yet' Seite",
|
||
"description": "Ersetzt den Standardtext",
|
||
"examples": [
|
||
"<h1>Sonoj 2019 has not started yet</h1>\n<p>Live streams will be available here throughout the event. During and leading up to the event <a href=\"ircs://chat.freenode.net/sonoj\">#sonoj on Freenode</a>\nwill be a place for discussion and questions.\nIf you do not have an IRC client installed, try out <a href=\"https://webchat.freenode.net/#sonoj\">freenode webchat</a>. So even if you are not able to visit in person, please feel free to participate remotely.\n</p>"
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"extraFiles": {
|
||
"type": ["object", "null"],
|
||
"additionalProperties": true
|
||
}
|
||
}
|
||
},
|
||
"RoomStreamingConfig": {
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"title": "RoomStreamingConfig",
|
||
"description": "",
|
||
"examples": [
|
||
{
|
||
"display": "Piscopia",
|
||
"preview": true,
|
||
"stereo": false,
|
||
"sd_video": true,
|
||
"hd_video": true,
|
||
"slides": false,
|
||
"dash": true,
|
||
"audio": true
|
||
}
|
||
],
|
||
"properties": {
|
||
"display": {
|
||
"type": "string",
|
||
"title": "Anzeige-Name",
|
||
"description": "",
|
||
"default": "",
|
||
"examples": ["Piscopia"]
|
||
},
|
||
"display_short": {
|
||
"type": "string"
|
||
},
|
||
"wide": {
|
||
"type": "boolean",
|
||
"title": "Breiter Teaser",
|
||
"description": "Doppelte Breite für die Teaserbox auf der Übersichtsseite",
|
||
"default": true
|
||
},
|
||
"preview": {
|
||
"type": "boolean",
|
||
"title": "Stream-Vorschaubildchen auf der Übersichtsseite anzeigen",
|
||
"description": "",
|
||
"default": true
|
||
},
|
||
"translation": {
|
||
"type": "array",
|
||
"title": "Übersetzungstonspur aktivieren",
|
||
"description": "Betrifft video sd / hd, slides, audio",
|
||
"items": {
|
||
"$ref": "#/definitions/TranslationConfig"
|
||
}
|
||
},
|
||
"stereo": {
|
||
"type": "boolean",
|
||
"title": "Stereo",
|
||
"description": "",
|
||
"default": false
|
||
},
|
||
"dash": {
|
||
"type": "boolean",
|
||
"title": "DASH",
|
||
"description": "",
|
||
"default": true
|
||
},
|
||
"hd_video": {
|
||
"type": "boolean",
|
||
"title": "HD",
|
||
"description": "Wenn dieses Flag deaktiviert wird kein HD-Video (1920×1080) angeboten. Wird auch SD-Video und DASH deaktivert, wird für diesen Raum überhaupt kein Video angeboten. In diesem Fall wird Slides, Audio und zuletzt Musik als Default-Stream angenommen – sofern aktiviert.",
|
||
"default": true
|
||
},
|
||
"sd_video": {
|
||
"type": "boolean",
|
||
"title": "SD",
|
||
"description": "",
|
||
"default": true
|
||
},
|
||
"slides": {
|
||
"type": "boolean",
|
||
"title": "Slide-Only-Stream",
|
||
"description": "Getrennter Stream für Vortragsfolien verfügbar",
|
||
"default": false
|
||
},
|
||
"audio": {
|
||
"type": "boolean",
|
||
"title": "Audio-Only-Stream",
|
||
"description": "",
|
||
"default": false
|
||
},
|
||
"music": {
|
||
"type": "boolean",
|
||
"title": "Musik-Stream",
|
||
"description": "",
|
||
"default": false
|
||
},
|
||
"schedule": {
|
||
"type": "boolean",
|
||
"title": "Fahrplan-Ansicht auf der Raum-Seite aktivieren",
|
||
"description": "Wenn diese Option deaktivert wird der Raum nicht im Fahrplan gesucht und auch auf der Startseite findet keine Darstellung statt. Ebenso können alle Fahrplan-Funktionialitäten durch auskommentieren des globalen Flags deaktiviert werden.",
|
||
"default": true
|
||
},
|
||
"feedback": {
|
||
"type": "boolean",
|
||
"title": "Feedback anzeigen",
|
||
"description": "Wenn diese Option deaktivert taucht der Raum auch im globalen Feedback-Formular nicht auf. Hängt vom Feedback-Flag in den globalen Optionen ab.",
|
||
"default": true
|
||
},
|
||
"subtitles": {
|
||
"type": "boolean",
|
||
"title": "Subtitles-Player aktivieren",
|
||
"description": "Subtitles-Button und die damit verbundenen Funktionen. Hängt vom Subtitles-Flag in den globalen Optionen ab.",
|
||
"default": false
|
||
},
|
||
"subtitles_room_id": {
|
||
"type": "integer",
|
||
"title": "ID des Raumes im L2S2-System",
|
||
"description": "",
|
||
"examples": [1]
|
||
},
|
||
"embed": {
|
||
"type": "boolean",
|
||
"title": "Embed-Form aktivieren",
|
||
"description": "Ist dieses Option aktiviert, wird ein Embed-Tab unter dem Video angezeigt. Darüber kann der Player als iframe eingebunden werden. Wenn diese Option deaktivert ist, wird kein Embed-Tab angeboten und die URL zum Einbetten existiert nicht. Ebenso können alle Embedding-Funktionialitäten durch deaktiveren des globalen EMBED-Blocks deaktiviert werden.",
|
||
"default": true
|
||
},
|
||
"chat": {
|
||
"type": ["boolean", "object"],
|
||
"title": "Chat-Tab aktivieren/konfigurieren",
|
||
"description": "Ist diese Option aktiviert, wird ein Chat-Tab mit den jeweiligen Links angezeigt.",
|
||
"default": false,
|
||
"$ref": "#/definitions/ChatConfig"
|
||
},
|
||
"social": {
|
||
"type": ["object"],
|
||
"title": "Social Media konfigurieren (ebenfalls im Chat-Tab)",
|
||
"description": "Sind diese Optionen aktiviert, werden im Chat-Tab die jeweiligen Links angezeigt.",
|
||
"default": false,
|
||
"$ref": "#/definitions/SocialMediaConfig"
|
||
}
|
||
}
|
||
},
|
||
"TranslationConfig": {
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"required": ["endpoint", "label"],
|
||
"properties": {
|
||
"endpoint": {
|
||
"type": "string"
|
||
},
|
||
"label": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"ChatConfig":{
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"matrix": {
|
||
"$ref": "#/definitions/IrcConfig"
|
||
},
|
||
"irc": {
|
||
"$ref": "#/definitions/IrcConfig"
|
||
}
|
||
}
|
||
},
|
||
"IrcConfig": {
|
||
"$anyOf": [
|
||
{
|
||
"type": "boolean"
|
||
},
|
||
{
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"display": {
|
||
"type": "string"
|
||
},
|
||
"url": {
|
||
"type": "string",
|
||
"format": "uri"
|
||
}
|
||
},
|
||
"required": ["display", "url"]
|
||
}
|
||
]
|
||
},
|
||
"SocialMediaConfig": {
|
||
"type": "object",
|
||
"title": "Raum-/Streamspezifize Konfiguration für Social Media",
|
||
"properties": {
|
||
"hashtag": {
|
||
"type": "string",
|
||
"title": "Hashtag des Streams",
|
||
"examples": ["#36C3", "#divocr2r"]
|
||
},
|
||
"mastodon":{
|
||
"type": "boolean"
|
||
},
|
||
"twitter": {
|
||
"type": ["boolean", "object"],
|
||
"$ref": "#/definitions/SocialMediaDetailConfig"
|
||
}
|
||
}
|
||
},
|
||
"SocialMediaDetailConfig": {
|
||
"title": "SocialMedia",
|
||
"type": "object",
|
||
"additionalProperties": false,
|
||
"properties": {
|
||
"display": {
|
||
"type": "string"
|
||
},
|
||
"text": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
"required": ["display", "text"]
|
||
},
|
||
"Page": {
|
||
"type": "object",
|
||
"title": "Konfiguration der Stream-Übersicht auf der Startseite",
|
||
"description": "Wenn hier nichts angegeben ist, wird die Startseite automatisch aus der Raumliste generiert",
|
||
"default": {},
|
||
"required": ["sections"],
|
||
"properties": {
|
||
"sections": {
|
||
"type": "array",
|
||
"title": "Abschnitte und darunter aufgeführte Räume",
|
||
"description": "Es können beliebig neue Gruppen und Räume hinzugefügt werden",
|
||
"default": [],
|
||
"examples": [
|
||
[
|
||
{
|
||
"title": "Live",
|
||
"rooms": [
|
||
{
|
||
"slug": "halla"
|
||
},
|
||
{
|
||
"slug": "hallb"
|
||
},
|
||
{
|
||
"slug": "hallc"
|
||
},
|
||
{
|
||
"slug": "halld"
|
||
},
|
||
{
|
||
"slug": "halle"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"title": "Assemblies Live",
|
||
"rooms": [
|
||
{
|
||
"slug": "chaoswest"
|
||
},
|
||
{
|
||
"slug": "wikipakawg"
|
||
},
|
||
{
|
||
"slug": "oio"
|
||
},
|
||
{
|
||
"slug": "sz"
|
||
},
|
||
{
|
||
"slug": "cdc"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
],
|
||
"items": {
|
||
"type": "object",
|
||
"title": "Abschnitt",
|
||
"description": "",
|
||
"default": {},
|
||
"required": ["title", "items"],
|
||
"properties": {
|
||
"title": {
|
||
"type": "string",
|
||
"title": "Titel der Gruppe",
|
||
"description": "",
|
||
"default": "Live",
|
||
"examples": ["Live", "Audio"]
|
||
},
|
||
"items": {
|
||
"type": "array",
|
||
"title": "Räume / Channels",
|
||
"description": "",
|
||
"items": {
|
||
"type": "object",
|
||
"required": ["slug"],
|
||
"additionalProperties": true,
|
||
"properties": {
|
||
"slug": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|