python-aidot-cameras 1.0.0b26__tar.gz → 1.0.0b27__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-1.0.0b26/python_aidot_cameras.egg-info → python_aidot_cameras-1.0.0b27}/PKG-INFO +1 -1
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sdes_open.py +12 -2
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/pyproject.toml +1 -1
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27/python_aidot_cameras.egg-info}/PKG-INFO +1 -1
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/python_aidot_cameras.egg-info/SOURCES.txt +1 -0
- python_aidot_cameras-1.0.0b27/tests/test_avio_ctrl_uses_the_session_dseq.py +81 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/LICENSE +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/MANIFEST.in +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/README.md +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/__init__.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/__main__.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_upstream.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/__init__.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/LICENSE +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/__init__.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/clock.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/codecs/__init__.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/codecs/base.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/codecs/g711.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/codecs/g722.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/codecs/h264.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/codecs/opus.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/codecs/vpx.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/contrib/__init__.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/contrib/media.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/contrib/signaling.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/events.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/exceptions.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/jitterbuffer.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/mediastreams.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rate.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcconfiguration.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcdatachannel.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcdtlstransport.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcicetransport.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcpeerconnection.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcrtpparameters.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcrtpreceiver.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcrtpsender.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcrtptransceiver.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcsctptransport.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtcsessiondescription.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtp.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/sdp.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/stats.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/utils.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/ble_gateway.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/__init__.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/client.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/constants.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/controls.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/go2rtc.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/hwaccel.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/lan_control.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/models.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/playback.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/protocol.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sd_events.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sd_listing.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sd_playback.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sdes.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/tutk.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/webrtc.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/webrtc_open.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/client.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/const.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/credentials.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/crypto.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/device_client.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/discover.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/exceptions.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/g711.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/lan_retry.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/py.typed +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/python_aidot_cameras.egg-info/dependency_links.txt +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/python_aidot_cameras.egg-info/entry_points.txt +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/python_aidot_cameras.egg-info/requires.txt +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/python_aidot_cameras.egg-info/top_level.txt +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/setup.cfg +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_aioice_compat.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_alarm_event.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_answer_sdp_video_pt.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_answer_section_selection.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_audio_mux_offline.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_avio_request.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_avio_response_parse.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_avio_response_router.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_backoff.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_battery_detection.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_battery_evidence_corroboration.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_battery_skip_turn.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_bitrate_campaign_arms.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_ble_gateway.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_bridge_state_sentinels.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_busy_backoff.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_canary_log_names_the_camera.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_cloud_count.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_cloud_plan.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_constants_imports_resolve.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_control_verdicts.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_deferred_hardening.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_device_cmd_seq_match.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_device_login_guard.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_device_user_info_cache.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_direct_ts_serve.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dormant_camera_cleanup.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_drain_is_cancellable.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_mux_terminal_write.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_not_ready_burst.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_pinning.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_resolution_ack.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_serve_decode_skip.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_serve_ice_wait.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_serve_open_timeout.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_skip_signaling_wait.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_slow_probe.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_stdout_producer.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_video_presence.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_egress_guard.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_env_seams.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_feature_probe_needs_a_live_session.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_ffmpeg_signal_exit_is_not_a_crash.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_futile_keepalive.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_gate_requires_a_decoded_frame.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_go2rtc.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_go2rtc_cli.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_h264_decode_rate_limit.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_highport_nomination.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_hwaccel_probe.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_ice_config_cache.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_ice_peer_reflexive.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_idle_release_both_loops.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_keepalive_renew.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_key_restart_sdp.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_keyframe_prompter.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_lan_control.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_lan_retry_reaches_the_storming_devices.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_late_repeats_are_dropped.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_light_active_color_mode.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_live_session_carries_talk.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_live_stream_param.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_live_validate_policy.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_live_video_canary.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_local_only_controls.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_logging_caps.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_login_connect_deadline.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_login_reconnect_backoff.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_media_counted_only_when_plaintext.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_media_socket_rcvbuf.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_media_wait_floor.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_motion_poll.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_mqtt_client_id_is_exact.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_mqtt_credential_refetch.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_mqtt_credential_self_heal.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_mqtt_password_not_persisted.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_mqtt_session_reconnect.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_mqtt_thread_not_orphaned.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_nack.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_nack_cannot_add_load_in_a_burst.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_narrow_pc_ice.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_no_key_material_in_logs.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_no_self_referential_go2rtc.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_no_undefined_names.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_offer_keeps_rtcp_feedback.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_offline_keepalive_pause.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_on_frame_is_an_av_frame.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_open_fail_logger.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_open_gate_delay.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_peerid_reuse.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_persistent_mqtt.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_persistent_mqtt_robustness.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_playback_tls.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_post_merge_hardening.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_ptz_probe_reads_what_it_is_told.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_public_signature_matches_impl.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_quality_campaign_in_session.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_recent_recordings.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_remb.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_resent_frames_are_dropped.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_resolution_persists.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_restart_cycle.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_retry_policy.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_scripts_importable.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sctp_init_ack_tsn.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sd_card_presence.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sd_event_decode.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sd_event_probe_payloads.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sd_listing.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sd_playback.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_adaptive.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_avio_dispatch.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_bridge_break_gate.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_echo_wait_timeout.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_fast_liveplay.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_ffmpeg_stderr_log.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_first_media_stall_report.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_idle_release.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_nack_bridge.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_offer_video_order.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_offer_video_pin.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_open_cleanup.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_sctp_abort.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_serve_audio.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_serve_cmd.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_serve_stderr_drain.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_sprop.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_talk.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_teardown_exit_log.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_terminal_ack.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_terminal_ack_latency.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdes_watchdog.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdp_narrowing_properties.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sdp_payload_type_narrowing.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_security_hardening.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_self_peer_is_an_address_not_an_ip.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_serializable_login_info.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_serve_loss_tolerance.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_serve_pt_respects_the_pin.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_serve_relay.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_serve_stderr_keeps_the_reason.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_session_stats.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_shared_house_seam.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_snapshot_cancellation.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_speak.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sprop_capture_gate.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sprop_staleness.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sprop_unstable_public.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_sprop_write_is_reported_truthfully.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_srtp_rx_rekey.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_srtp_tx_key_note.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stall_report_says_what_the_answer_carried.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stall_report_says_whether_the_trigger_was_answered.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stall_report_separates_silence_from_undecryptable.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stall_report_survives_a_caller_giving_up.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stall_reports_reach_the_artifact.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stream_cap.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stream_drain_ownership.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stream_idle.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stream_slot_cap.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_stream_teardown.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_talk.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_talk_reports_a_speaker_that_never_opened.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_tap_to_mux_end_to_end.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_terminal_ack.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_token_file_robustness.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_token_refresh.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_turn_create_permission.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_tutk_path_is_out_of_reach.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_upstream_compat.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_video_profile_log.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_video_pts_dts.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_video_ts_unwrap.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_viewer_check_throttle.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_viewer_presence.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_viewer_present_push_mode.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_wait_or_event.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_wake_gate_camera_evidence.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_wake_readiness_retry.py +0 -0
- {python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_webrtc_answer_race.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-aidot-cameras
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0b27
|
|
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-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sdes_open.py
RENAMED
|
@@ -4208,10 +4208,20 @@ class _SdesOpenMixin:
|
|
|
4208
4208
|
# pattern as the LIVING send above). dcep_sock/dcep_src are the
|
|
4209
4209
|
# socket+addr the SCTP handshake (and LIVING) used.
|
|
4210
4210
|
import struct as _st_pcmd
|
|
4211
|
-
import random as _r_pcmd
|
|
4212
4211
|
|
|
4213
4212
|
def _persistent_sdes_cmd(_cmd, _extra=b''):
|
|
4214
|
-
|
|
4213
|
+
# dSeq, not a random number. The app's
|
|
4214
|
+
# sendCtrl() takes this from a per-client
|
|
4215
|
+
# counter that starts at 100 and increments
|
|
4216
|
+
# on every control command, and we keep the
|
|
4217
|
+
# same counter for livePlayReq already.
|
|
4218
|
+
# Filling the slot randomly was the only
|
|
4219
|
+
# field in the 28-byte header that differed
|
|
4220
|
+
# from the app's. Parity, not a fix: PTZ
|
|
4221
|
+
# (AVIO 0x1001) pans through this very
|
|
4222
|
+
# builder with a random dSeq, so the camera
|
|
4223
|
+
# is not validating it.
|
|
4224
|
+
_seq = self._next_dseq()
|
|
4215
4225
|
_ts = int(_time_br.time() * 1000)
|
|
4216
4226
|
_avio = _st_pcmd.pack('<IIqII4x', _seq, _cmd, _ts,
|
|
4217
4227
|
len(_extra), 0) + _extra
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-aidot-cameras"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.0b27"
|
|
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"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-aidot-cameras
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0b27
|
|
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
|
|
@@ -79,6 +79,7 @@ tests/test_alarm_event.py
|
|
|
79
79
|
tests/test_answer_sdp_video_pt.py
|
|
80
80
|
tests/test_answer_section_selection.py
|
|
81
81
|
tests/test_audio_mux_offline.py
|
|
82
|
+
tests/test_avio_ctrl_uses_the_session_dseq.py
|
|
82
83
|
tests/test_avio_request.py
|
|
83
84
|
tests/test_avio_response_parse.py
|
|
84
85
|
tests/test_avio_response_router.py
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""AVIO control commands carry the session dSeq, as the app's do.
|
|
2
|
+
|
|
3
|
+
Read out of the app (`KVSWebRTCChannel`, decompiled) 2026-08-23. Its control
|
|
4
|
+
header is 28 bytes little-endian and ours agrees on every field but one:
|
|
5
|
+
|
|
6
|
+
offset app ours (before this change)
|
|
7
|
+
0 live-play dSeq random.randint(0, 0x7FFFFFFF)
|
|
8
|
+
4 cmd cmd
|
|
9
|
+
8 timestamp (long, ms) same
|
|
10
|
+
16 payload length len(payload)
|
|
11
|
+
20 0 0
|
|
12
|
+
24 pad pad
|
|
13
|
+
|
|
14
|
+
`sendCtrl(cmd, bytes)` calls `generateLivePlayDSeq()` first: a per-client
|
|
15
|
+
counter that starts at 100 and increments on EVERY control command. The app
|
|
16
|
+
routes 16 of its 17 commands that way and only the heartbeat (0x1424 / 5156)
|
|
17
|
+
without one. We already keep that counter -- `_next_dseq`, commented "app
|
|
18
|
+
parity (Q0(): starts at 100, increments)" -- and used it for `livePlayReq`
|
|
19
|
+
only, filling the control frames with a random number instead.
|
|
20
|
+
|
|
21
|
+
**This is parity, not a fix.** It is explicitly NOT the reason SETSTREAMCTRL is
|
|
22
|
+
ignored: `button.*_ptz_*` is AVIO 0x1001 sent through the identical frame
|
|
23
|
+
builder with the same random dSeq, and it is class A on physical evidence --
|
|
24
|
+
"the camera pans. Mean frame difference across a 5 s pan: 25.2 at speed 4,
|
|
25
|
+
38.6 at speed 200, against a no-command control of 2.6." A camera that pans on
|
|
26
|
+
a random dSeq is not validating it. Closing the gap removes the last known
|
|
27
|
+
framing difference from the app; it is not expected to change any behaviour,
|
|
28
|
+
and the PTZ pan must still work afterwards.
|
|
29
|
+
"""
|
|
30
|
+
import pathlib
|
|
31
|
+
import re
|
|
32
|
+
|
|
33
|
+
_SRC = pathlib.Path(__file__).resolve().parents[1] / "aidot_cameras" / "camera"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _client_cls():
|
|
37
|
+
import aidot_cameras.camera.client as cc
|
|
38
|
+
return next(v for v in vars(cc).values()
|
|
39
|
+
if isinstance(v, type) and "_next_dseq" in v.__dict__)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_the_counter_starts_at_100_and_increments():
|
|
43
|
+
cam = _client_cls().__new__(_client_cls())
|
|
44
|
+
cam._live_dseq = 100
|
|
45
|
+
assert [cam._next_dseq() for _ in range(4)] == [100, 101, 102, 103]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_control_commands_and_live_play_share_one_counter():
|
|
49
|
+
# The app keys its counter on the client id, not on the command, so a
|
|
50
|
+
# control command consumes a number from the same run as livePlayReq.
|
|
51
|
+
cam = _client_cls().__new__(_client_cls())
|
|
52
|
+
cam._live_dseq = 100
|
|
53
|
+
first = cam._next_dseq()
|
|
54
|
+
second = cam._next_dseq()
|
|
55
|
+
assert second == first + 1
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def test_the_avio_control_frame_no_longer_uses_a_random_dseq():
|
|
59
|
+
"""Binds the test to the real send site, which lives in a closure.
|
|
60
|
+
|
|
61
|
+
Without this the unit tests above would still pass with the production
|
|
62
|
+
frame builder untouched -- the same reason the media-counter gate has a
|
|
63
|
+
source guard.
|
|
64
|
+
"""
|
|
65
|
+
src = (_SRC / "sdes_open.py").read_text()
|
|
66
|
+
m = re.search(r"def _persistent_sdes_cmd\(.*?\n(?P<body>(?:.*\n){0,12})", src)
|
|
67
|
+
assert m, "could not find the persistent AVIO command sender"
|
|
68
|
+
body = m.group("body")
|
|
69
|
+
assert "randint" not in body, (
|
|
70
|
+
"the AVIO control frame still fills the dSeq slot with a random number; "
|
|
71
|
+
"the app fills it with the live-play counter")
|
|
72
|
+
assert "_next_dseq" in body, (
|
|
73
|
+
"the AVIO control frame must take its dSeq from the session counter "
|
|
74
|
+
"(_next_dseq), the way livePlayReq already does")
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def test_the_header_layout_is_unchanged():
|
|
78
|
+
# Only the VALUE in the dSeq slot changes. The layout is verified
|
|
79
|
+
# byte-for-byte against the app: 28 bytes, little-endian, dSeq/cmd/ts/len/0.
|
|
80
|
+
src = (_SRC / "sdes_open.py").read_text()
|
|
81
|
+
assert "'<IIqII4x'" in src, "the 28-byte little-endian AVIO header must not change"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/__init__.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/LICENSE
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
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rate.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
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/rtp.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/_vendor/aiortc/sdp.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/ble_gateway.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/__init__.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/client.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/constants.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/controls.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/go2rtc.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/hwaccel.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/lan_control.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/models.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/playback.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/protocol.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sd_events.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sd_listing.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sd_playback.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/sdes.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/tutk.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/webrtc.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/camera/webrtc_open.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/credentials.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/aidot_cameras/device_client.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
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_answer_sdp_video_pt.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_audio_mux_offline.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_avio_response_parse.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_avio_response_router.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_battery_detection.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_battery_skip_turn.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_bitrate_campaign_arms.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_bridge_state_sentinels.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_control_verdicts.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_deferred_hardening.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_device_cmd_seq_match.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_device_login_guard.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_device_user_info_cache.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_direct_ts_serve.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dormant_camera_cleanup.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_drain_is_cancellable.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_not_ready_burst.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_resolution_ack.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_serve_decode_skip.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_serve_ice_wait.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_slow_probe.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_stdout_producer.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_dtls_video_presence.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_futile_keepalive.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_h264_decode_rate_limit.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_highport_nomination.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_ice_config_cache.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_ice_peer_reflexive.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_keepalive_renew.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_key_restart_sdp.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_keyframe_prompter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_live_stream_param.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_live_validate_policy.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_live_video_canary.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_local_only_controls.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_login_connect_deadline.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_media_socket_rcvbuf.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_media_wait_floor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_mqtt_session_reconnect.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_no_undefined_names.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_open_fail_logger.py
RENAMED
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_open_gate_delay.py
RENAMED
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_persistent_mqtt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_post_merge_hardening.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_aidot_cameras-1.0.0b26 → python_aidot_cameras-1.0.0b27}/tests/test_recent_recordings.py
RENAMED
|
File without changes
|