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" %}
+
+
+
+
+ {% csrf_token %} +

+ {% blocktrans with transcodingprofile_config_name=object.name %} + are_you_sure_you_want_to_delete_"{{ transcodingprofile_config_name }}"? + {% endblocktrans %} +

+ {% buttons %} + + {% endbuttons %} + +
+
+
+
+{% 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" %} +
+ {% if "change_transcodingprofile" in obj_perms %} + {% fa5_icon 'edit' %} {% trans 'change' %} + {% endif %} {% if "delete_transcodingprofile" in obj_perms %} + {% fa5_icon 'trash' %} {% trans 'delete' %} + {% endif %} +
+
+
+
+
+
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..." %} +
+
+
+ + + + + + + + + + + + + +
{% trans "name" %}{% trans "actions" %}
{% verbatim %}{{cfg.name}}{% endverbatim %} + {% trans "details" %} + {% fa5_icon 'trash' %} +
+
+ + + + +{% 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" %} +
+ {% csrf_token %} + {% bootstrap_form form %} + {% buttons %} + + {% endbuttons %} + +
+
+
+{% 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

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.

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 @@ +