python-aidot-cameras 0.7.1__tar.gz → 0.7.2__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 (42) hide show
  1. {python_aidot_cameras-0.7.1/src/python_aidot_cameras.egg-info → python_aidot_cameras-0.7.2}/PKG-INFO +1 -1
  2. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/pyproject.toml +1 -1
  3. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/camera/client.py +12 -6
  4. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2/src/python_aidot_cameras.egg-info}/PKG-INFO +1 -1
  5. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/LICENSE +0 -0
  6. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/README.md +0 -0
  7. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/setup.cfg +0 -0
  8. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/__init__.py +0 -0
  9. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/aes_utils.py +0 -0
  10. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/camera/__init__.py +0 -0
  11. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/camera/lan_control.py +0 -0
  12. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/client.py +0 -0
  13. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/const.py +0 -0
  14. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/credentials.py +0 -0
  15. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/device_client.py +0 -0
  16. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/discover.py +0 -0
  17. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/exceptions.py +0 -0
  18. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/g711.py +0 -0
  19. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/login_const.py +0 -0
  20. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/models/__init__.py +0 -0
  21. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/models/device_client_model.py +0 -0
  22. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/models/device_model.py +0 -0
  23. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/aidot/models/discover_model.py +0 -0
  24. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/python_aidot_cameras.egg-info/SOURCES.txt +0 -0
  25. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/python_aidot_cameras.egg-info/dependency_links.txt +0 -0
  26. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/python_aidot_cameras.egg-info/requires.txt +0 -0
  27. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/src/python_aidot_cameras.egg-info/top_level.txt +0 -0
  28. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_alarm_event.py +0 -0
  29. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_highport_nomination.py +0 -0
  30. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_lan_control.py +0 -0
  31. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_motion_poll.py +0 -0
  32. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_no_undefined_names.py +0 -0
  33. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_post_merge_hardening.py +0 -0
  34. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_sdes_idle_release.py +0 -0
  35. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_sdes_sprop.py +0 -0
  36. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_sdes_talk.py +0 -0
  37. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_sdes_watchdog.py +0 -0
  38. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_speak.py +0 -0
  39. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_stream_cap.py +0 -0
  40. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_talk.py +0 -0
  41. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/tests/test_terminal_ack.py +0 -0
  42. {python_aidot_cameras-0.7.1 → python_aidot_cameras-0.7.2}/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.1
3
+ Version: 0.7.2
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.1"
7
+ version = "0.7.2"
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"
@@ -2204,7 +2204,7 @@ def _dtls_av_mux_run(vq, aq, out_fileobj, progress, stop_flag) -> None:
2204
2204
  except Exception:
2205
2205
  pass
2206
2206
 
2207
- def _flush_audio():
2207
+ def _flush_audio(drain=False):
2208
2208
  if not have_audio:
2209
2209
  try:
2210
2210
  while True:
@@ -2247,10 +2247,16 @@ def _dtls_av_mux_run(vq, aq, out_fileobj, progress, stop_flag) -> None:
2247
2247
  while True:
2248
2248
  fr = fifo.read(1024) # AAC wants 1024-sample frames
2249
2249
  if fr is None:
2250
- # 160 PCMA samples 960 resampled @ 48 kHz, but AAC needs 1024.
2251
- # Every ~17 packets (~340 ms) the FIFO falls 64 samples short
2252
- # and would skip an entire 21 ms frame - audible choppiness.
2253
- # Pad the leftover with silence so the frame is complete.
2250
+ # FIFO has < 1024 samples. The audio source is continuous
2251
+ # (measured: 100% timeline coverage, no lost packets), so the
2252
+ # remainder must stay in the FIFO and be completed by the next
2253
+ # decoded packet - NOT padded with silence here. Padding on
2254
+ # every 5 ms flush injected a micro-silence whenever the FIFO was
2255
+ # momentarily short (almost always, given ~40 ms packet spacing) -
2256
+ # that was the choppiness. Only on the final drain do we pad the
2257
+ # last partial frame so the encoder can flush it.
2258
+ if not drain:
2259
+ break
2254
2260
  s = getattr(fifo, "samples", 0)
2255
2261
  if s == 0:
2256
2262
  break
@@ -2288,7 +2294,7 @@ def _dtls_av_mux_run(vq, aq, out_fileobj, progress, stop_flag) -> None:
2288
2294
  _flush_audio()
2289
2295
  _t.sleep(0.005) # 5 ms - processes audio within 5 ms of arrival vs 20 ms
2290
2296
  _flush_video()
2291
- _flush_audio()
2297
+ _flush_audio(drain=True) # final: pad the last partial frame so it flushes
2292
2298
  try:
2293
2299
  if have_audio:
2294
2300
  for opkt in aenc.encode(None): # flush
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-aidot-cameras
3
- Version: 0.7.1
3
+ Version: 0.7.2
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