Added new endpoints for matching and importing movies, allowing for automated processing of film files from the inbox. Introduced logic to parse file names into titles and years, and integrated metadata matching to streamline the import process. Updated the MediaOptions to include a configuration for automatic movie creation from recognized files. Enhanced the InboxScanner to attempt movie attachment upon asset registration, improving user experience and efficiency. Updated documentation to reflect these new features and their usage.
119 lines
10 KiB
Bash
119 lines
10 KiB
Bash
# TeleWave — пример переменных окружения.
|
||
# Скопируй в .env и заполни значения. Ключи вида Section__Key биндятся в IOptions<T> ASP.NET Core.
|
||
# ВСЕ значения-секреты ниже обязательно заменить перед запуском (особенно *_PASSWORD, *SigningKey).
|
||
|
||
# ── PostgreSQL (внешний сервер, не в compose) ─────────────────────────────
|
||
# База и пользователь создаются заранее на самом сервере БД (см. README — раздел "Развёртывание").
|
||
ConnectionStrings__Default=Host=10.10.1.134;Port=5432;Database=telewave;Username=telewave;Password=change-me-strong-db-password
|
||
|
||
# ── JWT ───────────────────────────────────────────────────────────────────
|
||
Jwt__Issuer=TeleWave
|
||
Jwt__Audience=TeleWave
|
||
Jwt__SigningKey=change-me-min-32-chars-random-secret
|
||
Jwt__AccessTokenMinutes=15
|
||
Jwt__RefreshTokenDays=30
|
||
|
||
# ── Сид администратора (создаётся при первом старте, если не существует) ───
|
||
# Логин в систему — по username. Email в системе не используется.
|
||
AdminSeed__Username=admin
|
||
AdminSeed__Password=change-me-strong-admin-password
|
||
|
||
# ── Rate limiting ────────────────────────────────────────────────────────
|
||
# Лимит запросов/мин на auth-эндпоинты (login/register/refresh). По умолчанию 20.
|
||
# RateLimiting__AuthPermitLimit=20
|
||
|
||
# ── Хранилище медиа ────────────────────────────────────────────────────────
|
||
# RootPath — путь ВНУТРИ контейнера; на хосте это bind-mount тома (см. docs/server-storage-setup.md
|
||
# и volumes в docker-compose.yml). Не меняй RootPath без синхронного изменения тома.
|
||
Storage__RootPath=/media
|
||
Storage__SegmentSeconds=2
|
||
# Сколько сегментов держать в скользящем окне live-плейлиста.
|
||
Storage__LiveWindowSegments=10
|
||
Storage__KeepOriginals=false
|
||
# Порог свободного места, ниже которого загрузка отклоняется (10 ГБ).
|
||
Storage__MinFreeSpaceBytes=10737418240
|
||
# Через сколько часов простоя убирать брошенное в uploads/ (след оборванной заливки или рестарта
|
||
# посреди неё). Идущую загрузку не задевает — отсчёт от времени последней записи. 0 — не убирать.
|
||
# Storage__StaleUploadHours=24
|
||
# TTL stream-токена (cookie tw_stream), минуты. Короткий срок ограничивает окно доступа после
|
||
# блокировки/логаута; фронт перевыпускает cookie, пока идёт просмотр. По умолчанию 30.
|
||
# Storage__StreamTokenMinutes=30
|
||
|
||
# ── Планировщик эфира ──────────────────────────────────────────────────────
|
||
# HorizonDays — на сколько суток вперёд держать материализованное расписание. Неделя — часть замысла:
|
||
# «знать, что мультики будут в субботу в 9:30» работает, только если программа известна заранее.
|
||
# RetentionDays — сколько суток прошедшей ленты хранить. Окно обязано покрывать самое долгое остывание
|
||
# и самый глубокий повтор среди правил канала: история показов берётся из самой ленты, отдельного
|
||
# журнала нет — укоротишь окно, и остывание с потолком повторов начнут «забывать» показы.
|
||
# TickMinutes — период фонового тика, достраивающего горизонт.
|
||
Scheduler__HorizonDays=7
|
||
Scheduler__RetentionDays=90
|
||
Scheduler__TickMinutes=30
|
||
|
||
# ── Обработка медиа (ffmpeg) ───────────────────────────────────────────────
|
||
Media__FfmpegPath=/usr/bin/ffmpeg
|
||
Media__FfprobePath=/usr/bin/ffprobe
|
||
# Максимальный размер загружаемого файла (20 ГБ).
|
||
Media__MaxUploadBytes=21474836480
|
||
# Потоки одного ffmpeg (0 — авто/все ядра).
|
||
Media__TranscodeThreads=3
|
||
# Сколько файлов транскодировать одновременно (1 — по умолчанию, как раньше).
|
||
# Тюнинг под ядра: обычно TranscodeThreads × MaxParallelTranscodes ≈ число ядер.
|
||
# 4 vCPU: Threads=3, Parallel=1 (или Threads=2, Parallel=2)
|
||
# 8 vCPU: Threads=4, Parallel=2 ← лучший throughput на пачках серий
|
||
# (или Threads=6, Parallel=1 — если важнее скорость одного файла)
|
||
# Память: один 1080p-транскод ~0.5 ГБ; Parallel=2 требует ~1 ГБ + база API.
|
||
Media__MaxParallelTranscodes=1
|
||
# Период опроса каталога inbox/ сканером, секунды.
|
||
Media__InboxScanSeconds=15
|
||
# Заводить фильм по файлу из inbox/, когда имя уверенно опознано в источнике метаданных.
|
||
# Неуверенное совпадение остаётся человеку: файл станет ассетом без шоу и попадёт в разбор.
|
||
Media__InboxAutoMovies=true
|
||
# Нормализация громкости при обработке (EBU R128 loudnorm) — все ролики одинаковой громкости.
|
||
Media__NormalizeLoudness=true
|
||
# Целевая громкость, LUFS (−16 типично для стриминга; тише — уменьшить).
|
||
Media__LoudnessTargetLufs=-16
|
||
# Таймауты вызовов ffprobe/ffmpeg, секунды (0 — без таймаута): не дают зависшему процессу вечно
|
||
# держать слот параллелизма/тик планировщика. Поднять TranscodeTimeoutSeconds для очень длинных файлов.
|
||
# Media__ProbeTimeoutSeconds=120
|
||
# Media__TranscodeTimeoutSeconds=1800
|
||
# Предпочитаемые языки аудиодорожек ПО УМОЛЧАНИЮ (через запятую, в порядке приоритета) — если файл
|
||
# многоозвучный и есть дорожка с таким языком, при обработке берётся она. Обычно задаётся в админке
|
||
# («Настройки»); этот конфиг — дефолт, если в настройках пусто. Пусто — выбор ffmpeg по умолчанию.
|
||
# Media__PreferredAudioLanguages=rus,eng
|
||
|
||
# ── ТВ-заставки «Сейчас/Далее» (bumpers) ───────────────────────────────────
|
||
# Общие для всех каналов параметры рендера. Оформление и правила (цвета, подписи, длительность,
|
||
# интервал, только-между-разными) настраиваются на каждом канале в админке.
|
||
# Bumpers__Width=1280
|
||
# Bumpers__Height=720
|
||
# Bumpers__FontFileSans=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf
|
||
# Bumpers__FontFileSerif=/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf
|
||
# Меняй при правке ЛОГИКИ рендера, чтобы пересобрать уже отрендеренные заставки.
|
||
# Bumpers__TemplateVersion=1
|
||
|
||
# ── Метаданные шоу/серий (TMDb / OMDb) ─────────────────────────────────────
|
||
# Ключи бесплатные: TMDb — themoviedb.org (Settings → API), OMDb — omdbapi.com.
|
||
# Без ключа источник просто не показывается в админке (ручной режим работает всегда).
|
||
# TMDb принимает оба вида учётных данных, различать их не нужно — подставляй что есть:
|
||
# «API Key (v3 auth)» — 32 hex-символа, уходит параметром api_key;
|
||
# «API Read Access Token (v4 auth)» — длинный JWT с точками, уходит заголовком Bearer.
|
||
Metadata__Language=ru-RU
|
||
Metadata__Tmdb__ApiKey=
|
||
Metadata__Omdb__ApiKey=
|
||
# Страны возрастной сертификации TMDb в порядке приоритета: берётся первая, у которой рейтинг есть.
|
||
# US впереди намеренно — его шкала (G/PG/PG-13/R/NC-17) совпадает с нашей и переводится точно;
|
||
# RU (0+…18+) приводится приблизительно и нужен ради покрытия там, где US-сертификации нет.
|
||
# Metadata__Tmdb__CertificationCountries__0=US
|
||
# Metadata__Tmdb__CertificationCountries__1=RU
|
||
|
||
# ── ASP.NET Core ──────────────────────────────────────────────────────────
|
||
ASPNETCORE_ENVIRONMENT=Production
|
||
ASPNETCORE_HTTP_PORTS=8080
|
||
|
||
# ── Доверенные прокси (X-Forwarded-For/Proto) ──────────────────────────────
|
||
# TLS терминируется вне compose внешним прокси/шлюзом. По умолчанию доверяется только loopback.
|
||
# Если прокси стоит не на loopback, перечисли его через запятую.
|
||
# ForwardedHeaders__KnownProxies=203.0.113.10
|
||
# ForwardedHeaders__KnownNetworks=172.18.0.0/16
|