toposync-ext-streaming 0.3.0__tar.gz → 0.4.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/PKG-INFO +2 -2
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/README.md +1 -1
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/pyproject.toml +1 -1
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/api/models.py +2 -2
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/api/routes.py +3 -8
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/writer_bridge.py +1 -1
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/types.ts +1 -1
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/.gitignore +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/LICENSE +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/LICENSE.ffmpeg +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/LICENSE.mediamtx +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/__init__.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/api/__init__.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/bin/ffmpeg/LICENSE +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/bin/mediamtx/LICENSE +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/extension.json +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/pipelines/__init__.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/pipelines/operators.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/plugin.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/326.js +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/326.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/4.js +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/4.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/623.js +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/623.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/703.js +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/703.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/main.js +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/main.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/remoteEntry.js +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/__init__.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/arbitration.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/camera_ingest.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/distributed_sync.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/encoder_state.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/engine_manager.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/ffmpeg_binary.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/go2rtc_binary.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/go2rtc_config.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/go2rtc_manager.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/ingest_auth.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/ingest_resolver.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/jsmpeg_manager.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/mediamtx_api_client.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/mediamtx_binary.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/mediamtx_config.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/mediamtx_processes.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/placeholder.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/platform.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/playback_events.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/publisher_manager.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/resize.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/runtime_state.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/wizard/__init__.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/wizard/pipeline_builder.py +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/package.json +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/activate.tsx +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/api/streamingApi.ts +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/constants.ts +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/entry.ts +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/settings/StreamingSettingsPanel.tsx +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/settings/SubModal.tsx +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/settings/WizardCreatePipelineFromTransmission.tsx +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/translations.ts +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/tsconfig.json +0 -0
- {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/webpack.config.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: toposync-ext-streaming
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Toposync first-party extension: streaming settings, API surface, and pipeline sink bootstrap.
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -1106,7 +1106,7 @@ Then run Toposync as usual (see repo `docs/DEVELOPMENT.md`).
|
|
|
1106
1106
|
|
|
1107
1107
|
- Public wheels do not ship MediaMTX binaries. The extension downloads the correct release asset on demand and caches it under `runtime/streaming/mediamtx/<version>/<platform>/`.
|
|
1108
1108
|
- License notice: [LICENSE.mediamtx](LICENSE.mediamtx)
|
|
1109
|
-
- Public wheels do not ship go2rtc binaries. The MSE sidecar downloads go2rtc `v1.9.14` on
|
|
1109
|
+
- Public wheels do not ship go2rtc binaries. The MSE sidecar downloads go2rtc `v1.9.14` automatically on first start and caches it under `~/.toposync/runtime/streaming/go2rtc/<version>/<platform>/`, unless `TOPOSYNC_STREAMING_GO2RTC_PATH` points to an explicit binary. The official Docker/Home Assistant images can pre-bundle `/usr/local/bin/go2rtc` and set that environment variable so MSE does not depend on a runtime download.
|
|
1110
1110
|
- FFmpeg integration expects an external binary by default (`PATH` or `TOPOSYNC_STREAMING_FFMPEG_PATH`). Bundling FFmpeg binaries is optional and must be handled carefully for redistribution.
|
|
1111
1111
|
- License placeholder: [LICENSE.ffmpeg](LICENSE.ffmpeg)
|
|
1112
1112
|
|
|
@@ -1093,7 +1093,7 @@ Then run Toposync as usual (see repo `docs/DEVELOPMENT.md`).
|
|
|
1093
1093
|
|
|
1094
1094
|
- Public wheels do not ship MediaMTX binaries. The extension downloads the correct release asset on demand and caches it under `runtime/streaming/mediamtx/<version>/<platform>/`.
|
|
1095
1095
|
- License notice: [LICENSE.mediamtx](LICENSE.mediamtx)
|
|
1096
|
-
- Public wheels do not ship go2rtc binaries. The MSE sidecar downloads go2rtc `v1.9.14` on
|
|
1096
|
+
- Public wheels do not ship go2rtc binaries. The MSE sidecar downloads go2rtc `v1.9.14` automatically on first start and caches it under `~/.toposync/runtime/streaming/go2rtc/<version>/<platform>/`, unless `TOPOSYNC_STREAMING_GO2RTC_PATH` points to an explicit binary. The official Docker/Home Assistant images can pre-bundle `/usr/local/bin/go2rtc` and set that environment variable so MSE does not depend on a runtime download.
|
|
1097
1097
|
- FFmpeg integration expects an external binary by default (`PATH` or `TOPOSYNC_STREAMING_FFMPEG_PATH`). Bundling FFmpeg binaries is optional and must be handled carefully for redistribution.
|
|
1098
1098
|
- License placeholder: [LICENSE.ffmpeg](LICENSE.ffmpeg)
|
|
1099
1099
|
|
|
@@ -20,7 +20,7 @@ StreamingOutputEncoderMode = Literal["inherit", "auto", "cpu"]
|
|
|
20
20
|
StreamingEncoderTrustState = Literal["candidate", "trusted", "quarantined"]
|
|
21
21
|
StreamingMediaAuthMode = Literal["signed_proxy", "open"]
|
|
22
22
|
StreamingMediaAuthType = Literal["none", "signed_url", "basic"]
|
|
23
|
-
StreamingCameraLiveContext = Literal["thumbnail", "pip", "large", "fullscreen", "ptz"]
|
|
23
|
+
StreamingCameraLiveContext = Literal["thumbnail", "pip", "large", "fullscreen", "ptz", "spatial_map"]
|
|
24
24
|
StreamingPublicationOwnerKind = Literal["camera_source", "pipeline_output"]
|
|
25
25
|
StreamingPublicationRole = Literal["main", "sub", "zoom", "custom"]
|
|
26
26
|
StreamingLiveViewOwnerKind = Literal["camera_source", "pipeline_output", "manual"]
|
|
@@ -1377,7 +1377,7 @@ class TransmissionDemandHeartbeatRequest(BaseModel):
|
|
|
1377
1377
|
quality_profile_id: StreamingQualityProfileId | None = None
|
|
1378
1378
|
transport: Literal["hls", "webrtc", "rtsp", "mse", "jsmpeg"] = "hls"
|
|
1379
1379
|
source: Literal["player", "home_assistant_entity"] = "player"
|
|
1380
|
-
ttl_seconds: float | None = Field(default=None, ge=5.0, le=
|
|
1380
|
+
ttl_seconds: float | None = Field(default=None, ge=5.0, le=1800.0)
|
|
1381
1381
|
|
|
1382
1382
|
|
|
1383
1383
|
class TransmissionDemandHeartbeatResponse(BaseModel):
|
|
@@ -571,15 +571,10 @@ def _mse_sidecar_start_blocking_errors(
|
|
|
571
571
|
if settings.engine.enabled and settings.engine.mse_sidecar.enabled:
|
|
572
572
|
try:
|
|
573
573
|
platform = detect_go2rtc_platform()
|
|
574
|
-
|
|
574
|
+
find_installed_go2rtc_binary(
|
|
575
575
|
platform=platform,
|
|
576
576
|
version=settings.engine.mse_sidecar.go2rtc_version,
|
|
577
577
|
)
|
|
578
|
-
if installed is None:
|
|
579
|
-
errors.append(
|
|
580
|
-
"go2rtc binary is not installed. Use /api/streams/mse/download or set "
|
|
581
|
-
"TOPOSYNC_STREAMING_GO2RTC_PATH before using MSE."
|
|
582
|
-
)
|
|
583
578
|
except Exception as exc:
|
|
584
579
|
errors.append(f"go2rtc binary is unavailable: {exc}")
|
|
585
580
|
return _dedupe_messages(errors)
|
|
@@ -4814,7 +4809,7 @@ def _build_camera_live_view_for_device(
|
|
|
4814
4809
|
|
|
4815
4810
|
def _variant_id_for_context(live_view: CameraLiveView, context: StreamingCameraLiveContext) -> str:
|
|
4816
4811
|
defaults = live_view.defaults
|
|
4817
|
-
if context
|
|
4812
|
+
if context in {"thumbnail", "spatial_map"}:
|
|
4818
4813
|
return defaults.thumbnail_variant_id
|
|
4819
4814
|
if context == "pip":
|
|
4820
4815
|
return defaults.pip_variant_id
|
|
@@ -5951,7 +5946,7 @@ def create_streaming_router() -> APIRouter:
|
|
|
5951
5946
|
warnings.append("MSE sidecar needs the MediaMTX streaming engine to be enabled.")
|
|
5952
5947
|
if settings.engine.mse_sidecar.enabled and not status.running and not binary_path:
|
|
5953
5948
|
warnings.append(
|
|
5954
|
-
"go2rtc binary is not installed yet.
|
|
5949
|
+
"go2rtc binary is not installed yet. The next MSE start will download it automatically (internet required), "
|
|
5955
5950
|
"or set TOPOSYNC_STREAMING_GO2RTC_PATH to a local path."
|
|
5956
5951
|
)
|
|
5957
5952
|
return StreamingMseSidecarStatusResponse(
|
|
@@ -238,7 +238,7 @@ class StreamWriterBridge:
|
|
|
238
238
|
selected_profile_id = _as_str(quality_profile_id)
|
|
239
239
|
|
|
240
240
|
now_monotonic = self._monotonic()
|
|
241
|
-
ttl = self._on_demand_prime_ttl_s if ttl_s is None else min(
|
|
241
|
+
ttl = self._on_demand_prime_ttl_s if ttl_s is None else min(1800.0, max(1.0, float(ttl_s)))
|
|
242
242
|
_engine_settings, targets, _path_auth, _bypass, _ingest, _ingest_configs = await self._load_settings(now_monotonic)
|
|
243
243
|
|
|
244
244
|
primed_publishers: set[str] = set()
|
|
@@ -163,7 +163,7 @@ export type TransmissionUrlsResponse = {
|
|
|
163
163
|
media_url_origin?: string | null;
|
|
164
164
|
};
|
|
165
165
|
|
|
166
|
-
export type CameraLiveContext = "thumbnail" | "pip" | "large" | "fullscreen" | "ptz";
|
|
166
|
+
export type CameraLiveContext = "thumbnail" | "pip" | "large" | "fullscreen" | "ptz" | "spatial_map";
|
|
167
167
|
export type StreamingPublicationOwnerKind = "camera_source" | "pipeline_output";
|
|
168
168
|
export type StreamingLiveViewOwnerKind = "camera_source" | "pipeline_output" | "manual";
|
|
169
169
|
export type StreamingPublicationRole = "main" | "sub" | "zoom" | "custom";
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/plugin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/4.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|