66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
from pydantic_settings import BaseSettings
|
|
from pathlib import Path
|
|
from typing import Literal
|
|
|
|
|
|
APP_DIR = Path(__file__).resolve().parent
|
|
DEFAULT_DATA_DIR = APP_DIR / "data"
|
|
DEFAULT_DATA_DIR.mkdir(parents=True, exist_ok=True)
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
database_url: str = f"sqlite+aiosqlite:///{(DEFAULT_DATA_DIR / 'streamcore.db').as_posix()}"
|
|
admin_password: str = "admin123"
|
|
|
|
media_origin_host: str = "127.0.0.1"
|
|
media_origin_rtmp_port: int = 1935
|
|
media_origin_api_port: int = 9997
|
|
media_origin_hls_port: int = 8888
|
|
replay_media_dir: str = str(APP_DIR.parent / "media")
|
|
hls_runtime_dir: str = str(APP_DIR.parent / "runtime" / "hls")
|
|
hls_segment_seconds: int = 4
|
|
|
|
edge_nodes: list[dict] = [
|
|
{
|
|
"id": "default",
|
|
"name": "Origin (Default)",
|
|
"host": "127.0.0.1",
|
|
"hls_port": 8888,
|
|
"api_port": 9997,
|
|
"weight": 100,
|
|
"enabled": True,
|
|
"subnet": "0.0.0.0/0",
|
|
"is_origin": True,
|
|
},
|
|
]
|
|
|
|
load_balance_strategy: Literal["round-robin", "weighted", "least-conn", "subnet"] = "subnet"
|
|
|
|
qualities: list[dict] = [
|
|
{"label": "1080p", "width": 1920, "height": 1080, "bitrate": "5000k"},
|
|
{"label": "720p", "width": 1280, "height": 720, "bitrate": "2500k"},
|
|
{"label": "480p", "width": 854, "height": 480, "bitrate": "1000k"},
|
|
{"label": "360p", "width": 640, "height": 360, "bitrate": "600k"},
|
|
]
|
|
|
|
transcode_profiles: dict[str, list[dict]] = {
|
|
"standard": qualities,
|
|
"bandwidth-saver": [
|
|
{"label": "720p", "width": 1280, "height": 720, "bitrate": "1800k"},
|
|
{"label": "480p", "width": 854, "height": 480, "bitrate": "800k"},
|
|
{"label": "360p", "width": 640, "height": 360, "bitrate": "450k"},
|
|
],
|
|
}
|
|
|
|
multicast_enabled: bool = True
|
|
multicast_address_base: str = "239.0.0.1"
|
|
multicast_port_base: int = 5000
|
|
|
|
brand_name: str = "StreamCore"
|
|
brand_tagline: str = "Enterprise Streaming Platform"
|
|
brand_logo_url: str = ""
|
|
|
|
model_config = {"env_prefix": "LS_"}
|
|
|
|
|
|
settings = Settings() |