From acdcad42568773e10374c56c79f6c9158ee84070 Mon Sep 17 00:00:00 2001
From: Jan Koppe
Date: Thu, 7 Nov 2024 16:19:22 +0100
Subject: [PATCH] add a bunch of shit that i changed a while back
---
docker-compose.yaml | 2 +-
source/config/api/__init__.py | 2 +-
source/config/api/transcodingprofile.py | 63 ++
.../transcodingprofile_confirm_delete.html | 36 +
.../config/transcodingprofile_detail.html | 121 +++
.../config/transcodingprofile_list.html | 72 ++
.../transcodingprofile_update_form.html | 29 +
source/config/urls.py | 7 +-
source/config/views/transcodingprofile.py | 86 +++
source/locale/de/LC_MESSAGES/django.po | 339 ---------
source/locale/en/LC_MESSAGES/django.po | 697 +++++++++++++-----
source/portier/api.py | 1 +
source/portier/settings.py | 6 +-
source/static/js/transcodingprofile-list.js | 26 +
source/templates/base.html | 2 +
15 files changed, 953 insertions(+), 536 deletions(-)
create mode 100644 source/config/api/transcodingprofile.py
create mode 100644 source/config/templates/config/transcodingprofile_confirm_delete.html
create mode 100644 source/config/templates/config/transcodingprofile_detail.html
create mode 100644 source/config/templates/config/transcodingprofile_list.html
create mode 100644 source/config/templates/config/transcodingprofile_update_form.html
create mode 100644 source/config/views/transcodingprofile.py
delete mode 100644 source/locale/de/LC_MESSAGES/django.po
create mode 100644 source/static/js/transcodingprofile-list.js
diff --git a/docker-compose.yaml b/docker-compose.yaml
index a43dbbd..ece8d12 100644
--- a/docker-compose.yaml
+++ b/docker-compose.yaml
@@ -1,4 +1,4 @@
-version: '2.4'
+version: "2.4"
services:
app:
diff --git a/source/config/api/__init__.py b/source/config/api/__init__.py
index 26a8e56..636befa 100644
--- a/source/config/api/__init__.py
+++ b/source/config/api/__init__.py
@@ -1 +1 @@
-from . import pull, recorder, restream, stream
+from . import pull, recorder, restream, stream, transcodingprofile
diff --git a/source/config/api/transcodingprofile.py b/source/config/api/transcodingprofile.py
new file mode 100644
index 0000000..5bb2653
--- /dev/null
+++ b/source/config/api/transcodingprofile.py
@@ -0,0 +1,63 @@
+
+from ninja import Router, ModelSchema, Schema
+from ninja.errors import HttpError
+from config import models
+from typing import List
+from guardian.shortcuts import get_objects_for_user, assign_perm
+from django.shortcuts import get_object_or_404
+
+router = Router()
+
+class TranscodingProfile(ModelSchema):
+ class Meta:
+ model = models.TranscodingProfile
+ fields = "__all__"
+
+class TranscodingProfilePatch(ModelSchema):
+ class Meta:
+ model = models.TranscodingProfile
+ exclude = ["id"]
+ fields_optional = "__all__"
+ extra = "forbid"
+
+
+@router.get('/', response=List[TranscodingProfile])
+def list_transcodingprofile(request):
+ return get_objects_for_user(request.user, 'view_transcodingprofile', models.TranscodingProfile.objects.all())
+
+@router.get('/{id}', response=TranscodingProfile)
+def get_transcodingprofile(request, id: int):
+ obj = get_object_or_404(models.TranscodingProfile, id=id)
+
+ if not request.user.has_perm('view_transcodingprofile', obj):
+ raise HttpError(401, "unauthorized")
+
+ return obj
+
+@router.post('/', response=TranscodingProfile)
+def create_transcodingprofile(request, payload: TranscodingProfilePatch):
+ obj = models.TranscodingProfile.objects.create(**payload.dict())
+
+ assign_perm( 'view_transcodingprofile', request.user, obj)
+ assign_perm('change_transcodingprofile', request.user, obj)
+ assign_perm('delete_transcodingprofile', request.user, obj)
+ return obj
+
+@router.patch('/{id}', response=TranscodingProfile)
+def patch_transcodingprofile(request, id: int, payload: TranscodingProfilePatch):
+ obj = get_object_or_404(models.TranscodingProfile, id=id)
+
+ if not request.user.has_perm('change_transcodingprofile', obj):
+ raise HttpError(401, "unauthorized")
+
+ for key, value in payload.dict(exclude_unset=True).items():
+ setattr(obj, key, value)
+ obj.save()
+ return obj
+
+@router.delete('/{id}', response=None)
+def delete_transcodingprofile(request, id: int):
+ obj = get_object_or_404(models.TranscodingProfile, id=id)
+ if not request.user.has_perm('delete_transcodingprofile', obj):
+ raise HttpError(401, "unauthorized")
+ obj.delete()
diff --git a/source/config/templates/config/transcodingprofile_confirm_delete.html b/source/config/templates/config/transcodingprofile_confirm_delete.html
new file mode 100644
index 0000000..c7df8cd
--- /dev/null
+++ b/source/config/templates/config/transcodingprofile_confirm_delete.html
@@ -0,0 +1,36 @@
+{% extends 'base.html' %}
+{% load i18n %}
+{% load static %}
+{% load bootstrap4 %}
+{% load fontawesome_5 %}
+
+{% block 'sidenav' %}
+ {% with 'transcodingprofile' as section %}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+
+{% block 'content' %}
+
+{% trans "confirm_delete_header" %}
+
+
+{% endblock %}
diff --git a/source/config/templates/config/transcodingprofile_detail.html b/source/config/templates/config/transcodingprofile_detail.html
new file mode 100644
index 0000000..169848f
--- /dev/null
+++ b/source/config/templates/config/transcodingprofile_detail.html
@@ -0,0 +1,121 @@
+{% extends 'base.html' %}
+{% load i18n %}
+{% load static %}
+{% load bootstrap4 %}
+{% load fontawesome_5 %}
+{% load guardian_tags %}
+{% block 'sidenav' %}
+{% with 'transcodingprofile' as section %} {{ block.super }} {% endwith %}
+{% endblock %}
+{% block 'content' %}
+
+
+
+
{% trans "transcodingprofile_configuration_details_header" %}
+
+ {% get_obj_perms user for object as "obj_perms" %}
+
+
+
+
+
+
Video
+
+ -
+ {% trans "transcodingprofile_video_map_stream" %}
+
+ - {{ object.video_map_stream }}
+ -
+ {% trans "transcodingprofile_video_codec" %}
+
+ - {{ object.get_video_codec_display }}
+ -
+ {% trans "transcodingprofile_video_bitrate" %}
+
+ - {{ object.video_bitrate }} kbps
+ -
+ {% trans "transcodingprofile_video_bitrate_mode" %}
+
+ - {{ object.get_video_bitrate_mode_display }}
+ -
+ {% trans "transcodingprofile_video_gop_size" %}
+
+ - {{ object.video_gop_size }}
+ -
+ {% trans "transcodingprofile_video_pixel_format" %}
+
+ - {{ object.get_video_pixel_format_display }}
+ -
+ {% trans "transcodingprofile_video_resolution" %}
+
+ - {{ object.video_resolution }}
+ -
+ {% trans "transcodingprofile_video_frame_rate" %}
+
+ - {{ object.video_frame_rate }}
+
+
+
+
Audio
+
+ -
+ {% trans "transcodingprofile_audio_map_stream" %}
+
+ - {{ object.audio_map_stream }}
+ -
+ {% trans "transcodingprofile_audio_codec" %}
+
+ - {{ object.get_audio_codec_display }}
+ -
+ {% trans "transcodingprofile_audio_bitrate" %}
+
+ - {{ object.audio_bitrate }} kbps
+ -
+ {% trans "transcodingprofile_audio_channels" %}
+
+ - {{ object.audio_channels }}
+ -
+ {% trans "transcodingprofile_audio_sample_rate" %}
+
+ - {{ object.audio_sample_rate }}
+
+
+
+
+{% endblock %}
diff --git a/source/config/templates/config/transcodingprofile_list.html b/source/config/templates/config/transcodingprofile_list.html
new file mode 100644
index 0000000..6b3d9e8
--- /dev/null
+++ b/source/config/templates/config/transcodingprofile_list.html
@@ -0,0 +1,72 @@
+{% extends 'base.html' %}
+{% load i18n %}
+{% load static %}
+{% load bootstrap4 %}
+{% load fontawesome_5 %}
+{% block 'sidenav' %}
+ {% with 'transcodingprofile' as section %}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+
+{% block 'content' %}
+
+
+
+
{% trans "transcodingprofile_configuration_header" %}
+
+
+
+
+
+
+
+
+ {% trans "loading..." %}
+
+
+
+
+
+
+
+
+
+{% endblock %}
diff --git a/source/config/templates/config/transcodingprofile_update_form.html b/source/config/templates/config/transcodingprofile_update_form.html
new file mode 100644
index 0000000..273a86c
--- /dev/null
+++ b/source/config/templates/config/transcodingprofile_update_form.html
@@ -0,0 +1,29 @@
+{% extends 'base.html' %}
+{% load i18n %}
+{% load bootstrap4 %}
+
+{% block 'sidenav' %}
+ {% with 'transcodingprofile' as section %}
+ {{ block.super }}
+ {% endwith %}
+{% endblock %}
+
+{% block 'content' %}
+{% trans "update_transcodingprofile_configuration_header" %}
+
+
+
+ {% trans "transcodingprofile_configuration_text_html" %}
+
+
+
+{% endblock %}
diff --git a/source/config/urls.py b/source/config/urls.py
index bebc179..4dbada2 100644
--- a/source/config/urls.py
+++ b/source/config/urls.py
@@ -1,5 +1,5 @@
from django.urls import path
-from config.views import restream, stream, pull
+from config.views import restream, stream, pull, transcodingprofile
from config.views.srs import callback_srs
app_name = 'config'
@@ -21,4 +21,9 @@ urlpatterns = [
path('pull//change', pull.PullUpdate.as_view(), name='pull_change'),
path('pull//delete', pull.PullDelete.as_view(), name='pull_delete'),
path('pull/create', pull.PullCreate.as_view(), name='pull_create'),
+ path('transcodingprofile/', transcodingprofile.TranscodingProfileList.as_view(), name='transcodingprofile_list'),
+ path('transcodingprofile//', transcodingprofile.TranscodingProfileDetail.as_view(), name='transcodingprofile_detail'),
+ path('transcodingprofile//change', transcodingprofile.TranscodingProfileUpdate.as_view(), name='transcodingprofile_change'),
+ path('transcodingprofile//delete', transcodingprofile.TranscodingProfileDelete.as_view(), name='transcodingprofile_delete'),
+ path('transcodingprofile/create', transcodingprofile.TranscodingProfileCreate.as_view(), name='transcodingprofile_create'),
]
diff --git a/source/config/views/transcodingprofile.py b/source/config/views/transcodingprofile.py
new file mode 100644
index 0000000..f137997
--- /dev/null
+++ b/source/config/views/transcodingprofile.py
@@ -0,0 +1,86 @@
+import logging
+
+from django.urls import reverse_lazy
+from django.contrib.auth.decorators import login_required
+from django.utils.decorators import method_decorator
+from django.views.decorators.csrf import ensure_csrf_cookie
+from django.views.generic import ListView, DetailView, CreateView, DeleteView, UpdateView
+from guardian.decorators import permission_required_or_403
+from guardian.shortcuts import assign_perm
+
+from config import models, forms
+
+logger = logging.getLogger(__name__)
+
+
+
+@method_decorator(login_required, name='dispatch')
+@method_decorator(permission_required_or_403('config.add_restream'),
+ name='dispatch')
+@method_decorator(ensure_csrf_cookie, name='dispatch')
+class TranscodingProfileList(ListView):
+ model = models.TranscodingProfile
+
+
+@method_decorator(login_required, name='dispatch')
+@method_decorator(permission_required_or_403('config.view_transcodingprofile',
+ (models.TranscodingProfile, 'pk', 'pk')),
+ name='dispatch')
+class TranscodingProfileDetail(DetailView):
+ model = models.TranscodingProfile
+
+
+@method_decorator(login_required, name='dispatch')
+@method_decorator(permission_required_or_403('config.change_transcodingprofile',
+ (models.TranscodingProfile, 'pk', 'pk')),
+ name='dispatch')
+class TranscodingProfileUpdate(UpdateView):
+ model = models.TranscodingProfile
+ template_name_suffix = '_update_form'
+
+ fields = [
+ 'name',
+ 'video_map_stream',
+ 'video_codec',
+ 'video_bitrate',
+ 'video_frame_rate',
+ 'video_resolution',
+ 'video_gop_size',
+ 'video_pixel_format',
+ 'audio_map_stream',
+ 'audio_codec',
+ 'audio_bitrate',
+ 'audio_sample_rate',
+ 'audio_channels',
+
+ ]
+
+
+@method_decorator(login_required, name='dispatch')
+@method_decorator(permission_required_or_403('config.add_transcodingprofile'),
+ name='dispatch')
+class TranscodingProfileCreate(CreateView):
+ model = models.TranscodingProfile
+
+ def get_form_kwargs(self):
+ kwargs = super().get_form_kwargs()
+ kwargs['user'] = self.request.user
+ return kwargs
+
+ def form_valid(self, form):
+ valid = super().form_valid(form)
+ if valid:
+ user = self.request.user
+ assign_perm('view_transcodingprofile', user, self.object)
+ assign_perm('change_transcodingprofile', user, self.object)
+ assign_perm('delete_transcodingprofile', user, self.object)
+ return valid
+
+
+@method_decorator(login_required, name='dispatch')
+@method_decorator(permission_required_or_403('config.delete_transcodingprofile',
+ (models.TranscodingProfile, 'pk', 'pk')),
+ name='dispatch')
+class TranscodingProfileDelete(DeleteView):
+ model = models.TranscodingProfile
+ success_url = reverse_lazy('config:transcodingprofile_list')
diff --git a/source/locale/de/LC_MESSAGES/django.po b/source/locale/de/LC_MESSAGES/django.po
deleted file mode 100644
index 6647b8c..0000000
--- a/source/locale/de/LC_MESSAGES/django.po
+++ /dev/null
@@ -1,339 +0,0 @@
-# Copyright (C) Chaoswest TV
-# This file is distributed under the same license as the PACKAGE package.
-# Jan Koppe , 2020.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: portier 0.6.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-02-25 20:42+0000\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Jan Koppe \n"
-"Language-Team: German \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-#: portier/settings.py:141
-msgid "German"
-msgstr "Deutsch"
-
-#: portier/settings.py:142
-msgid "English"
-msgstr "Englisch"
-
-#: restream/models.py:16
-msgid "restreamconfig_stream_help"
-msgstr "Stream der als Quelle für die Weiterleitung verwendet wird"
-
-#: restream/models.py:17
-msgid "restreamconfig_target_help"
-msgstr ""
-"Ziel URL an die der Stream weitergeleitet wird, inklusive Schema (z.B. "
-"rtmp://)"
-
-#: restream/models.py:18
-msgid "restreamconfig_name_help"
-msgstr "Name für diese Restream Konfiguration"
-
-#: restream/models.py:19
-msgid "restreamconfig_activate_help"
-msgstr "Nur aktive Konfigurationen werden bei eingehenden Streams ausgeführt"
-
-#: restream/models.py:20
-#, fuzzy
-#| msgid "restreamconfig_target_help"
-msgid "restreamconfig_format_help"
-msgstr ""
-"Ziel URL an die der Stream weitergeleitet wird, inklusive Schema (z.B. "
-"rtmp://)"
-
-#: restream/models.py:23
-msgid "restreamconfig_verbose_name"
-msgstr "Restream Konfiguration"
-
-#: restream/models.py:24
-msgid "restreamconfig_verbose_name_plural"
-msgstr "Restream Konfigurationen"
-
-#: restream/models.py:27
-msgid "restreamconfig_class_name"
-msgstr "Restream Konfiguration"
-
-#: restream/templates/restream/restreamconfig_confirm_delete.html:6
-#: rtmp/templates/rtmp/stream_confirm_delete.html:6
-msgid "confirm_delete_header"
-msgstr "Löschen bestätigen"
-
-#: restream/templates/restream/restreamconfig_confirm_delete.html:12
-#, python-format
-msgid "are_you_sure_you_want_to_delete_\"%(restreamconfig_config_name)s\"?"
-msgstr ""
-"Bist du sicher, dass du \"%(restreamconfig_config_name)s\" löschen willst?"
-
-#: restream/templates/restream/restreamconfig_confirm_delete.html:15
-#: restream/templates/restream/restreamconfig_detail.html:20
-#: rtmp/templates/rtmp/stream_confirm_delete.html:18
-#: rtmp/templates/rtmp/stream_detail.html:20
-msgid "delete"
-msgstr "Löschen"
-
-#: restream/templates/restream/restreamconfig_detail.html:12
-msgid "restreamconfig_configuration_details_header"
-msgstr "Restream Konfiguration Details"
-
-#: restream/templates/restream/restreamconfig_detail.html:17
-#: rtmp/templates/rtmp/stream_detail.html:17
-msgid "change"
-msgstr "Ändern"
-
-#: restream/templates/restream/restreamconfig_detail.html:28
-#: restream/templates/restream/restreamconfig_list.html:33
-#: rtmp/templates/rtmp/stream_detail.html:28
-#: rtmp/templates/rtmp/stream_list.html:33
-msgid "name"
-msgstr "Name"
-
-#: restream/templates/restream/restreamconfig_detail.html:30
-msgid "stream"
-msgstr "Stream"
-
-#: restream/templates/restream/restreamconfig_detail.html:32
-#: restream/templates/restream/restreamconfig_list.html:34
-msgid "active"
-msgstr "Aktiv"
-
-#: restream/templates/restream/restreamconfig_detail.html:43
-msgid "configured_target_url"
-msgstr "Konfigurierte Ziel-URL"
-
-#: restream/templates/restream/restreamconfig_form.html:5
-msgid "create_new_restreamconfig_configuration_header"
-msgstr "Neue Restream Konfiguration erstellen"
-
-#: restream/templates/restream/restreamconfig_form.html:14
-#: restream/templates/restream/restreamconfig_update_form.html:14
-#: rtmp/templates/rtmp/stream_form.html:14
-#: rtmp/templates/rtmp/stream_update_form.html:14
-#: templates/registration/password_change_form.html:14
-#: templates/registration/password_reset_form.html:14
-msgid "submit"
-msgstr "Abschicken"
-
-#: restream/templates/restream/restreamconfig_form.html:21
-#: restream/templates/restream/restreamconfig_update_form.html:21
-msgid "restreamconfig_configuration_text_html"
-msgstr ""
-"Eine Restream Konfiguration erlaubt es dir eingehende Streams in das "
-"System unverändert an externe System weiterzuleiten.
Die Restream "
-"Konfiguration benötigt einen vorher konfigurierten Quell-Stream und ein "
-"Ziel, dass du über eine RTMP URL frei definieren kannst. Die RTMP URL sollte "
-"zum Beispiel so ausschauen: rtmp://servername/app/streamkey
"
-"p>
Du kannst natürlich mehrere Restream Konfigurationen auf einen "
-"einzelnen Quell-Stream einrichten. Das erlaubt es dir von deinem Encoder nur "
-"einmal einen Stream zu senden, diesen aber automatisch an mehrere Platformen "
-"weiterzuleiten.
Nur Restream Konfigurationen die auf Aktiv geschaltet "
-"sind werden bei einem neu eingehenden Stream ausgeführt!
"
-
-#: restream/templates/restream/restreamconfig_list.html:11
-msgid "restreamconfig_configuration_header"
-msgstr "Restream Konfiguration"
-
-#: restream/templates/restream/restreamconfig_list.html:16
-#: rtmp/templates/rtmp/stream_list.html:16
-msgid "create"
-msgstr "Erstellen"
-
-#: restream/templates/restream/restreamconfig_list.html:26
-#: rtmp/templates/rtmp/stream_list.html:26
-msgid "loading..."
-msgstr ""
-
-#: restream/templates/restream/restreamconfig_list.html:35
-#: rtmp/templates/rtmp/stream_list.html:35
-msgid "actions"
-msgstr "Aktionen"
-
-#: restream/templates/restream/restreamconfig_list.html:52
-#: rtmp/templates/rtmp/stream_list.html:46
-msgid "details"
-msgstr "Details"
-
-#: restream/templates/restream/restreamconfig_update_form.html:5
-msgid "update_restreamconfig_configuration_header"
-msgstr "Restream Konfiguration anpassen"
-
-#: rtmp/models.py:13
-msgid "rtmp_application_name"
-msgstr "RTMP Application Name"
-
-#: rtmp/models.py:16
-msgid "application_verbose_name"
-msgstr "Application"
-
-#: rtmp/models.py:17
-msgid "application_verbose_name_plural"
-msgstr "Applications"
-
-#: rtmp/models.py:20
-msgid "aplication_class_name"
-msgstr "Application"
-
-#: rtmp/models.py:27
-msgid "stream_application_help"
-msgstr "Unter welcher RTMP Application gilt diese Stream ID"
-
-#: rtmp/models.py:28
-msgid "stream_stream_help"
-msgstr "RTMP Stream ID"
-
-#: rtmp/models.py:29
-msgid "stream_name_help"
-msgstr "Name für diesen Stream"
-
-#: rtmp/models.py:68
-msgid "stream_class_name"
-msgstr "Stream"
-
-#: rtmp/templates/rtmp/stream_confirm_delete.html:13
-msgid "deleting_stream_configuration_will_also_delete_all_depending_confgurations_warning"
-msgstr ""
-"Achtung! Beim Löschen dieser Stream Konfiguration werden auch alle "
-"abhängigen Konfigurationen gelöscht."
-
-#: rtmp/templates/rtmp/stream_confirm_delete.html:15
-#, python-format
-msgid "are_you_sure_you_want_to_delete_\"%(stream_config_name)s\"?"
-msgstr "Willst du wirklich \"%(stream_config_name)s\" löschen?"
-
-#: rtmp/templates/rtmp/stream_confirm_delete.html:25
-msgid "deleting_configurations_list_header"
-msgstr "Diese Konfigurationen werden gelöscht"
-
-#: rtmp/templates/rtmp/stream_detail.html:12
-msgid "stream_configuration_details_header"
-msgstr "Stream Konfiguration Details"
-
-#: rtmp/templates/rtmp/stream_detail.html:30
-msgid "application"
-msgstr "Application"
-
-#: rtmp/templates/rtmp/stream_detail.html:33
-msgid "how_to_configure_your_encoder_header"
-msgstr "Wie du deinen Encoder konfigurierst"
-
-#: rtmp/templates/rtmp/stream_detail.html:35
-msgid "set_this_stream_server_in_encoder"
-msgstr "Stelle diesen Stream Server in deinem Encoder ein"
-
-#: rtmp/templates/rtmp/stream_detail.html:37
-msgid "set_this_stream_id_in_encoder"
-msgstr "Stelle diese Stream ID in deinem Encoder ein"
-
-#: rtmp/templates/rtmp/stream_detail.html:46
-#: rtmp/templates/rtmp/stream_form.html:21
-#: rtmp/templates/rtmp/stream_update_form.html:21
-msgid "stream_configuration_text_html"
-msgstr ""
-"Eine Stream Konfiguration erlaubt es dir einen Stream in das System zu "
-"schicken
Nur Streams die zu einer vorher erstellten Konfiguration "
-"zugeordnet werden können werden vom System angenommen.
Der Name dient "
-"dazu den Stream beim Erstellen von weiteren Konfigurationen leicht zu "
-"identifizieren. Die tatsächliche Stream ID wird dir nach dem erstellen "
-"angezeigt. Halte die Stream ID auf jeden Fall geheim.
"
-
-#: rtmp/templates/rtmp/stream_form.html:5
-msgid "create_new_stream_configuration_header"
-msgstr "Neue Stream Konfiguration erstellen"
-
-#: rtmp/templates/rtmp/stream_list.html:11
-msgid "stream_configuration_header"
-msgstr "Stream Konfiguration"
-
-#: rtmp/templates/rtmp/stream_list.html:34
-msgid "receiving"
-msgstr "Empfange"
-
-#: rtmp/templates/rtmp/stream_update_form.html:5
-msgid "update_stream_configuration_header"
-msgstr "Stream Konfiguration anpassen"
-
-#: templates/base.html:39
-#, python-format
-msgid "hello_%(username)s"
-msgstr "Hallo, %(username)s!"
-
-#: templates/base.html:42
-msgid "navbar_account_password_change"
-msgstr "Passwort ändern"
-
-#: templates/base.html:43
-msgid "navbar_account_logout"
-msgstr "Abmelden"
-
-#: templates/base.html:47
-msgid "navbar_login"
-msgstr "Anmelden"
-
-#: templates/base.html:80
-msgid "navbar_configuration_pull"
-msgstr "Pull"
-
-#: templates/base.html:83
-msgid "navbar_configuration_stream"
-msgstr "Stream"
-
-#: templates/base.html:86
-msgid "navbar_configuration_restream"
-msgstr "Restream"
-
-#: templates/base.html:89
-msgid "navbar_configuration_publish"
-msgstr "Publish"
-
-#: templates/base.html:92
-msgid "navbar_configuration_record"
-msgstr "Record"
-
-#: templates/base.html:95
-msgid "navbar_configuration_switch"
-msgstr "Switch"
-
-#: templates/registration/login.html:5 templates/registration/login.html:14
-msgid "login"
-msgstr "Anmelden"
-
-#: templates/registration/login.html:19
-msgid "forgot_password_q"
-msgstr "Passwort vergessen?"
-
-#: templates/registration/password_change_done.html:5
-msgid "password_change_successful"
-msgstr "Passwort erfolgreich geändert"
-
-#: templates/registration/password_change_done.html:7
-msgid "password_change_successful_text"
-msgstr ""
-"Das Passwort wurde erfolgreich geändert. Du kannst dich ab jetzt mit dem "
-"neuen Passwort anmelden."
-
-#: templates/registration/password_change_form.html:5
-msgid "change_password"
-msgstr "Passwort ändern"
-
-#: templates/registration/password_reset_form.html:5
-msgid "reset_password"
-msgstr "Passwort vergessen"
-
-#: templates/registration/password_reset_form.html:21
-msgid "reset_password_text_html"
-msgstr ""
-"Du hast dein Passwort vergessen? Kein Problem. Gib hier die E-mail Adresse "
-"deines Nutzerkonto an, und wir schicken dir einen Link zu mit dem du ein "
-"neues Passwort setzen kannst."
-
-#~ msgid "navbar_streaming"
-#~ msgstr "Streaming"
diff --git a/source/locale/en/LC_MESSAGES/django.po b/source/locale/en/LC_MESSAGES/django.po
index bca342d..16855a6 100644
--- a/source/locale/en/LC_MESSAGES/django.po
+++ b/source/locale/en/LC_MESSAGES/django.po
@@ -1,272 +1,581 @@
-# Copyright (C) Chaoswest TV
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
-# Jan Koppe , 2020.
+# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: portier 0.6.0\n"
+"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2024-02-25 20:42+0000\n"
+"POT-Creation-Date: 2024-05-10 14:40+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Jan Koppe \n"
-"Language-Team: english \n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: LANGUAGE \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: portier/settings.py:141
-msgid "German"
-msgstr "German"
+#: config/models.py:35
+msgid "transcodingprofile_name_help"
+msgstr "Name for the transcoding profile"
-#: portier/settings.py:142
-msgid "English"
-msgstr "English"
-
-#: restream/models.py:16
-msgid "restreamconfig_stream_help"
-msgstr "Stream that's being used as source for the restreaming"
-
-#: restream/models.py:17
-msgid "restreamconfig_target_help"
+#: config/models.py:37
+msgid "transcodingprofile_video_map_stream_help"
msgstr ""
-"Target url that the stream is being restreamed to, including schema (e.g. "
-"rtmp://)"
+"Index of the Video stream to map into the output. Can be used to select a "
+"specific video stream when the source contains multiple video streams."
-#: restream/models.py:18
-msgid "restreamconfig_name_help"
-msgstr "Name for this restream configuration"
-
-#: restream/models.py:19
-msgid "restreamconfig_activate_help"
-msgstr "Only active configurations will be executed for incoming streams"
-
-#: restream/models.py:20
-#, fuzzy
-#| msgid "restreamconfig_target_help"
-msgid "restreamconfig_format_help"
+#: config/models.py:38
+msgid "transcodingprofile_video_codec_help"
msgstr ""
-"Target url that the stream is being restreamed to, including schema (e.g. "
-"rtmp://)"
+"Video Codec to use for transcoding. COPY will copy the video stream without "
+"transcoding."
-#: restream/models.py:23
-msgid "restreamconfig_verbose_name"
-msgstr "Restream configuration"
+#: config/models.py:39
+msgid "transcodingprofile_video_bitrate_help"
+msgstr ""
+"Bitrate for the video stream in kbit/s. If the video codec is set to COPY, "
+"this value is ignored."
-#: restream/models.py:24
-msgid "restreamconfig_verbose_name_plural"
-msgstr "Restream configurations"
+#: config/models.py:40
+msgid "transcodingprofile_video_frame_rate_help"
+msgstr ""
+"Frame rate for the video stream. If the video codec is set to COPY, this "
+"value is ignored."
-#: restream/models.py:27
-msgid "restreamconfig_class_name"
-msgstr "Restream configuration"
+#: config/models.py:41
+msgid "transcodingprofile_video_resolution_help"
+msgstr ""
+"Scaling for the video stream. If the video codec is set to COPY, this value "
+"is ignored. Use 1920:-2 to scale the video to 1080p while keeping the aspect "
+"ratio."
-#: restream/templates/restream/restreamconfig_confirm_delete.html:6
-#: rtmp/templates/rtmp/stream_confirm_delete.html:6
+#: config/models.py:42
+msgid "transcodingprofile_video_gop_size_help"
+msgstr ""
+"Group of Pictures size for the video stream. If the video codec is set to "
+"COPY, this value is ignored. A good value is 2 times the frame rate."
+
+#: config/models.py:43
+msgid "transcodingprofile_video_pixel_format_help"
+msgstr ""
+"Pixel format for the video stream. If the video codec is set to COPY, this "
+"value is ignored. Use yuv420p for compatibility with most devices."
+
+#: config/models.py:44
+msgid "transcodingprofile_video_bitrate_mode_help"
+msgstr ""
+"Video bitrate mode. CBR will use a constant bitrate, VBR will use a variable "
+"bitrate. For streaming, usually CBR is preferred as it keeps a consistent "
+"network usage, but might not be as efficient as VBR."
+
+#: config/models.py:46
+msgid "transcodingprofile_audio_map_stream_help"
+msgstr ""
+"Index of the Audio stream to map into the output. Can be used to select a "
+"specific audio stream when the source contains multiple audio streams."
+
+#: config/models.py:47
+msgid "transcodingprofile_audio_codec_help"
+msgstr ""
+"Audio Codec to use for transcoding. COPY will copy the audio stream without "
+"transcoding."
+
+#: config/models.py:48
+msgid "transcodingprofile_audio_bitrate_help"
+msgstr ""
+"Bitrate for the audio stream in kbit/s. If the audio codec is set to COPY, "
+"this value is ignored."
+
+#: config/models.py:49
+msgid "transcodingprofile_audio_channels_help"
+msgstr ""
+"Audio channels for the audio stream. If the audio codec is set to COPY, this "
+"value is ignored. Use 2 for stereo audio."
+
+#: config/models.py:50
+msgid "transcodingprofile_audio_sample_rate_help"
+msgstr ""
+"Audio sample rate for the audio stream. If the audio codec is set to COPY, "
+"this value is ignored. Use 48000 for compatibility with most devices."
+
+#: config/models.py:53
+msgid "transcodingprofile_verbose_name"
+msgstr "Transcoding Profile"
+
+#: config/models.py:54
+msgid "transcodingprofile_verbose_name_plural"
+msgstr "Transcoding Profiles"
+
+#: config/models.py:57
+msgid "transcodingprofile_class_name"
+msgstr "TranscodingProfile"
+
+#: config/models.py:82
+msgid "stream_stream_help"
+msgstr ""
+
+#: config/models.py:83
+msgid "stream_name_help"
+msgstr ""
+
+#: config/models.py:109
+msgid "stream_class_name"
+msgstr ""
+
+#: config/models.py:116
+msgid "srsnode_name_help"
+msgstr ""
+
+#: config/models.py:117
+msgid "srsnode_api_base_help"
+msgstr ""
+
+#: config/models.py:118
+msgid "srsnode_rtmp_base_help"
+msgstr ""
+
+#: config/models.py:119
+msgid "srsnode_active_help"
+msgstr ""
+
+#: config/models.py:122
+msgid "srsnode_verbose_name"
+msgstr ""
+
+#: config/models.py:123
+msgid "srsnode_verbose_name_plural"
+msgstr ""
+
+#: config/models.py:130
+msgid "srsstreaminstance_node_help"
+msgstr ""
+
+#: config/models.py:131
+msgid "srsstreaminstance_stream_help"
+msgstr ""
+
+#: config/models.py:132
+msgid "srsstreaminstance_last_update_help"
+msgstr ""
+
+#: config/models.py:133
+msgid "srsstreaminstance_statusdata_help"
+msgstr ""
+
+#: config/models.py:136
+msgid "srsstreaminstance_verbose_name"
+msgstr ""
+
+#: config/models.py:137
+msgid "srsstreaminstance_verbose_name_plural"
+msgstr ""
+
+#: config/models.py:144
+msgid "pull_stream_help"
+msgstr ""
+
+#: config/models.py:145
+msgid "pull_source_help"
+msgstr ""
+
+#: config/models.py:146
+msgid "pull_activate_help"
+msgstr ""
+
+#: config/models.py:147
+msgid "pull_name_help"
+msgstr ""
+
+#: config/models.py:148 config/models.py:204
+msgid "restream_transcodingprofile_help"
+msgstr ""
+
+#: config/models.py:151
+msgid "pull_verbose_name"
+msgstr ""
+
+#: config/models.py:152
+msgid "pull_verbose_name_plural"
+msgstr ""
+
+#: config/models.py:155
+msgid "pull_class_name"
+msgstr ""
+
+#: config/models.py:199
+msgid "restream_stream_help"
+msgstr ""
+
+#: config/models.py:200
+msgid "restream_target_help"
+msgstr ""
+
+#: config/models.py:201
+msgid "restream_name_help"
+msgstr ""
+
+#: config/models.py:202
+msgid "restream_activate_help"
+msgstr ""
+
+#: config/models.py:203
+msgid "restream_format_help"
+msgstr ""
+
+#: config/models.py:207
+msgid "restream_verbose_name"
+msgstr ""
+
+#: config/models.py:208
+msgid "restream_verbose_name_plural"
+msgstr ""
+
+#: config/models.py:211
+msgid "restream_class_name"
+msgstr ""
+
+#: config/models.py:255
+msgid "recordingstorage_name_help"
+msgstr ""
+
+#: config/models.py:262
+msgid "localrecordingstorage_path_help"
+msgstr ""
+
+#: config/models.py:265
+msgid "localrecordingstorage_verbose_name"
+msgstr ""
+
+#: config/models.py:266
+msgid "localrecordingstorage_verbose_name_plural"
+msgstr ""
+
+#: config/models.py:272
+msgid "s3recordingstorage_bucket_help"
+msgstr ""
+
+#: config/models.py:273
+msgid "s3recordingstorage_access_key_help"
+msgstr ""
+
+#: config/models.py:274
+msgid "s3recordingstorage_secret_key_help"
+msgstr ""
+
+#: config/models.py:275
+msgid "s3recordingstorage_region_help"
+msgstr ""
+
+#: config/models.py:278
+msgid "s3recordingstorage_verbose_name"
+msgstr ""
+
+#: config/models.py:279
+msgid "s3recordingstorage_verbose_name_plural"
+msgstr ""
+
+#: config/models.py:288
+msgid "recorder_stream_help"
+msgstr ""
+
+#: config/models.py:289
+msgid "recorder_name_help"
+msgstr ""
+
+#: config/models.py:290
+msgid "recorder_activate_help"
+msgstr ""
+
+#: config/templates/config/pull_confirm_delete.html:13
+#: config/templates/config/restream_confirm_delete.html:13
+#: config/templates/config/stream_confirm_delete.html:13
+#: config/templates/config/transcodingprofile_confirm_delete.html:14
msgid "confirm_delete_header"
-msgstr "Confirm deletion"
+msgstr ""
-#: restream/templates/restream/restreamconfig_confirm_delete.html:12
+#: config/templates/config/pull_confirm_delete.html:19
#, python-format
-msgid "are_you_sure_you_want_to_delete_\"%(restreamconfig_config_name)s\"?"
-msgstr "Are you sure you want to delete \"%(restreamconfig_config_name)s\"?"
+msgid "are_you_sure_you_want_to_delete_\"%(pull_config_name)s\"?"
+msgstr ""
-#: restream/templates/restream/restreamconfig_confirm_delete.html:15
-#: restream/templates/restream/restreamconfig_detail.html:20
-#: rtmp/templates/rtmp/stream_confirm_delete.html:18
-#: rtmp/templates/rtmp/stream_detail.html:20
+#: config/templates/config/pull_confirm_delete.html:22
+#: config/templates/config/pull_detail.html:27
+#: config/templates/config/restream_confirm_delete.html:22
+#: config/templates/config/restream_detail.html:27
+#: config/templates/config/stream_confirm_delete.html:25
+#: config/templates/config/stream_detail.html:27
+#: config/templates/config/transcodingprofile_confirm_delete.html:27
+#: config/templates/config/transcodingprofile_detail.html:34
msgid "delete"
-msgstr "Delete"
+msgstr ""
-#: restream/templates/restream/restreamconfig_detail.html:12
-msgid "restreamconfig_configuration_details_header"
-msgstr "Restream configuration details"
+#: config/templates/config/pull_detail.html:19
+msgid "pull_configuration_details_header"
+msgstr ""
-#: restream/templates/restream/restreamconfig_detail.html:17
-#: rtmp/templates/rtmp/stream_detail.html:17
+#: config/templates/config/pull_detail.html:24
+#: config/templates/config/restream_detail.html:24
+#: config/templates/config/stream_detail.html:24
+#: config/templates/config/transcodingprofile_detail.html:27
msgid "change"
msgstr "Change"
-#: restream/templates/restream/restreamconfig_detail.html:28
-#: restream/templates/restream/restreamconfig_list.html:33
-#: rtmp/templates/rtmp/stream_detail.html:28
-#: rtmp/templates/rtmp/stream_list.html:33
+#: config/templates/config/pull_detail.html:35
+#: config/templates/config/pull_list.html:40
+#: config/templates/config/restream_detail.html:35
+#: config/templates/config/restream_list.html:40
+#: config/templates/config/stream_detail.html:35
+#: config/templates/config/stream_list.html:39
+#: config/templates/config/transcodingprofile_list.html:43
msgid "name"
msgstr "Name"
-#: restream/templates/restream/restreamconfig_detail.html:30
+#: config/templates/config/pull_detail.html:37
+#: config/templates/config/restream_detail.html:37
msgid "stream"
msgstr "Stream"
-#: restream/templates/restream/restreamconfig_detail.html:32
-#: restream/templates/restream/restreamconfig_list.html:34
+#: config/templates/config/pull_detail.html:39
+#: config/templates/config/pull_list.html:41
+#: config/templates/config/restream_detail.html:39
+#: config/templates/config/restream_list.html:41
msgid "active"
msgstr "Active"
-#: restream/templates/restream/restreamconfig_detail.html:43
-msgid "configured_target_url"
-msgstr "Configured target URL"
+#: config/templates/config/pull_detail.html:50
+msgid "configured_source_url"
+msgstr ""
-#: restream/templates/restream/restreamconfig_form.html:5
-msgid "create_new_restreamconfig_configuration_header"
-msgstr "Create new restream configuration"
+#: config/templates/config/pull_form.html:12
+msgid "create_new_pull_configuration_header"
+msgstr ""
-#: restream/templates/restream/restreamconfig_form.html:14
-#: restream/templates/restream/restreamconfig_update_form.html:14
-#: rtmp/templates/rtmp/stream_form.html:14
-#: rtmp/templates/rtmp/stream_update_form.html:14
+#: config/templates/config/pull_form.html:21
+#: config/templates/config/pull_update_form.html:21
+#: config/templates/config/restream_form.html:21
+#: config/templates/config/restream_update_form.html:21
+#: config/templates/config/stream_form.html:21
+#: config/templates/config/stream_update_form.html:21
#: templates/registration/password_change_form.html:14
#: templates/registration/password_reset_form.html:14
msgid "submit"
-msgstr "Submit"
-
-#: restream/templates/restream/restreamconfig_form.html:21
-#: restream/templates/restream/restreamconfig_update_form.html:21
-msgid "restreamconfig_configuration_text_html"
msgstr ""
-"A restream configuration allows you to forward incoming streamswithout "
-"further processing to external systems.
The restream configuration "
-"needs a previously configured source stream and a target RTMP URL which you "
-"can freely chose. The target RTMP URL should look e.g. like this: "
-"rtmp://servername/app/streamkey
You can of course create "
-"multiple restream configurations with the same source stream. This allows "
-"you to only send one stream from your encoder, but distribute this to "
-"multiple platforms.
Only restream configurations that are marked "
-"active will be executed for an incoming stream!
"
-#: restream/templates/restream/restreamconfig_list.html:11
-msgid "restreamconfig_configuration_header"
-msgstr "Restream configuration"
+#: config/templates/config/pull_form.html:28
+#: config/templates/config/pull_update_form.html:28
+msgid "pull_configuration_text_html"
+msgstr ""
-#: restream/templates/restream/restreamconfig_list.html:16
-#: rtmp/templates/rtmp/stream_list.html:16
+#: config/templates/config/pull_list.html:18
+msgid "pull_configuration_header"
+msgstr ""
+
+#: config/templates/config/pull_list.html:23
+#: config/templates/config/restream_list.html:23
+#: config/templates/config/stream_list.html:22
+#: config/templates/config/transcodingprofile_list.html:25
msgid "create"
-msgstr "Create"
+msgstr ""
-#: restream/templates/restream/restreamconfig_list.html:26
-#: rtmp/templates/rtmp/stream_list.html:26
+#: config/templates/config/pull_list.html:33
+#: config/templates/config/restream_list.html:33
+#: config/templates/config/stream_list.html:32
+#: config/templates/config/transcodingprofile_list.html:36
msgid "loading..."
msgstr ""
-#: restream/templates/restream/restreamconfig_list.html:35
-#: rtmp/templates/rtmp/stream_list.html:35
+#: config/templates/config/pull_list.html:42
+#: config/templates/config/restream_list.html:42
+#: config/templates/config/stream_list.html:41
+#: config/templates/config/transcodingprofile_list.html:44
msgid "actions"
-msgstr "Actions"
+msgstr ""
-#: restream/templates/restream/restreamconfig_list.html:52
-#: rtmp/templates/rtmp/stream_list.html:46
+#: config/templates/config/pull_list.html:59
+#: config/templates/config/restream_list.html:59
+#: config/templates/config/stream_list.html:52
+#: config/templates/config/transcodingprofile_list.html:55
msgid "details"
-msgstr "Details"
+msgstr ""
-#: restream/templates/restream/restreamconfig_update_form.html:5
-msgid "update_restreamconfig_configuration_header"
-msgstr "Update restream configuration"
+#: config/templates/config/pull_update_form.html:12
+msgid "update_pull_configuration_header"
+msgstr ""
-#: rtmp/models.py:13
-msgid "rtmp_application_name"
-msgstr "RTMP application name"
+#: config/templates/config/restream_confirm_delete.html:19
+#, python-format
+msgid "are_you_sure_you_want_to_delete_\"%(restream_config_name)s\"?"
+msgstr ""
+"Are you sure you want to delete \"%(restream_config_name)s\"? This action "
+"cannot be undone."
-#: rtmp/models.py:16
-msgid "application_verbose_name"
-msgstr "RTMP application"
+#: config/templates/config/restream_detail.html:19
+msgid "restream_configuration_details_header"
+msgstr ""
-#: rtmp/models.py:17
-msgid "application_verbose_name_plural"
-msgstr "RTMP applications"
+#: config/templates/config/restream_detail.html:50
+msgid "configured_target_url"
+msgstr ""
+"Configured target URL. This is the URL where the stream will be restreamed "
+"to."
-#: rtmp/models.py:20
-msgid "aplication_class_name"
-msgstr "Application"
+#: config/templates/config/restream_form.html:12
+msgid "create_new_restream_configuration_header"
+msgstr ""
-#: rtmp/models.py:27
-msgid "stream_application_help"
-msgstr "Application which the stream is assigned to"
+#: config/templates/config/restream_form.html:28
+#: config/templates/config/restream_update_form.html:28
+msgid "restream_configuration_text_html"
+msgstr ""
-#: rtmp/models.py:28
-msgid "stream_stream_help"
-msgstr "Stream ID for this stream"
+#: config/templates/config/restream_list.html:18
+msgid "restream_configuration_header"
+msgstr "Restream Configuration"
-#: rtmp/models.py:29
-msgid "stream_name_help"
-msgstr "Name for this stream"
+#: config/templates/config/restream_update_form.html:12
+msgid "update_restream_configuration_header"
+msgstr "Change Restream Configuration"
-#: rtmp/models.py:68
-msgid "stream_class_name"
-msgstr "Stream"
-
-#: rtmp/templates/rtmp/stream_confirm_delete.html:13
+#: config/templates/config/stream_confirm_delete.html:20
msgid "deleting_stream_configuration_will_also_delete_all_depending_confgurations_warning"
msgstr ""
-"Attention! Deleting this stream configuration will also delete all depending "
-"configurations."
+"Deleting this stream configuration will also delete all depending "
+"configurations. This action cannot be undone."
-#: rtmp/templates/rtmp/stream_confirm_delete.html:15
+#: config/templates/config/stream_confirm_delete.html:22
#, python-format
msgid "are_you_sure_you_want_to_delete_\"%(stream_config_name)s\"?"
-msgstr "Are you sure you want to delete \"%(stream_config_name)s\"?"
+msgstr ""
+"Are you sure you want to delete \"%(stream_config_name)s\"? This will also "
+"delete all depending configurations. This action cannot be undone."
-#: rtmp/templates/rtmp/stream_confirm_delete.html:25
+#: config/templates/config/stream_confirm_delete.html:32
msgid "deleting_configurations_list_header"
-msgstr "List of deleted configurations"
+msgstr "Stream Configurations"
-#: rtmp/templates/rtmp/stream_detail.html:12
+#: config/templates/config/stream_detail.html:19
msgid "stream_configuration_details_header"
-msgstr "Stream configuration details"
+msgstr "Stream Configuration Details"
-#: rtmp/templates/rtmp/stream_detail.html:30
-msgid "application"
-msgstr "Application"
-
-#: rtmp/templates/rtmp/stream_detail.html:33
+#: config/templates/config/stream_detail.html:38
msgid "how_to_configure_your_encoder_header"
-msgstr "How to configure your encoder"
+msgstr ""
-#: rtmp/templates/rtmp/stream_detail.html:35
+#: config/templates/config/stream_detail.html:40
msgid "set_this_stream_server_in_encoder"
-msgstr "Set this stream server in your encoder"
+msgstr "Set one of these stream servers in your encoder."
-#: rtmp/templates/rtmp/stream_detail.html:37
+#: config/templates/config/stream_detail.html:49
msgid "set_this_stream_id_in_encoder"
-msgstr "Set this stream ID in your encoder"
+msgstr "Set this stream ID as the key in your encoder."
-#: rtmp/templates/rtmp/stream_detail.html:46
-#: rtmp/templates/rtmp/stream_form.html:21
-#: rtmp/templates/rtmp/stream_update_form.html:21
+#: config/templates/config/stream_detail.html:58
+#: config/templates/config/stream_form.html:28
+#: config/templates/config/stream_update_form.html:28
msgid "stream_configuration_text_html"
msgstr ""
-"A stream configuration allows you to send a stream into the system."
-"p>
Only streams that can be matched to a previously configured stream will "
-"be accepted by the system.
The only purpose of the name is to make "
-"this stream easily identifiable when creating further configurations.The "
-"actual stream ID will be shown to you after creation. Always keep "
-"your stream ID secret.
"
-#: rtmp/templates/rtmp/stream_form.html:5
+#: config/templates/config/stream_form.html:12
msgid "create_new_stream_configuration_header"
-msgstr "Create new stream configuration"
+msgstr "Create new Stream Configuration"
-#: rtmp/templates/rtmp/stream_list.html:11
+#: config/templates/config/stream_list.html:17
msgid "stream_configuration_header"
-msgstr "Stream configuration"
+msgstr "Stream Configuration"
-#: rtmp/templates/rtmp/stream_list.html:34
+#: config/templates/config/stream_list.html:40
msgid "receiving"
-msgstr "Receiving"
+msgstr "Reseiving"
-#: rtmp/templates/rtmp/stream_update_form.html:5
+#: config/templates/config/stream_update_form.html:12
msgid "update_stream_configuration_header"
-msgstr "Change stream configuration"
+msgstr "Edit Stream Configuration"
+
+#: config/templates/config/transcodingprofile_detail.html:18
+#, fuzzy
+#| msgid "stream_configuration_details_header"
+msgid "transcodingprofile_configuration_details_header"
+msgstr "Stream Configuration Details"
+
+#: config/templates/config/transcodingprofile_detail.html:44
+msgid "transcodingprofile_video_map_stream"
+msgstr "Stream"
+
+#: config/templates/config/transcodingprofile_detail.html:46
+msgid "transcodingprofile_video_codec"
+msgstr "Codec"
+
+#: config/templates/config/transcodingprofile_detail.html:48
+msgid "transcodingprofile_video_bitrate"
+msgstr "Bitrate"
+
+#: config/templates/config/transcodingprofile_detail.html:50
+msgid "transcodingprofile_video_bitrate_mode"
+msgstr "Mode"
+
+#: config/templates/config/transcodingprofile_detail.html:52
+msgid "transcodingprofile_video_gop_size"
+msgstr "GOP Size"
+
+#: config/templates/config/transcodingprofile_detail.html:54
+msgid "transcodingprofile_video_pixel_format"
+msgstr "Pixelfmt"
+
+#: config/templates/config/transcodingprofile_detail.html:56
+msgid "transcodingprofile_video_resolution"
+msgstr "Resolution"
+
+#: config/templates/config/transcodingprofile_detail.html:58
+msgid "transcodingprofile_video_frame_rate"
+msgstr "Frame Rate"
+
+#: config/templates/config/transcodingprofile_detail.html:65
+msgid "transcodingprofile_audio_map_stream"
+msgstr "Stream"
+
+#: config/templates/config/transcodingprofile_detail.html:67
+msgid "transcodingprofile_audio_codec"
+msgstr "Codec"
+
+#: config/templates/config/transcodingprofile_detail.html:69
+msgid "transcodingprofile_audio_bitrate"
+msgstr "Bitrate"
+
+#: config/templates/config/transcodingprofile_detail.html:71
+msgid "transcodingprofile_audio_channels"
+msgstr "Channels"
+
+#: config/templates/config/transcodingprofile_detail.html:73
+msgid "transcodingprofile_audio_sample_rate"
+msgstr "Samplerate"
+
+#: config/templates/config/transcodingprofile_list.html:16
+msgid "transcodingprofile_configuration_header"
+msgstr "Transcoding Profile Configuration"
+
+#: config/util.py:8
+#, python-format
+msgid ""
+"Invalid URL: %(value)s. Must start with one of the following: %(protocols)s"
+msgstr ""
+"Invalid URL: %(value)s. Must start with one of the following: %(protocols)s"
+
+#: portier/settings.py:143
+msgid "English"
+msgstr "English"
#: templates/base.html:39
#, python-format
msgid "hello_%(username)s"
-msgstr "Hello, %(username)s!"
+msgstr "Hello, %(username)s"
#: templates/base.html:42
msgid "navbar_account_password_change"
-msgstr "Change password"
+msgstr "Change Password"
#: templates/base.html:43
msgid "navbar_account_logout"
@@ -276,27 +585,31 @@ msgstr "Logout"
msgid "navbar_login"
msgstr "Login"
-#: templates/base.html:80
-msgid "navbar_configuration_pull"
-msgstr "Pull"
-
-#: templates/base.html:83
+#: templates/base.html:81
msgid "navbar_configuration_stream"
msgstr "Stream"
+#: templates/base.html:84
+msgid "navbar_configuration_transcodingprofiles"
+msgstr "Profiles"
+
#: templates/base.html:86
msgid "navbar_configuration_restream"
msgstr "Restream"
#: templates/base.html:89
+msgid "navbar_configuration_pull"
+msgstr "Pull"
+
+#: templates/base.html:92
msgid "navbar_configuration_publish"
msgstr "Publish"
-#: templates/base.html:92
+#: templates/base.html:95
msgid "navbar_configuration_record"
msgstr "Record"
-#: templates/base.html:95
+#: templates/base.html:98
msgid "navbar_configuration_switch"
msgstr "Switch"
@@ -306,32 +619,34 @@ msgstr "Login"
#: templates/registration/login.html:19
msgid "forgot_password_q"
-msgstr "Did you forget your password?"
+msgstr "Forgot Password?"
#: templates/registration/password_change_done.html:5
msgid "password_change_successful"
-msgstr "Password change was successful"
+msgstr "Password change was successful."
#: templates/registration/password_change_done.html:7
msgid "password_change_successful_text"
-msgstr ""
-"The password has succesfully been changed. From now on you can login with "
-"your new password."
+msgstr "The password has been changed. Please login with your new password."
#: templates/registration/password_change_form.html:5
msgid "change_password"
-msgstr "Change password"
+msgstr "Change Password"
#: templates/registration/password_reset_form.html:5
msgid "reset_password"
-msgstr "Password forgotten?"
+msgstr "Reset Password"
#: templates/registration/password_reset_form.html:21
msgid "reset_password_text_html"
-msgstr ""
-"Did you forget your password? No worries. Enter the e-mail address of your "
-"user account here. We will send an e-mail with a link to you, which you can "
-"use to reset the password."
+msgstr "Reset your password by entering your email address."
-#~ msgid "navbar_streaming"
-#~ msgstr "Streaming"
+#, fuzzy, python-format
+#~| msgid "are_you_sure_you_want_to_delete_\"%(restream_config_name)s\"?"
+#~ msgid "are_you_sure_you_want_to_delete_\"%(transcodingprofile_config_name)s\"?"
+#~ msgstr ""
+#~ "Are you sure you want to delete \"%(restream_config_name)s\"? This action "
+#~ "cannot be undone."
+
+#~ msgid "German"
+#~ msgstr "German"
diff --git a/source/portier/api.py b/source/portier/api.py
index 7c27dfc..8faaae5 100644
--- a/source/portier/api.py
+++ b/source/portier/api.py
@@ -33,4 +33,5 @@ api.add_router("/config/recorder/", config_api.recorder.router, auth=django_auth
api.add_router("/config/pull/", config_api.pull.router, auth=django_auth, tags=["Pull Configuration API"])
api.add_router("/config/stream/", config_api.stream.router, auth=django_auth, tags=["Stream Configuration API"])
api.add_router("/config/restream/", config_api.restream.router, auth=django_auth, tags=["Resteam Configuration API"])
+api.add_router("/config/transcodingprofile/", config_api.transcodingprofile.router, auth=django_auth, tags=["Transcoding Profile Configuration API"])
api.add_router("/concierge/", concierge_router, auth=None, tags=["Concierge API"])
diff --git a/source/portier/settings.py b/source/portier/settings.py
index e06ff17..6c4e3d1 100644
--- a/source/portier/settings.py
+++ b/source/portier/settings.py
@@ -139,7 +139,7 @@ USE_I18N = True
USE_TZ = True
LANGUAGES = [
- ('de', _('German')),
+ #('de', _('German')),
('en', _('English')),
]
@@ -191,12 +191,12 @@ CELERY_BEAT_SCHEDULE = {
},
}
# Fixes incompatibility with tzlocal and pytz
-DJANGO_CELERY_BEAT_TZ_AWARE = False
+DJANGO_CELERY_BEAT_TZ_AWARE = False
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
-if DEBUG == "LOLOLOL":
+if DEBUG:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
diff --git a/source/static/js/transcodingprofile-list.js b/source/static/js/transcodingprofile-list.js
new file mode 100644
index 0000000..faa75af
--- /dev/null
+++ b/source/static/js/transcodingprofile-list.js
@@ -0,0 +1,26 @@
+var app = new Vue({
+ el: "#app",
+ data: {
+ cfgs: [],
+ isLoading: true,
+ },
+ methods: {
+ detailLink(id) {
+ return `${id}/`;
+ },
+ deleteLink(id) {
+ return `${id}/delete`;
+ },
+ fetchData() {
+ axios.get("/api/v2/config/transcodingprofile").then((response) => {
+ this.cfgs = response.data;
+ this.isLoading = false;
+ });
+ },
+ },
+ mounted() {
+ axios.defaults.xsrfCookieName = "csrftoken";
+ axios.defaults.xsrfHeaderName = "X-CSRFTOKEN";
+ this.fetchData();
+ },
+});
diff --git a/source/templates/base.html b/source/templates/base.html
index 345269d..c66a7a1 100644
--- a/source/templates/base.html
+++ b/source/templates/base.html
@@ -80,6 +80,8 @@
{% fa5_icon 'dot-circle' %} {% trans "navbar_configuration_stream" %}
+
+ {% fa5_icon 'sliders-h' %} {% trans "navbar_configuration_transcodingprofiles" %}
{% fa5_icon 'expand-arrows-alt' %} {% trans "navbar_configuration_restream" %}