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.
Files changed (66) hide show
  1. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/PKG-INFO +2 -2
  2. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/README.md +1 -1
  3. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/pyproject.toml +1 -1
  4. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/api/models.py +2 -2
  5. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/api/routes.py +3 -8
  6. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/writer_bridge.py +1 -1
  7. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/types.ts +1 -1
  8. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/.gitignore +0 -0
  9. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/LICENSE +0 -0
  10. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/LICENSE.ffmpeg +0 -0
  11. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/LICENSE.mediamtx +0 -0
  12. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/__init__.py +0 -0
  13. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/api/__init__.py +0 -0
  14. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/bin/ffmpeg/LICENSE +0 -0
  15. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/bin/mediamtx/LICENSE +0 -0
  16. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/extension.json +0 -0
  17. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/pipelines/__init__.py +0 -0
  18. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/pipelines/operators.py +0 -0
  19. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/plugin.py +0 -0
  20. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/326.js +0 -0
  21. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/326.js.LICENSE.txt +0 -0
  22. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/4.js +0 -0
  23. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/4.js.LICENSE.txt +0 -0
  24. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/623.js +0 -0
  25. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/623.js.LICENSE.txt +0 -0
  26. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/703.js +0 -0
  27. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/703.js.LICENSE.txt +0 -0
  28. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/main.js +0 -0
  29. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/main.js.LICENSE.txt +0 -0
  30. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/static/remoteEntry.js +0 -0
  31. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/__init__.py +0 -0
  32. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/arbitration.py +0 -0
  33. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/camera_ingest.py +0 -0
  34. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/distributed_sync.py +0 -0
  35. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/encoder_state.py +0 -0
  36. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/engine_manager.py +0 -0
  37. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/ffmpeg_binary.py +0 -0
  38. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/go2rtc_binary.py +0 -0
  39. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/go2rtc_config.py +0 -0
  40. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/go2rtc_manager.py +0 -0
  41. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/ingest_auth.py +0 -0
  42. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/ingest_resolver.py +0 -0
  43. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/jsmpeg_manager.py +0 -0
  44. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/mediamtx_api_client.py +0 -0
  45. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/mediamtx_binary.py +0 -0
  46. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/mediamtx_config.py +0 -0
  47. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/mediamtx_processes.py +0 -0
  48. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/placeholder.py +0 -0
  49. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/platform.py +0 -0
  50. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/playback_events.py +0 -0
  51. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/publisher_manager.py +0 -0
  52. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/resize.py +0 -0
  53. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/streaming/runtime_state.py +0 -0
  54. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/wizard/__init__.py +0 -0
  55. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/src/toposync_ext_streaming/wizard/pipeline_builder.py +0 -0
  56. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/package.json +0 -0
  57. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/activate.tsx +0 -0
  58. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/api/streamingApi.ts +0 -0
  59. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/constants.ts +0 -0
  60. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/entry.ts +0 -0
  61. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/settings/StreamingSettingsPanel.tsx +0 -0
  62. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/settings/SubModal.tsx +0 -0
  63. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/settings/WizardCreatePipelineFromTransmission.tsx +0 -0
  64. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/src/translations.ts +0 -0
  65. {toposync_ext_streaming-0.3.0 → toposync_ext_streaming-0.4.1}/ui/tsconfig.json +0 -0
  66. {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.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 demand and caches it under `~/.toposync/runtime/streaming/go2rtc/<version>/<platform>/`, unless `TOPOSYNC_STREAMING_GO2RTC_PATH` points to an explicit binary.
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 demand and caches it under `~/.toposync/runtime/streaming/go2rtc/<version>/<platform>/`, unless `TOPOSYNC_STREAMING_GO2RTC_PATH` points to an explicit binary.
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
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "toposync-ext-streaming"
3
- version = "0.3.0"
3
+ version = "0.4.1"
4
4
  description = "Toposync first-party extension: streaming settings, API surface, and pipeline sink bootstrap."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -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=300.0)
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
- installed = find_installed_go2rtc_binary(
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 == "thumbnail":
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. Starting MSE will download it (internet required), "
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(300.0, max(1.0, float(ttl_s)))
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";