toposync-ext-streaming 0.2.2__tar.gz → 0.4.0__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.2.2 → toposync_ext_streaming-0.4.0}/PKG-INFO +29 -6
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/README.md +28 -5
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/pyproject.toml +1 -1
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/api/models.py +1 -1
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/api/routes.py +1 -1
- toposync_ext_streaming-0.4.0/src/toposync_ext_streaming/static/703.js +2 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/src/settings/StreamingSettingsPanel.tsx +7 -7
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/src/translations.ts +13 -5
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/src/types.ts +1 -1
- toposync_ext_streaming-0.2.2/src/toposync_ext_streaming/static/703.js +0 -2
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/.gitignore +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/LICENSE +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/LICENSE.ffmpeg +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/LICENSE.mediamtx +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/__init__.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/api/__init__.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/bin/ffmpeg/LICENSE +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/bin/mediamtx/LICENSE +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/extension.json +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/pipelines/__init__.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/pipelines/operators.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/plugin.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/326.js +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/326.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/4.js +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/4.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/623.js +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/623.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/703.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/main.js +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/main.js.LICENSE.txt +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/static/remoteEntry.js +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/__init__.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/arbitration.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/camera_ingest.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/distributed_sync.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/encoder_state.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/engine_manager.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/ffmpeg_binary.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/go2rtc_binary.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/go2rtc_config.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/go2rtc_manager.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/ingest_auth.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/ingest_resolver.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/jsmpeg_manager.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/mediamtx_api_client.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/mediamtx_binary.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/mediamtx_config.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/mediamtx_processes.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/placeholder.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/platform.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/playback_events.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/publisher_manager.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/resize.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/runtime_state.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/streaming/writer_bridge.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/wizard/__init__.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/src/toposync_ext_streaming/wizard/pipeline_builder.py +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/package.json +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/src/activate.tsx +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/src/api/streamingApi.ts +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/src/constants.ts +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/src/entry.ts +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/src/settings/SubModal.tsx +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/src/settings/WizardCreatePipelineFromTransmission.tsx +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/ui/tsconfig.json +0 -0
- {toposync_ext_streaming-0.2.2 → toposync_ext_streaming-0.4.0}/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.0
|
|
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
|
|
@@ -85,7 +85,8 @@ In short:
|
|
|
85
85
|
- URL format: `ws://<toposync-host>/api/streams/media/mse/<path>/ws?media_token=...`
|
|
86
86
|
- go2rtc consumes `rtsp://127.0.0.1:<mediamtx_rtsp_port>/<path>` from MediaMTX.
|
|
87
87
|
- The browser never talks to go2rtc directly. Toposync verifies the signed media token and proxies text control messages plus binary fMP4 fragments.
|
|
88
|
-
- Dashboard Auto can prefer MSE for passive web/grid/fullscreen playback when the sidecar is
|
|
88
|
+
- Dashboard Auto can prefer MSE for passive web/grid/fullscreen playback when the sidecar is enabled/startable and the backing output is browser-compatible.
|
|
89
|
+
- A stopped go2rtc process is normal when no MSE viewer is connected. Toposync returns a signed MSE URL when the sidecar can be started, then starts/updates go2rtc on the first MSE WebSocket session.
|
|
89
90
|
|
|
90
91
|
### JSMpeg
|
|
91
92
|
- URL format: `ws://<toposync-host>/api/streams/media/jsmpeg/<path>/ws?media_token=...`
|
|
@@ -127,6 +128,7 @@ Advanced pipeline publication:
|
|
|
127
128
|
- Renders `runtime/streaming/go2rtc/go2rtc.yaml` from generated streaming outputs.
|
|
128
129
|
- Exposes no direct browser API; the dashboard uses the signed Toposync MSE proxy.
|
|
129
130
|
- Uses internal MediaMTX RTSP URLs only, never direct camera credentials or camera URLs.
|
|
131
|
+
- Does not need to run permanently. URL resolution treats "stopped but startable" as available; the signed MSE proxy starts it when a browser actually connects.
|
|
130
132
|
- `JsmpegSessionManager`
|
|
131
133
|
- Starts FFmpeg only while a signed JSMpeg WebSocket session is connected.
|
|
132
134
|
- Reads frames from `TransmissionRuntimeState`, resizes/contains them to the configured fallback profile, and writes MPEG-TS/MPEG-1 bytes to the browser.
|
|
@@ -839,7 +841,7 @@ Transport policy:
|
|
|
839
841
|
|
|
840
842
|
- HLS is the stable browser/app/Home Assistant ingress baseline.
|
|
841
843
|
- WebRTC/WHEP is generated for `zoom`/PTZ publications and for publications with `transport_policy.enable_webrtc=true`; regular `main`/`sub` streams stay HLS-only by default.
|
|
842
|
-
- MSE is available when MediaMTX is running, the go2rtc sidecar is enabled
|
|
844
|
+
- MSE is available when MediaMTX is running, the go2rtc sidecar is enabled and startable, a backing HLS/RTSP output exists, and the browser codec path is compatible. The go2rtc process may be stopped until the first MSE WebSocket connects. Otherwise it is blocked with a specific reason.
|
|
843
845
|
- JSMpeg is available when FFmpeg is available, the fallback is enabled, a backing HLS output exists, and session limits allow it. The fixed transport debug page does not silently fall back.
|
|
844
846
|
|
|
845
847
|
Transport frame checks can be run with:
|
|
@@ -1006,7 +1008,7 @@ Fix:
|
|
|
1006
1008
|
The primary user-facing message for this class is:
|
|
1007
1009
|
|
|
1008
1010
|
```text
|
|
1009
|
-
|
|
1011
|
+
Nenhum fluxo está alimentando esta transmissão.
|
|
1010
1012
|
```
|
|
1011
1013
|
|
|
1012
1014
|
### HLS plays but WebRTC warning appears
|
|
@@ -1041,6 +1043,24 @@ Debug:
|
|
|
1041
1043
|
- `GET /api/streams/runtime/diagnostics`
|
|
1042
1044
|
- Check MediaMTX and FFmpeg logs paths from that payload.
|
|
1043
1045
|
|
|
1046
|
+
### MSE does not start or does not render
|
|
1047
|
+
Common causes:
|
|
1048
|
+
- go2rtc binary is missing.
|
|
1049
|
+
- MediaMTX is stopped or the backing RTSP path is still warming up.
|
|
1050
|
+
- The browser does not support the returned fMP4 MIME/codecs.
|
|
1051
|
+
- The output is HEVC/H.265 and has not been transcoded to a browser-compatible H.264/AAC path.
|
|
1052
|
+
|
|
1053
|
+
Expected behavior:
|
|
1054
|
+
- `GET /api/streams/mse/status` can show `running=false` with no warning. That means no active MSE viewer is connected.
|
|
1055
|
+
- `GET /api/streams/transmissions/{id}/playback-plan?client=web` can still return MSE available when the sidecar is startable.
|
|
1056
|
+
- Opening `/streams/debug?transport=mse...` should start go2rtc on demand and log: demand priming, backing RTSP wait, go2rtc API wait, MIME, binary fragments, and first frame.
|
|
1057
|
+
|
|
1058
|
+
Debug:
|
|
1059
|
+
- `GET /api/streams/mse/status`
|
|
1060
|
+
- `GET /api/streams/transmissions/{id}/playback-plan?client=web&quality_profile_id=...`
|
|
1061
|
+
- `node scripts/check_stream_transport_frames.mjs --base-url http://127.0.0.1:8100 --live-view-id <id> --context thumbnail --transports mse`
|
|
1062
|
+
- If go2rtc is killed, the next signed MSE WebSocket session should restart it automatically.
|
|
1063
|
+
|
|
1044
1064
|
### FFmpeg not found
|
|
1045
1065
|
Publishers require `ffmpeg`.
|
|
1046
1066
|
|
|
@@ -1062,6 +1082,9 @@ Under the Toposync data dir (`data_dir`), the extension uses:
|
|
|
1062
1082
|
- `runtime/streaming/mediamtx.yml`
|
|
1063
1083
|
- MediaMTX logs:
|
|
1064
1084
|
- `runtime/streaming/logs/mediamtx-YYYYMMDD-HHMMSS.log`
|
|
1085
|
+
- go2rtc MSE config/log:
|
|
1086
|
+
- `runtime/streaming/go2rtc/go2rtc.yaml`
|
|
1087
|
+
- `runtime/streaming/go2rtc/go2rtc.log`
|
|
1065
1088
|
- Per-output publisher logs:
|
|
1066
1089
|
- `runtime/streaming/logs/ffmpeg-<output_key>-YYYYMMDD-HHMMSS.log`
|
|
1067
1090
|
- Publish credential secret (HMAC seed for per-path publish user/pass):
|
|
@@ -1083,7 +1106,7 @@ Then run Toposync as usual (see repo `docs/DEVELOPMENT.md`).
|
|
|
1083
1106
|
|
|
1084
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>/`.
|
|
1085
1108
|
- License notice: [LICENSE.mediamtx](LICENSE.mediamtx)
|
|
1086
|
-
- Public wheels do not ship go2rtc binaries. The MSE sidecar downloads go2rtc `v1.9.14` on demand and caches it under
|
|
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.
|
|
1087
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.
|
|
1088
1111
|
- License placeholder: [LICENSE.ffmpeg](LICENSE.ffmpeg)
|
|
1089
1112
|
|
|
@@ -1094,7 +1117,7 @@ If you plan to ship FFmpeg binaries, pay attention to LGPL/GPL build flags and c
|
|
|
1094
1117
|
- Video-only: audio is not published (`-an` in FFmpeg).
|
|
1095
1118
|
- No built-in TLS for MediaMTX endpoints (LAN-first).
|
|
1096
1119
|
- No Low-Latency HLS by default (to avoid TLS requirements and keep the default simpler).
|
|
1097
|
-
- MSE requires
|
|
1120
|
+
- MSE requires an enabled/startable go2rtc sidecar and browser-compatible codec output. The process may be stopped while idle. HEVC/H.265 paths must be transcoded to H.264/AAC-compatible browser output before MSE can be selected.
|
|
1098
1121
|
- JSMpeg is video-only and intentionally low quality. It is a last-resort visual fallback, not a replacement for HLS/MSE/WebRTC and not an audio path.
|
|
1099
1122
|
- Hardware encoding selection exists in code paths but is not exposed as a stable user-facing setting yet.
|
|
1100
1123
|
- On-demand stops publishers, but does not stop arbitrary manual pipeline execution; pipeline compute is controlled by pipeline configuration and lifecycle semantics.
|
|
@@ -72,7 +72,8 @@ In short:
|
|
|
72
72
|
- URL format: `ws://<toposync-host>/api/streams/media/mse/<path>/ws?media_token=...`
|
|
73
73
|
- go2rtc consumes `rtsp://127.0.0.1:<mediamtx_rtsp_port>/<path>` from MediaMTX.
|
|
74
74
|
- The browser never talks to go2rtc directly. Toposync verifies the signed media token and proxies text control messages plus binary fMP4 fragments.
|
|
75
|
-
- Dashboard Auto can prefer MSE for passive web/grid/fullscreen playback when the sidecar is
|
|
75
|
+
- Dashboard Auto can prefer MSE for passive web/grid/fullscreen playback when the sidecar is enabled/startable and the backing output is browser-compatible.
|
|
76
|
+
- A stopped go2rtc process is normal when no MSE viewer is connected. Toposync returns a signed MSE URL when the sidecar can be started, then starts/updates go2rtc on the first MSE WebSocket session.
|
|
76
77
|
|
|
77
78
|
### JSMpeg
|
|
78
79
|
- URL format: `ws://<toposync-host>/api/streams/media/jsmpeg/<path>/ws?media_token=...`
|
|
@@ -114,6 +115,7 @@ Advanced pipeline publication:
|
|
|
114
115
|
- Renders `runtime/streaming/go2rtc/go2rtc.yaml` from generated streaming outputs.
|
|
115
116
|
- Exposes no direct browser API; the dashboard uses the signed Toposync MSE proxy.
|
|
116
117
|
- Uses internal MediaMTX RTSP URLs only, never direct camera credentials or camera URLs.
|
|
118
|
+
- Does not need to run permanently. URL resolution treats "stopped but startable" as available; the signed MSE proxy starts it when a browser actually connects.
|
|
117
119
|
- `JsmpegSessionManager`
|
|
118
120
|
- Starts FFmpeg only while a signed JSMpeg WebSocket session is connected.
|
|
119
121
|
- Reads frames from `TransmissionRuntimeState`, resizes/contains them to the configured fallback profile, and writes MPEG-TS/MPEG-1 bytes to the browser.
|
|
@@ -826,7 +828,7 @@ Transport policy:
|
|
|
826
828
|
|
|
827
829
|
- HLS is the stable browser/app/Home Assistant ingress baseline.
|
|
828
830
|
- WebRTC/WHEP is generated for `zoom`/PTZ publications and for publications with `transport_policy.enable_webrtc=true`; regular `main`/`sub` streams stay HLS-only by default.
|
|
829
|
-
- MSE is available when MediaMTX is running, the go2rtc sidecar is enabled
|
|
831
|
+
- MSE is available when MediaMTX is running, the go2rtc sidecar is enabled and startable, a backing HLS/RTSP output exists, and the browser codec path is compatible. The go2rtc process may be stopped until the first MSE WebSocket connects. Otherwise it is blocked with a specific reason.
|
|
830
832
|
- JSMpeg is available when FFmpeg is available, the fallback is enabled, a backing HLS output exists, and session limits allow it. The fixed transport debug page does not silently fall back.
|
|
831
833
|
|
|
832
834
|
Transport frame checks can be run with:
|
|
@@ -993,7 +995,7 @@ Fix:
|
|
|
993
995
|
The primary user-facing message for this class is:
|
|
994
996
|
|
|
995
997
|
```text
|
|
996
|
-
|
|
998
|
+
Nenhum fluxo está alimentando esta transmissão.
|
|
997
999
|
```
|
|
998
1000
|
|
|
999
1001
|
### HLS plays but WebRTC warning appears
|
|
@@ -1028,6 +1030,24 @@ Debug:
|
|
|
1028
1030
|
- `GET /api/streams/runtime/diagnostics`
|
|
1029
1031
|
- Check MediaMTX and FFmpeg logs paths from that payload.
|
|
1030
1032
|
|
|
1033
|
+
### MSE does not start or does not render
|
|
1034
|
+
Common causes:
|
|
1035
|
+
- go2rtc binary is missing.
|
|
1036
|
+
- MediaMTX is stopped or the backing RTSP path is still warming up.
|
|
1037
|
+
- The browser does not support the returned fMP4 MIME/codecs.
|
|
1038
|
+
- The output is HEVC/H.265 and has not been transcoded to a browser-compatible H.264/AAC path.
|
|
1039
|
+
|
|
1040
|
+
Expected behavior:
|
|
1041
|
+
- `GET /api/streams/mse/status` can show `running=false` with no warning. That means no active MSE viewer is connected.
|
|
1042
|
+
- `GET /api/streams/transmissions/{id}/playback-plan?client=web` can still return MSE available when the sidecar is startable.
|
|
1043
|
+
- Opening `/streams/debug?transport=mse...` should start go2rtc on demand and log: demand priming, backing RTSP wait, go2rtc API wait, MIME, binary fragments, and first frame.
|
|
1044
|
+
|
|
1045
|
+
Debug:
|
|
1046
|
+
- `GET /api/streams/mse/status`
|
|
1047
|
+
- `GET /api/streams/transmissions/{id}/playback-plan?client=web&quality_profile_id=...`
|
|
1048
|
+
- `node scripts/check_stream_transport_frames.mjs --base-url http://127.0.0.1:8100 --live-view-id <id> --context thumbnail --transports mse`
|
|
1049
|
+
- If go2rtc is killed, the next signed MSE WebSocket session should restart it automatically.
|
|
1050
|
+
|
|
1031
1051
|
### FFmpeg not found
|
|
1032
1052
|
Publishers require `ffmpeg`.
|
|
1033
1053
|
|
|
@@ -1049,6 +1069,9 @@ Under the Toposync data dir (`data_dir`), the extension uses:
|
|
|
1049
1069
|
- `runtime/streaming/mediamtx.yml`
|
|
1050
1070
|
- MediaMTX logs:
|
|
1051
1071
|
- `runtime/streaming/logs/mediamtx-YYYYMMDD-HHMMSS.log`
|
|
1072
|
+
- go2rtc MSE config/log:
|
|
1073
|
+
- `runtime/streaming/go2rtc/go2rtc.yaml`
|
|
1074
|
+
- `runtime/streaming/go2rtc/go2rtc.log`
|
|
1052
1075
|
- Per-output publisher logs:
|
|
1053
1076
|
- `runtime/streaming/logs/ffmpeg-<output_key>-YYYYMMDD-HHMMSS.log`
|
|
1054
1077
|
- Publish credential secret (HMAC seed for per-path publish user/pass):
|
|
@@ -1070,7 +1093,7 @@ Then run Toposync as usual (see repo `docs/DEVELOPMENT.md`).
|
|
|
1070
1093
|
|
|
1071
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>/`.
|
|
1072
1095
|
- License notice: [LICENSE.mediamtx](LICENSE.mediamtx)
|
|
1073
|
-
- Public wheels do not ship go2rtc binaries. The MSE sidecar downloads go2rtc `v1.9.14` on demand and caches it under
|
|
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.
|
|
1074
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.
|
|
1075
1098
|
- License placeholder: [LICENSE.ffmpeg](LICENSE.ffmpeg)
|
|
1076
1099
|
|
|
@@ -1081,7 +1104,7 @@ If you plan to ship FFmpeg binaries, pay attention to LGPL/GPL build flags and c
|
|
|
1081
1104
|
- Video-only: audio is not published (`-an` in FFmpeg).
|
|
1082
1105
|
- No built-in TLS for MediaMTX endpoints (LAN-first).
|
|
1083
1106
|
- No Low-Latency HLS by default (to avoid TLS requirements and keep the default simpler).
|
|
1084
|
-
- MSE requires
|
|
1107
|
+
- MSE requires an enabled/startable go2rtc sidecar and browser-compatible codec output. The process may be stopped while idle. HEVC/H.265 paths must be transcoded to H.264/AAC-compatible browser output before MSE can be selected.
|
|
1085
1108
|
- JSMpeg is video-only and intentionally low quality. It is a last-resort visual fallback, not a replacement for HLS/MSE/WebRTC and not an audio path.
|
|
1086
1109
|
- Hardware encoding selection exists in code paths but is not exposed as a stable user-facing setting yet.
|
|
1087
1110
|
- On-demand stops publishers, but does not stop arbitrary manual pipeline execution; pipeline compute is controlled by pipeline configuration and lifecycle semantics.
|
|
@@ -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"]
|
|
@@ -4814,7 +4814,7 @@ def _build_camera_live_view_for_device(
|
|
|
4814
4814
|
|
|
4815
4815
|
def _variant_id_for_context(live_view: CameraLiveView, context: StreamingCameraLiveContext) -> str:
|
|
4816
4816
|
defaults = live_view.defaults
|
|
4817
|
-
if context
|
|
4817
|
+
if context in {"thumbnail", "spatial_map"}:
|
|
4818
4818
|
return defaults.thumbnail_variant_id
|
|
4819
4819
|
if context == "pip":
|
|
4820
4820
|
return defaults.pip_variant_id
|