python-aidot-cameras 0.7.23__tar.gz → 0.7.24__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.
- {python_aidot_cameras-0.7.23/src/python_aidot_cameras.egg-info → python_aidot_cameras-0.7.24}/PKG-INFO +1 -1
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/pyproject.toml +1 -1
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/client.py +16 -1
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24/src/python_aidot_cameras.egg-info}/PKG-INFO +1 -1
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_sdes_fast_liveplay.py +16 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/LICENSE +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/MANIFEST.in +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/README.md +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/setup.cfg +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/__init__.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/aes_utils.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/__init__.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/constants.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/controls.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/go2rtc.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/lan_control.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/models.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/playback.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/protocol.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/sdes.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/tutk.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/camera/webrtc.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/client.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/const.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/credentials.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/device_client.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/discover.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/exceptions.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/g711.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/login_const.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/models/__init__.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/models/device_client_model.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/models/device_model.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/models/discover_model.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/py.typed +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/python_aidot_cameras.egg-info/SOURCES.txt +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/python_aidot_cameras.egg-info/dependency_links.txt +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/python_aidot_cameras.egg-info/requires.txt +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/python_aidot_cameras.egg-info/top_level.txt +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_alarm_event.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_backoff.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_go2rtc.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_highport_nomination.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_lan_control.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_live_stream_param.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_motion_poll.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_no_undefined_names.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_post_merge_hardening.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_sdes_idle_release.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_sdes_sprop.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_sdes_talk.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_sdes_watchdog.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_serve_relay.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_speak.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_stream_cap.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_stream_idle.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_talk.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_terminal_ack.py +0 -0
- {python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_token_refresh.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-aidot-cameras
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.24
|
|
4
4
|
Summary: Control AiDot/Leedarson WiFi lights and cameras (WebRTC streaming, two-way audio, PTZ, controls)
|
|
5
5
|
Author-email: cbrightly <chris.brightly@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-aidot-cameras"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.24"
|
|
8
8
|
description = "Control AiDot/Leedarson WiFi lights and cameras (WebRTC streaming, two-way audio, PTZ, controls)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -543,6 +543,14 @@ class CameraMixin(_CameraControlsMixin):
|
|
|
543
543
|
# data-channel-less; it's parked on the SDES/TUTK side anyway.
|
|
544
544
|
_NO_DATACHANNEL_MODELS: frozenset = frozenset({"LK.IPC.A001064"})
|
|
545
545
|
|
|
546
|
+
# A001064's role-reversal handshake (the camera echoes our offer back as its
|
|
547
|
+
# own webrtcReq before doing ICE, and won't stream until it gets our
|
|
548
|
+
# webrtcResp) needs the camera armed BEFORE our webrtcReq. sdes_fast_liveplay
|
|
549
|
+
# sends webrtcReq ~4.5 s earlier, which degrades A001064 media reliability
|
|
550
|
+
# (2/2 -> 1/2 media in a live A/B; the flag was soak-validated only on the
|
|
551
|
+
# A001513 battery cameras). Exclude role-reversal models from the flag.
|
|
552
|
+
_NO_FAST_LIVEPLAY_MODELS: frozenset = frozenset({"LK.IPC.A001064"})
|
|
553
|
+
|
|
546
554
|
@property
|
|
547
555
|
def _offer_should_include_datachannel(self) -> bool:
|
|
548
556
|
model = getattr(getattr(self, "info", None), "model_id", None)
|
|
@@ -2537,7 +2545,14 @@ class CameraMixin(_CameraControlsMixin):
|
|
|
2537
2545
|
|
|
2538
2546
|
Per-camera ``sdes_fast_liveplay`` (set via start_keepalive) wins; else the
|
|
2539
2547
|
``AIDOT_SDES_FAST_LIVEPLAY`` env (truthy = 1/true/yes/on), default off.
|
|
2540
|
-
Only consulted for SDES cameras (the caller gates on is_sdes_camera).
|
|
2548
|
+
Only consulted for SDES cameras (the caller gates on is_sdes_camera).
|
|
2549
|
+
|
|
2550
|
+
Role-reversal models (``_NO_FAST_LIVEPLAY_MODELS``, e.g. A001064) are always
|
|
2551
|
+
excluded - their handshake needs the camera armed before our webrtcReq, so
|
|
2552
|
+
the flag's early webrtcReq degrades their media reliability."""
|
|
2553
|
+
model = getattr(getattr(self, "info", None), "model_id", None)
|
|
2554
|
+
if model in self._NO_FAST_LIVEPLAY_MODELS:
|
|
2555
|
+
return False
|
|
2541
2556
|
opt = getattr(self, "_sdes_fast_liveplay_opt", None)
|
|
2542
2557
|
if opt is not None:
|
|
2543
2558
|
return bool(opt)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-aidot-cameras
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.24
|
|
4
4
|
Summary: Control AiDot/Leedarson WiFi lights and cameras (WebRTC streaming, two-way audio, PTZ, controls)
|
|
5
5
|
Author-email: cbrightly <chris.brightly@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
{python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_sdes_fast_liveplay.py
RENAMED
|
@@ -38,6 +38,22 @@ def test_env_falsey_values(monkeypatch):
|
|
|
38
38
|
assert _cam()._resolve_sdes_fast_liveplay() is False, val
|
|
39
39
|
|
|
40
40
|
|
|
41
|
+
def test_role_reversal_model_always_excluded(monkeypatch):
|
|
42
|
+
# A001064 (role-reversal) must NOT use the flag even when opt/env force it on -
|
|
43
|
+
# the early webrtcReq degrades its media reliability.
|
|
44
|
+
from types import SimpleNamespace
|
|
45
|
+
monkeypatch.setenv("AIDOT_SDES_FAST_LIVEPLAY", "1")
|
|
46
|
+
cam = _cam()
|
|
47
|
+
cam.info = SimpleNamespace(model_id="LK.IPC.A001064")
|
|
48
|
+
cam._sdes_fast_liveplay_opt = True
|
|
49
|
+
assert cam._resolve_sdes_fast_liveplay() is False
|
|
50
|
+
# a non-excluded SDES model still honours the flag
|
|
51
|
+
cam2 = _cam()
|
|
52
|
+
cam2.info = SimpleNamespace(model_id="LK.IPC.A001513")
|
|
53
|
+
cam2._sdes_fast_liveplay_opt = True
|
|
54
|
+
assert cam2._resolve_sdes_fast_liveplay() is True
|
|
55
|
+
|
|
56
|
+
|
|
41
57
|
def test_kwarg_option_wins_over_env(monkeypatch):
|
|
42
58
|
monkeypatch.setenv("AIDOT_SDES_FAST_LIVEPLAY", "1")
|
|
43
59
|
cam = _cam()
|
|
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
|
{python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/models/device_client_model.py
RENAMED
|
File without changes
|
{python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/models/device_model.py
RENAMED
|
File without changes
|
{python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/src/aidot/models/discover_model.py
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
|
{python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_highport_nomination.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_no_undefined_names.py
RENAMED
|
File without changes
|
{python_aidot_cameras-0.7.23 → python_aidot_cameras-0.7.24}/tests/test_post_merge_hardening.py
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
|