agora-python-server-sdk 2.0.2__tar.gz → 2.0.3__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 (37) hide show
  1. {agora_python_server_sdk-2.0.2/agora_python_server_sdk.egg-info → agora_python_server_sdk-2.0.3}/PKG-INFO +1 -1
  2. agora_python_server_sdk-2.0.3/agora/rtc/__init__.py +65 -0
  3. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/_audio_frame_observer.py +12 -10
  4. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/_local_user_observer.py +40 -36
  5. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/_rtc_connection_observer.py +32 -30
  6. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/_video_encoded_frame_observer.py +3 -1
  7. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/_video_frame_observer.py +4 -2
  8. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/agora_base.py +0 -5
  9. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/agora_service.py +12 -11
  10. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/audio_encoded_frame_sender.py +4 -2
  11. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/audio_vad.py +4 -2
  12. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/local_audio_track.py +9 -7
  13. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/local_user.py +40 -40
  14. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/local_video_track.py +6 -4
  15. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/remote_audio_track.py +3 -1
  16. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/remote_video_track.py +8 -6
  17. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/rtc_connection.py +10 -8
  18. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/video_frame_sender.py +3 -1
  19. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3/agora_python_server_sdk.egg-info}/PKG-INFO +1 -1
  20. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/setup.py +12 -15
  21. agora_python_server_sdk-2.0.2/agora/rtc/__init__.py +0 -23
  22. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/MANIFEST.in +0 -0
  23. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/README.md +0 -0
  24. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/agora_parameter.py +0 -0
  25. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/audio_frame_observer.py +0 -0
  26. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/audio_pcm_data_sender.py +0 -0
  27. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/globals.py +0 -0
  28. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/local_user_observer.py +0 -0
  29. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/media_node_factory.py +0 -0
  30. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/rtc_connection_observer.py +0 -0
  31. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/video_encoded_frame_observer.py +0 -0
  32. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora/rtc/video_frame_observer.py +0 -0
  33. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora_python_server_sdk.egg-info/SOURCES.txt +0 -0
  34. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora_python_server_sdk.egg-info/dependency_links.txt +0 -0
  35. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/agora_python_server_sdk.egg-info/top_level.txt +0 -0
  36. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/pyproject.toml +0 -0
  37. {agora_python_server_sdk-2.0.2 → agora_python_server_sdk-2.0.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: agora_python_server_sdk
3
- Version: 2.0.2
3
+ Version: 2.0.3
4
4
  Summary: A Python SDK for Agora Server
5
5
  Home-page: https://github.com/AgoraIO-Extensions/Agora-Python-Server-SDK
6
6
  Classifier: Intended Audience :: Developers
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env python
2
+
3
+ import os
4
+ import sys
5
+ import logging
6
+ logger = logging.getLogger(__name__)
7
+ import ctypes
8
+ from urllib import request
9
+ import site
10
+ import zipfile
11
+ import ssl
12
+ ssl._create_default_https_context = ssl._create_unverified_context
13
+
14
+ def _check_download_and_extract_sdk():
15
+ agora_service_path = os.path.dirname(os.path.abspath(__file__))
16
+ sdk_dir = os.path.join(agora_service_path, "agora_sdk")
17
+ zip_path = os.path.join(agora_service_path, "agora_rtc_sdk.zip")
18
+
19
+ url = "https://download.agora.io/sdk/release/agora_rtc_sdk_linux_v4.4_20240914_1538_336910.zip"
20
+ libagora_rtc_sdk_path = os.path.join(sdk_dir, "libagora_rtc_sdk.so")
21
+ if sys.platform == 'darwin':
22
+ url = "https://download.agora.io/sdk/release/agora_rtc_sdk_mac_v4.4_20240914_1538_336910.zip"
23
+ libagora_rtc_sdk_path = os.path.join(sdk_dir, "libAgoraRtcKit.dylib")
24
+
25
+ if os.path.exists(libagora_rtc_sdk_path):
26
+ return
27
+
28
+ logger.error("agora sdk was broken!!! now download it, please wait for a while...")
29
+ if os.path.exists(sdk_dir):
30
+ os.system(f"rm -rf {sdk_dir}")
31
+ os.makedirs(agora_service_path, exist_ok=True)
32
+ if os.path.exists(zip_path):
33
+ os.remove(zip_path)
34
+
35
+ logger.info(f"agora_service_path: {agora_service_path}")
36
+ logger.info(f"Downloading {url}...")
37
+ request.urlretrieve(url, zip_path)
38
+
39
+ logger.info(f"Extracting {zip_path}...")
40
+ with zipfile.ZipFile(zip_path, 'r') as zip_ref:
41
+ zip_ref.extractall(agora_service_path)
42
+
43
+ if os.path.exists(zip_path):
44
+ os.remove(zip_path)
45
+
46
+
47
+ _check_download_and_extract_sdk()
48
+
49
+ sdk_dir = os.path.dirname(os.path.abspath(__file__))
50
+ lib_path = os.path.join(sdk_dir, 'agora_sdk')
51
+
52
+ try:
53
+ if sys.platform == 'darwin':
54
+ lib_agora_rtc_path =os.path.join(lib_path, 'libAgoraRtcKit.dylib')
55
+ agora_lib = ctypes.CDLL(lib_agora_rtc_path)
56
+
57
+ elif sys.platform == 'linux':
58
+ lib_agora_rtc_path =os.path.join(lib_path, 'libagora_rtc_sdk.so')
59
+ ctypes.CDLL(os.path.join(lib_path, 'libagora-fdkaac.so'))
60
+ ctypes.CDLL(os.path.join(lib_path, 'libaosl.so'))
61
+ agora_lib = ctypes.CDLL(lib_agora_rtc_path)
62
+ except OSError as e:
63
+ logger.error(f"Error loading the library: {e}")
64
+ logger.error(f"Attempted to load from: {lib_agora_rtc_path}")
65
+ sys.exit(1)
@@ -3,6 +3,8 @@ from .agora_base import *
3
3
  from .local_user import *
4
4
  import ctypes
5
5
  from .audio_frame_observer import *
6
+ import logging
7
+ logger = logging.getLogger(__name__)
6
8
 
7
9
 
8
10
  class AudioFrameInner(ctypes.Structure):
@@ -73,31 +75,31 @@ class AudioFrameObserverInner(ctypes.Structure):
73
75
  # self.on_get_ear_monitoring_audio_frame_param = ON_GET_EAR_MONITORING_AUDIO_FRAME_PARAM_CALLBACK(self._on_get_ear_monitoring_audio_frame_param)
74
76
 
75
77
  def _on_record_audio_frame(self, local_user_handle, channel_id, audio_frame_inner):
76
- # print("AudioFrameObserverInner _on_record_audio_frame", local_user_handle, channel_id, audio_frame_inner)
78
+ logger.debug(f"AudioFrameObserverInner _on_record_audio_frame: {local_user_handle}, {channel_id}, {audio_frame_inner}")
77
79
  channel_id_str = channel_id.decode('utf-8')
78
80
  frame = audio_frame_inner.contents._to_audio_frame()
79
81
  ret = self.observer.on_record_audio_frame(self.local_user, channel_id_str, frame)
80
82
  return ret
81
83
 
82
84
  def _on_playback_audio_frame(self, local_user_handle, channel_id, audio_frame_inner):
83
- # print("AudioFrameObserverInner _on_playback_audio_frame", local_user_handle, channel_id, audio_frame_inner)
85
+ logger.debug(f"AudioFrameObserverInner _on_playback_audio_frame: {local_user_handle}, {channel_id}, {audio_frame_inner}")
84
86
  channel_id_str = channel_id.decode('utf-8')
85
87
  frame = audio_frame_inner.contents._to_audio_frame()
86
88
  ret = self.observer.on_playback_audio_frame(self.local_user, channel_id_str, frame)
87
89
  return ret
88
90
 
89
91
  def _on_mixed_audio_frame(self, local_user_handle, channel_id, audio_frame_inner):
90
- # print("AudioFrameObserverInner _on_mixed_audio_frame", local_user_handle, channel_id, audio_frame_inner)
92
+ logger.debug(f"AudioFrameObserverInner _on_mixed_audio_frame: {local_user_handle}, {channel_id}, {audio_frame_inner}")
91
93
  ret = self.observer.on_mixed_audio_frame(self.local_user, audio_frame_inner)
92
94
  return ret
93
95
 
94
96
  def _on_ear_monitoring_audio_frame(self, local_user_handle, audio_frame_inner):
95
- # print("AudioFrameObserverInner _on_ear_monitoring_audio_frame", local_user_handle, audio_frame_inner)
97
+ logger.debug(f"AudioFrameObserverInner _on_ear_monitoring_audio_frame: {local_user_handle}, {audio_frame_inner}")
96
98
  ret = self.observer.on_ear_monitoring_audio_frame(self.local_user, audio_frame_inner)
97
99
  return ret
98
100
 
99
101
  def _on_playback_audio_frame_before_mixing(self, local_user_handle, channel_id, user_id, audio_frame_inner):
100
- # print("AudioFrameObserverInner _on_playback_audio_frame_before_mixing", local_user_handle, channel_id, user_id, audio_frame_inner)
102
+ logger.debug(f"AudioFrameObserverInner _on_playback_audio_frame_before_mixing: {local_user_handle}, {channel_id}, {user_id}, {audio_frame_inner}")
101
103
  if channel_id is None:
102
104
  channel_id_str = ""
103
105
  else:
@@ -109,12 +111,12 @@ class AudioFrameObserverInner(ctypes.Structure):
109
111
  return ret
110
112
 
111
113
  def _on_get_audio_frame_position(self, local_user_handle):
112
- # print("AudioFrameObserverInner _on_get_audio_frame_position", local_user_handle)
114
+ logger.debug(f"AudioFrameObserverInner _on_get_audio_frame_position: {local_user_handle}")
113
115
  return 0
114
116
  return self.observer.on_get_audio_frame_position(self.local_user)
115
117
 
116
118
  def _on_get_playback_audio_frame_param(self, local_user_handle):
117
- # print("AudioFrameObserverInner _on_get_playback_audio_frame_param", local_user_handle)
119
+ logger.debug(f"AudioFrameObserverInner _on_get_playback_audio_frame_param: {local_user_handle}")
118
120
  params = AudioParams()
119
121
  params.sample_rate = 16000 # 示例值
120
122
  params.channels = 1 # 示例值
@@ -124,7 +126,7 @@ class AudioFrameObserverInner(ctypes.Structure):
124
126
  return self.observer.on_get_playback_audio_frame_param(self.local_user)
125
127
 
126
128
  def _on_get_record_audio_frame_param(self, local_user_handle):
127
- # print("AudioFrameObserverInner _on_get_record_audio_frame_param", local_user_handle)
129
+ logger.debug(f"AudioFrameObserverInner _on_get_record_audio_frame_param: {local_user_handle}")
128
130
  params = AudioParams()
129
131
  params.sample_rate = 16000 # 示例值
130
132
  params.channels = 1 # 示例值
@@ -134,7 +136,7 @@ class AudioFrameObserverInner(ctypes.Structure):
134
136
  return self.observer.on_get_record_audio_frame_param(self.local_user)
135
137
 
136
138
  def _on_get_mixed_audio_frame_param(self, local_user_handle):
137
- # print("AudioFrameObserverInner _on_get_mixed_audio_frame_param", local_user_handle)
139
+ logger.debug(f"AudioFrameObserverInner _on_get_mixed_audio_frame_param: {local_user_handle}")
138
140
  params = AudioParams()
139
141
  params.sample_rate = 16000 # 示例值
140
142
  params.channels = 1 # 示例值
@@ -144,7 +146,7 @@ class AudioFrameObserverInner(ctypes.Structure):
144
146
  return self.observer.on_get_mixed_audio_frame_param(self.local_user)
145
147
 
146
148
  def _on_get_ear_monitoring_audio_frame_param(self, local_user_handle):
147
- # print("AudioFrameObserverInner _on_get_ear_monitoring_audio_frame_param", local_user_handle)
149
+ logger.debug(f"AudioFrameObserverInner _on_get_ear_monitoring_audio_frame_param: {local_user_handle}")
148
150
  params = AudioParams()
149
151
  params.sample_rate = 16000 # 示例值
150
152
  params.channels = 1 # 示例值
@@ -3,6 +3,10 @@ from .agora_base import *
3
3
  from .local_user import *
4
4
  from .remote_audio_track import RemoteAudioTrack, RemoteAudioTrackStats
5
5
  from .remote_video_track import RemoteVideoTrack, RemoteVideoTrackStats
6
+ import logging
7
+ logger = logging.getLogger(__name__)
8
+
9
+
6
10
  uid_t = ctypes.c_uint
7
11
  track_id_t = ctypes.c_uint
8
12
 
@@ -208,46 +212,46 @@ class RTCLocalUserObserverInner(ctypes.Structure):
208
212
  Avoid to create a global LocalAudioTrack map table as it can significantly impact performance .
209
213
  """
210
214
  def _on_audio_track_publish_success(self, local_user_handle, local_audio_track_handle):
211
- print("LocalUserCB _on_audio_track_publish_success:", local_user_handle, local_audio_track_handle)
215
+ logger.debug(f"LocalUserCB _on_audio_track_publish_success: {local_user_handle}, {local_audio_track_handle}")
212
216
  #note: to get
213
217
  audio_track = self.local_user.get_audio_map(local_audio_track_handle)
214
218
  self.local_user_observer.on_audio_track_publish_success(self.local_user, audio_track)
215
219
 
216
220
  def _on_video_track_publish_success(self, local_user_handle, local_video_track_handle):
217
- print("LocalUserCB _on_video_track_publish_success:", local_user_handle, local_video_track_handle)
221
+ logger.debug(f"LocalUserCB _on_video_track_publish_success: {local_user_handle}, {local_video_track_handle}")
218
222
  video_track = self.local_user.get_video_map(local_video_track_handle)
219
223
  self.local_user_observer.on_video_track_publish_success(self.local_user, video_track)
220
224
 
221
225
  def _on_video_track_publish_start(self, local_user_handle, local_video_track_handle):
222
- print("LocalUserCB _on_video_track_publish_start:", local_user_handle, local_video_track_handle)
226
+ logger.debug(f"LocalUserCB _on_video_track_publish_start: {local_user_handle}, {local_video_track_handle}")
223
227
  video_track = self.local_user.get_video_map(local_video_track_handle)
224
228
  self.local_user_observer.on_video_track_publish_start(self.local_user, video_track)
225
229
 
226
230
  def _on_audio_track_publish_start(self, local_user_handle, local_audio_track_handle):
227
- print("LocalUserCB _on_audio_track_publish_start:", local_user_handle, local_audio_track_handle)
231
+ logger.debug(f"LocalUserCB _on_audio_track_publish_start: {local_user_handle}, {local_audio_track_handle}")
228
232
  audio_track = self.local_user.get_audio_map(local_audio_track_handle)
229
233
  self.local_user_observer.on_audio_track_publish_start(self.local_user, audio_track)
230
234
 
231
235
  def _on_audio_track_unpublished(self, local_user_handle, local_audio_track_handle):
232
- print("LocalUserCB _on_audio_track_unpublished:", local_user_handle, local_audio_track_handle)
236
+ logger.debug(f"LocalUserCB _on_audio_track_unpublished: {local_user_handle}, {local_audio_track_handle}")
233
237
  audio_track = self.local_user.get_audio_map(local_audio_track_handle)
234
238
  self.local_user._del_audio_map(local_audio_track_handle)
235
239
  self.local_user_observer.on_audio_track_unpublished(self.local_user, audio_track)
236
240
 
237
241
  def _on_audio_track_publication_failure(self, local_user_handle, local_audio_track_handle, error_code):
238
- print("LocalUserCB _on_audio_track_publication_failure:", local_user_handle, local_audio_track_handle, error_code)
242
+ logger.debug(f"LocalUserCB _on_audio_track_publication_failure: {local_user_handle}, {local_audio_track_handle}, {error_code}")
239
243
  audio_track = self.local_user.get_audio_map(local_audio_track_handle)
240
244
  #note :move from map for failed publish
241
245
  self.local_user.del_audio_map(local_audio_track_handle)
242
246
  self.local_user_observer.on_audio_track_publication_failure(self.local_user, audio_track, error_code)
243
247
 
244
248
  def _on_local_audio_track_state_changed(self, local_user_handle, local_audio_track_handle, state, error):
245
- print("LocalUserCB _on_local_audio_track_state_changed:", local_user_handle, local_audio_track_handle, state, error)
249
+ logger.debug(f"LocalUserCB _on_local_audio_track_state_changed: {local_user_handle}, {local_audio_track_handle}, {state}, {error}")
246
250
  audio_track = self.local_user.get_audio_map(local_audio_track_handle)
247
251
  self.local_user_observer.on_local_audio_track_state_changed(self.local_user, audio_track, state, error)
248
252
 
249
253
  def _on_local_audio_track_statistics(self, local_user_handle, stats):
250
- #print("LocalUserCB _on_local_audio_track_statistics:", local_user_handle, stats)
254
+ #logger.debug("LocalUserCB _on_local_audio_track_statistics:", local_user_handle, stats)
251
255
  #stats: pointer to LocalAudioStats
252
256
  local_audio_stats = stats.contents
253
257
  self.local_user_observer.on_local_audio_track_statistics(self.local_user, local_audio_stats)
@@ -264,7 +268,7 @@ class RTCLocalUserObserverInner(ctypes.Structure):
264
268
  # user_id & remote_audio_track_handle, so we should construct RemoteAudioTrack with (user_id & remote_audio_track_handle
265
269
  # and save it in local_user, then in app layer, we can get RemoteAudioTrack with userid)
266
270
  def _on_user_audio_track_subscribed(self, local_user_handle, user_id, remote_audio_track_handle):
267
- print("LocalUserCB _on_user_audio_track_subscribed:", local_user_handle, user_id, remote_audio_track_handle)
271
+ logger.debug(f"LocalUserCB _on_user_audio_track_subscribed: {local_user_handle}, {user_id}, {remote_audio_track_handle}")
268
272
  user_id_str = user_id.decode('utf-8') if user_id else ""
269
273
  # note: this is a pointer to agora::rtc::IRemoteAudioTrack
270
274
  remote_audio_track = RemoteAudioTrack(remote_audio_track_handle, user_id_str)
@@ -273,65 +277,65 @@ class RTCLocalUserObserverInner(ctypes.Structure):
273
277
  self.local_user_observer.on_user_audio_track_subscribed(self.local_user, user_id_str, remote_audio_track)
274
278
 
275
279
  def _on_remote_audio_track_statistics(self, local_user_handle, remote_audio_track_handle, stats):
276
- # print("LocalUserCB _on_remote_audio_track_statistics:", local_user_handle, remote_audio_track_handle, stats)
280
+ logger.debug(f"LocalUserCB _on_remote_audio_track_statistics: {local_user_handle}, {remote_audio_track_handle}, {stats}")
277
281
  audio_stats = stats.contents #RemoteAudioTrackStats
278
282
  remote_audio_track = self.local_user.get_remote_audio_map(remote_audio_track_handle)
279
283
  self.local_user_observer.on_remote_audio_track_statistics(self.local_user, remote_audio_track, audio_stats)
280
284
 
281
285
 
282
286
  def _on_user_audio_track_state_changed(self, local_user_handle, user_id, remote_audio_track_handle, state, reason, elapsed):
283
- print("LocalUserCB _on_user_audio_track_state_changed:", local_user_handle, user_id, remote_audio_track_handle, state, reason, elapsed)
287
+ logger.debug(f"LocalUserCB _on_user_audio_track_state_changed: {local_user_handle}, {user_id}, {remote_audio_track_handle}, {state}, {reason}, {elapsed}")
284
288
  user_id_str = user_id.decode('utf-8') if user_id else ""
285
289
  remote_audio_track = self.local_user.get_remote_audio_map(remote_audio_track_handle)
286
290
  self.local_user_observer.on_user_audio_track_state_changed(self.local_user, user_id_str, remote_audio_track, state, reason, elapsed)
287
291
 
288
292
  def _on_audio_subscribe_state_changed(self, local_user_handle, channel_id, user_id, state, reason, elapsed):
289
- print("LocalUserCB _on_audio_subscribe_state_changed:", local_user_handle, channel_id, user_id, state, reason, elapsed)
293
+ logger.debug(f"LocalUserCB _on_audio_subscribe_state_changed: {local_user_handle}, {channel_id}, {user_id}, {state}, {reason}, {elapsed}")
290
294
  user_id_str = user_id.decode('utf-8') if user_id else ""
291
295
  channel_id_str = channel_id.decode('utf-8') if channel_id else ""
292
296
  self.local_user_observer.on_audio_subscribe_state_changed(self.local_user, channel_id_str, user_id_str, state, reason, elapsed)
293
297
 
294
298
  def _on_audio_publish_state_changed(self, local_user_handle, channel_id, state, reason, elapsed):
295
- #print("LocalUserCB _on_audio_publish_state_changed:", local_user_handle, channel_id, state, reason, elapsed)
299
+ logger.debug(f"LocalUserCB _on_audio_publish_state_changed: {local_user_handle}, {channel_id}, {state}, {reason}, {elapsed}")
296
300
  channel_id_str = channel_id.decode('utf-8') if channel_id else ""
297
301
  self.local_user_observer.on_audio_publish_state_changed(self.local_user, channel_id_str, state, reason, elapsed)
298
302
 
299
303
  def _on_first_remote_audio_frame(self, local_user_handle, user_id, elapsed):
300
- print("LocalUserCB _on_first_remote_audio_frame:", local_user_handle, user_id, elapsed)
304
+ logger.debug(f"LocalUserCB _on_first_remote_audio_frame: {local_user_handle}, {user_id}, {elapsed}")
301
305
  user_id_str = user_id.decode('utf-8') if user_id else ""
302
306
  self.local_user_observer.on_first_remote_audio_frame(self.local_user, user_id_str, elapsed)
303
307
 
304
308
  def _on_first_remote_audio_decoded(self, local_user_handle, user_id, elapsed):
305
- print("LocalUserCB _on_first_remote_audio_decoded:", local_user_handle, user_id, elapsed)
309
+ logger.debug(f"LocalUserCB _on_first_remote_audio_decoded: {local_user_handle}, {user_id}, {elapsed}")
306
310
  user_id_str = user_id.decode('utf-8') if user_id else ""
307
311
  self.local_user_observer.on_first_remote_audio_decoded(self.local_user, user_id_str, elapsed)
308
312
 
309
313
  def _on_video_track_unpublished(self, local_user_handle, local_video_track_handle):
310
- print("LocalUserCB _on_video_track_unpublished:", local_user_handle, local_video_track_handle)
314
+ logger.debug(f"LocalUserCB _on_video_track_unpublished: {local_user_handle}, {local_video_track_handle}")
311
315
  local_video_track = self.local_user.get_video_map(local_video_track_handle)
312
316
  #and then remove it from the local user
313
317
  self.local_user.del_video_map(local_video_track_handle)
314
318
  self.local_user_observer.on_video_track_unpublished(self.local_user, local_video_track)
315
319
 
316
320
  def _on_video_track_publication_failure(self, local_user_handle, local_video_track_handle, error_code):
317
- print("LocalUserCB _on_video_track_publication_failure:", local_user_handle, local_video_track_handle, error_code)
321
+ logger.debug(f"LocalUserCB _on_video_track_publication_failure: {local_user_handle}, {local_video_track_handle}, {error_code}")
318
322
  local_video_track = self.local_user.get_video_map(local_video_track_handle)
319
323
  self.local_user_observer.on_video_track_publication_failure(self.local_user, local_video_track, error_code)
320
324
 
321
325
  def _on_local_video_track_state_changed(self, local_user_handle, local_video_track_handle, state, error):
322
- print("LocalUserCB _on_local_video_track_state_changed:", local_user_handle, local_video_track_handle, state, error)
326
+ logger.debug(f"LocalUserCB _on_local_video_track_state_changed: {local_user_handle}, {local_video_track_handle}, {state}, {error}")
323
327
  local_video_track = self.local_user.get_video_map(local_video_track_handle)
324
328
  self.local_user_observer.on_local_video_track_state_changed(self.local_user, local_video_track, state, error)
325
329
 
326
330
  def _on_local_video_track_statistics(self, local_user_handle, local_video_track_handle, stats):
327
- print("LocalUserCB _on_local_video_track_statistics:", local_user_handle, local_video_track_handle, stats)
331
+ logger.debug(f"LocalUserCB _on_local_video_track_statistics: {local_user_handle}, {local_video_track_handle}, {stats}")
328
332
  #stats: ctypes.pointer to LocalVideoTrackStats
329
333
  local_video_track = self.local_user.get_video_map(local_video_track_handle)
330
334
  video_stats = stats.contents
331
335
  self.local_user_observer.on_local_video_track_statistics(self.local_user, local_video_track, video_stats)
332
336
  # # #ctypes.CFUNCTYPE(None, AGORA_HANDLE, user_id_t, ctypes.POINTER(VideoTrackInfo), AGORA_HANDLE)
333
337
  def _on_user_video_track_subscribed(self, local_user_handle, user_id, video_track_info, remote_video_track_handle):
334
- print("LocalUserCB _on_user_video_track_subscribed:", local_user_handle, user_id, remote_video_track_handle, video_track_info)
338
+ logger.debug(f"LocalUserCB _on_user_video_track_subscribed: {local_user_handle}, {user_id}, {remote_video_track_handle}, {video_track_info}")
335
339
  user_id_str = user_id.decode('utf-8') if user_id else ""
336
340
  # track_info = video_track_info.contents._to_track_info()
337
341
  track_info = video_track_info.contents #videoTrackInfo
@@ -343,79 +347,79 @@ class RTCLocalUserObserverInner(ctypes.Structure):
343
347
  self.local_user_observer.on_user_video_track_subscribed(self.local_user, user_id_str, track_info, remote_video_track)
344
348
 
345
349
  def _on_user_video_track_state_changed(self, local_user_handle, user_id, remote_video_track_handle, state, reason, elapsed):
346
- print("LocalUserCB _on_user_video_track_state_changed:", local_user_handle, user_id, remote_video_track_handle, state, reason, elapsed)
350
+ logger.debug(f"LocalUserCB _on_user_video_track_state_changed: {local_user_handle}, {user_id}, {remote_video_track_handle}, {state}, {reason}, {elapsed}")
347
351
  user_id_str = user_id.decode('utf-8') if user_id else ""
348
352
  video_track = self.local_user.get_remote_video_map(remote_video_track_handle)
349
353
  self.local_user_observer.on_user_video_track_state_changed(self.local_user, user_id_str, video_track, state, reason, elapsed)
350
354
 
351
355
  def _on_remote_video_track_statistics(self, local_user_handle, remote_video_track_handle, stats_ptr):
352
- print("LocalUserCB _on_remote_video_track_statistics:", local_user_handle, remote_video_track_handle, stats_ptr)
356
+ logger.debug(f"LocalUserCB _on_remote_video_track_statistics: {local_user_handle}, {remote_video_track_handle}, {stats_ptr}")
353
357
  remote_stats = stats_ptr.contents #RemoteVideoTrackStats
354
358
  video_track = self.local_user.get_remote_video_map(remote_video_track_handle)
355
359
  self.local_user_observer.on_remote_video_track_statistics(self.local_user, video_track, remote_stats)
356
360
 
357
361
  def _on_audio_volume_indication(self, local_user_handle, audio_volume_info_ptr, speaker_number, total_volume):
358
- print("LocalUserCB _on_audio_volume_indication:", local_user_handle, audio_volume_info_ptr, speaker_number, total_volume)
362
+ logger.debug(f"LocalUserCB _on_audio_volume_indication: {local_user_handle}, {audio_volume_info_ptr}, {speaker_number}, {total_volume}")
359
363
  audio_volume_info = audio_volume_info_ptr.contents
360
364
  self.local_user_observer.on_audio_volume_indication(self.local_user, audio_volume_info, speaker_number, total_volume)
361
365
 
362
366
  def _on_active_speaker(self, local_user_handle, user_id):
363
- print("LocalUserCB _on_active_speaker:", local_user_handle, user_id)
367
+ logger.debug(f"LocalUserCB _on_active_speaker: {local_user_handle}, {user_id}")
364
368
  user_id_str = user_id.decode('utf-8')
365
369
  self.local_user_observer.on_active_speaker(self.local_user, user_id_str)
366
370
 
367
371
  def _on_remote_video_stream_info_updated(self, local_user_handle, remote_video_stream_info_ptr):
368
- print("LocalUserCB _on_remote_video_stream_info_updated:", local_user_handle, remote_video_stream_info_ptr)
372
+ logger.debug(f"LocalUserCB _on_remote_video_stream_info_updated: {local_user_handle}, {remote_video_stream_info_ptr}")
369
373
  video_stream_info = remote_video_stream_info_ptr.contents
370
374
  self.local_user_observer.on_remote_video_stream_info_updated(self.local_user, video_stream_info)
371
375
 
372
376
  def _on_video_subscribe_state_changed(self, local_user_handle, channel_id, user_id, state, reason, elapsed):
373
- print("LocalUserCB _on_video_subscribe_state_changed:", local_user_handle, channel_id, user_id, state, reason, elapsed)
377
+ logger.debug(f"LocalUserCB _on_video_subscribe_state_changed: {local_user_handle}, {channel_id}, {user_id}, {state}, {reason}, {elapsed}")
374
378
  user_id_str = user_id.decode('utf-8')
375
379
  channel_id_str = channel_id.decode('utf-8')
376
380
  self.local_user_observer.on_video_subscribe_state_changed(self.local_user, channel_id_str, user_id_str, state, reason, elapsed)
377
381
 
378
382
  def _on_video_publish_state_changed(self, local_user_handle, channel_id, state, reason, elapsed):
379
- print("LocalUserCB _on_video_publish_state_changed:", local_user_handle, channel_id, state, reason, elapsed)
383
+ logger.debug(f"LocalUserCB _on_video_publish_state_changed: {local_user_handle}, {channel_id}, {state}, {reason}, {elapsed}")
380
384
  channel_id_str = channel_id.decode('utf-8')
381
385
  self.local_user_observer.on_video_publish_state_changed(self.local_user, channel_id_str, state, reason, elapsed)
382
386
 
383
387
  def _on_first_remote_video_frame(self, local_user_handle, user_id, width, height, elapsed):
384
- print("LocalUserCB _on_first_remote_video_frame:", local_user_handle, user_id, width, height, elapsed)
388
+ logger.debug(f"LocalUserCB _on_first_remote_video_frame: {local_user_handle}, {user_id}, {width}, {height}, {elapsed}")
385
389
  user_id_str = user_id.decode('utf-8') if user_id else ""
386
390
  self.local_user_observer.on_first_remote_video_frame(self.local_user, user_id_str, width, height, elapsed)
387
391
 
388
392
  def _on_first_remote_video_decoded(self, local_user_handle, user_id, width, height, elapsed):
389
- print("LocalUserCB _on_first_remote_video_decoded:", local_user_handle, user_id, width, height, elapsed)
393
+ logger.debug(f"LocalUserCB _on_first_remote_video_decoded: {local_user_handle}, {user_id}, {width}, {height}, {elapsed}")
390
394
  user_id_str = user_id.decode('utf-8') if user_id else ""
391
395
  self.local_user_observer.on_first_remote_video_decoded(self.local_user, user_id_str, width, height, elapsed)
392
396
 
393
397
  def _on_first_remote_video_frame_rendered(self, local_user_handle, user_id, width, height, elapsed):
394
- print("LocalUserCB _on_first_remote_video_frame_rendered:", local_user_handle, user_id, width, height, elapsed)
398
+ logger.debug(f"LocalUserCB _on_first_remote_video_frame_rendered: {local_user_handle}, {user_id}, {width}, {height}, {elapsed}")
395
399
  user_id_str = user_id.decode('utf-8') if user_id else ""
396
400
  self.local_user_observer.on_first_remote_video_frame_rendered(self.local_user, user_id_str, width, height, elapsed)
397
401
 
398
402
  def _on_video_size_changed(self, local_user_handle, user_id, width, height, elapsed):
399
- print("LocalUserCB _on_video_size_changed:", local_user_handle, user_id, width, height, elapsed)
403
+ logger.debug(f"LocalUserCB _on_video_size_changed: {local_user_handle}, {user_id}, {width}, {height}, {elapsed}")
400
404
  user_id_str = user_id.decode('utf-8') if user_id else ""
401
405
  self.local_user_observer.on_video_size_changed(self.local_user, user_id_str, width, height, elapsed)
402
406
 
403
407
  def _on_user_info_updated(self, local_user_handle, user_id, msg, val):
404
- print("LocalUserCB _on_user_info_updated:", local_user_handle, user_id, msg, val)
408
+ logger.debug(f"LocalUserCB _on_user_info_updated: {local_user_handle}, {user_id}, {msg}, {val}")
405
409
  user_id_str = user_id.decode('utf-8') if user_id else ""
406
410
  self.local_user_observer.on_user_info_updated(self.local_user, user_id_str, msg, val)
407
411
 
408
412
  def _on_intra_request_received(self, local_user_handle):
409
- # print("LocalUserCB _on_intra_request_received:", local_user_handle)
413
+ logger.debug(f"LocalUserCB _on_intra_request_received: {local_user_handle}")
410
414
  self.local_user_observer.on_intra_request_received(self.local_user)
411
415
 
412
416
  def _on_remote_subscribe_fallback_to_audio_only(self, local_user_handle, user_id, is_fallback):
413
- print("LocalUserCB _on_remote_subscribe_fallback_to_audio_only:", local_user_handle, user_id, is_fallback)
417
+ logger.debug(f"LocalUserCB _on_remote_subscribe_fallback_to_audio_only: {local_user_handle}, {user_id}, {is_fallback}")
414
418
  user_id_str = user_id.decode('utf-8') if user_id else ""
415
419
  self.local_user_observer.on_remote_subscribe_fallback_to_audio_only(self.local_user, user_id_str, is_fallback)
416
420
 
417
421
  def _on_stream_message(self, local_user_handle, user_id, stream_id, data, size):
418
- # print("LocalUserCB _on_stream_message:", local_user_handle, user_id, stream_id, data, size)
422
+ logger.debug(f"LocalUserCB _on_stream_message: {local_user_handle}, {user_id}, {stream_id}, {data}, {size}")
419
423
  user_id_str = user_id.decode('utf-8') if user_id else ""
420
424
  bytes_from_c = ctypes.string_at(data, size)
421
425
  data_byte_array = bytearray(bytes_from_c).decode()
@@ -423,7 +427,7 @@ class RTCLocalUserObserverInner(ctypes.Structure):
423
427
  self.local_user_observer.on_stream_message(self.local_user, user_id_str, stream_id, data_byte_array, size)
424
428
 
425
429
  def _on_user_state_changed(self, local_user_handle, user_id, state):
426
- print("LocalUserCB _on_user_state_changed:", local_user_handle, user_id, state)
430
+ logger.debug(f"LocalUserCB _on_user_state_changed: {local_user_handle}, {user_id}, {state}")
427
431
  user_id_str = user_id.decode('utf-8') if user_id else ""
428
432
  self.local_user_observer.on_user_state_changed(self.local_user, user_id_str, state)
429
433