agora-python-server-sdk 2.0.0__tar.gz → 2.0.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.

Potentially problematic release.


This version of agora-python-server-sdk might be problematic. Click here for more details.

Files changed (36) hide show
  1. {agora_python_server_sdk-2.0.0/agora_python_server_sdk.egg-info → agora_python_server_sdk-2.0.2}/PKG-INFO +1 -1
  2. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/_audio_frame_observer.py +10 -10
  3. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/_local_user_observer.py +6 -71
  4. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/_video_encoded_frame_observer.py +1 -1
  5. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/_video_frame_observer.py +1 -1
  6. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/remote_audio_track.py +15 -1
  7. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2/agora_python_server_sdk.egg-info}/PKG-INFO +1 -1
  8. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/setup.py +1 -1
  9. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/MANIFEST.in +0 -0
  10. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/README.md +0 -0
  11. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/__init__.py +0 -0
  12. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/_rtc_connection_observer.py +0 -0
  13. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/agora_base.py +0 -0
  14. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/agora_parameter.py +0 -0
  15. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/agora_service.py +0 -0
  16. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/audio_encoded_frame_sender.py +0 -0
  17. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/audio_frame_observer.py +0 -0
  18. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/audio_pcm_data_sender.py +0 -0
  19. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/audio_vad.py +0 -0
  20. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/globals.py +0 -0
  21. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/local_audio_track.py +0 -0
  22. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/local_user.py +0 -0
  23. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/local_user_observer.py +0 -0
  24. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/local_video_track.py +0 -0
  25. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/media_node_factory.py +0 -0
  26. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/remote_video_track.py +0 -0
  27. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/rtc_connection.py +0 -0
  28. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/rtc_connection_observer.py +0 -0
  29. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/video_encoded_frame_observer.py +0 -0
  30. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/video_frame_observer.py +0 -0
  31. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora/rtc/video_frame_sender.py +0 -0
  32. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora_python_server_sdk.egg-info/SOURCES.txt +0 -0
  33. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora_python_server_sdk.egg-info/dependency_links.txt +0 -0
  34. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/agora_python_server_sdk.egg-info/top_level.txt +0 -0
  35. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/pyproject.toml +0 -0
  36. {agora_python_server_sdk-2.0.0 → agora_python_server_sdk-2.0.2}/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.0
3
+ Version: 2.0.2
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
@@ -73,31 +73,31 @@ class AudioFrameObserverInner(ctypes.Structure):
73
73
  # 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
74
 
75
75
  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)
76
+ # print("AudioFrameObserverInner _on_record_audio_frame", local_user_handle, channel_id, audio_frame_inner)
77
77
  channel_id_str = channel_id.decode('utf-8')
78
78
  frame = audio_frame_inner.contents._to_audio_frame()
79
79
  ret = self.observer.on_record_audio_frame(self.local_user, channel_id_str, frame)
80
80
  return ret
81
81
 
82
82
  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)
83
+ # print("AudioFrameObserverInner _on_playback_audio_frame", local_user_handle, channel_id, audio_frame_inner)
84
84
  channel_id_str = channel_id.decode('utf-8')
85
85
  frame = audio_frame_inner.contents._to_audio_frame()
86
86
  ret = self.observer.on_playback_audio_frame(self.local_user, channel_id_str, frame)
87
87
  return ret
88
88
 
89
89
  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)
90
+ # print("AudioFrameObserverInner _on_mixed_audio_frame", local_user_handle, channel_id, audio_frame_inner)
91
91
  ret = self.observer.on_mixed_audio_frame(self.local_user, audio_frame_inner)
92
92
  return ret
93
93
 
94
94
  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)
95
+ # print("AudioFrameObserverInner _on_ear_monitoring_audio_frame", local_user_handle, audio_frame_inner)
96
96
  ret = self.observer.on_ear_monitoring_audio_frame(self.local_user, audio_frame_inner)
97
97
  return ret
98
98
 
99
99
  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)
100
+ # print("AudioFrameObserverInner _on_playback_audio_frame_before_mixing", local_user_handle, channel_id, user_id, audio_frame_inner)
101
101
  if channel_id is None:
102
102
  channel_id_str = ""
103
103
  else:
@@ -109,12 +109,12 @@ class AudioFrameObserverInner(ctypes.Structure):
109
109
  return ret
110
110
 
111
111
  def _on_get_audio_frame_position(self, local_user_handle):
112
- print("AudioFrameObserverInner _on_get_audio_frame_position", local_user_handle)
112
+ # print("AudioFrameObserverInner _on_get_audio_frame_position", local_user_handle)
113
113
  return 0
114
114
  return self.observer.on_get_audio_frame_position(self.local_user)
115
115
 
116
116
  def _on_get_playback_audio_frame_param(self, local_user_handle):
117
- print("AudioFrameObserverInner _on_get_playback_audio_frame_param", local_user_handle)
117
+ # print("AudioFrameObserverInner _on_get_playback_audio_frame_param", local_user_handle)
118
118
  params = AudioParams()
119
119
  params.sample_rate = 16000 # 示例值
120
120
  params.channels = 1 # 示例值
@@ -124,7 +124,7 @@ class AudioFrameObserverInner(ctypes.Structure):
124
124
  return self.observer.on_get_playback_audio_frame_param(self.local_user)
125
125
 
126
126
  def _on_get_record_audio_frame_param(self, local_user_handle):
127
- print("AudioFrameObserverInner _on_get_record_audio_frame_param", local_user_handle)
127
+ # print("AudioFrameObserverInner _on_get_record_audio_frame_param", local_user_handle)
128
128
  params = AudioParams()
129
129
  params.sample_rate = 16000 # 示例值
130
130
  params.channels = 1 # 示例值
@@ -134,7 +134,7 @@ class AudioFrameObserverInner(ctypes.Structure):
134
134
  return self.observer.on_get_record_audio_frame_param(self.local_user)
135
135
 
136
136
  def _on_get_mixed_audio_frame_param(self, local_user_handle):
137
- print("AudioFrameObserverInner _on_get_mixed_audio_frame_param", local_user_handle)
137
+ # print("AudioFrameObserverInner _on_get_mixed_audio_frame_param", local_user_handle)
138
138
  params = AudioParams()
139
139
  params.sample_rate = 16000 # 示例值
140
140
  params.channels = 1 # 示例值
@@ -144,7 +144,7 @@ class AudioFrameObserverInner(ctypes.Structure):
144
144
  return self.observer.on_get_mixed_audio_frame_param(self.local_user)
145
145
 
146
146
  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)
147
+ # print("AudioFrameObserverInner _on_get_ear_monitoring_audio_frame_param", local_user_handle)
148
148
  params = AudioParams()
149
149
  params.sample_rate = 16000 # 示例值
150
150
  params.channels = 1 # 示例值
@@ -1,8 +1,8 @@
1
1
  import ctypes
2
2
  from .agora_base import *
3
3
  from .local_user import *
4
- from .local_user_observer import *
5
- from .remote_video_track import RemoteVideoTrack
4
+ from .remote_audio_track import RemoteAudioTrack, RemoteAudioTrackStats
5
+ from .remote_video_track import RemoteVideoTrack, RemoteVideoTrackStats
6
6
  uid_t = ctypes.c_uint
7
7
  track_id_t = ctypes.c_uint
8
8
 
@@ -10,21 +10,6 @@ track_id_t = ctypes.c_uint
10
10
 
11
11
 
12
12
 
13
- class RemoteAudioTrackStats(ctypes.Structure):
14
- _fields_ = [
15
- ("uid", ctypes.c_uint),
16
- ("quality", ctypes.c_int),
17
- ("network_transport_delay", ctypes.c_int),
18
- ("jitter_buffer_delay", ctypes.c_int),
19
- ("audio_loss_rate", ctypes.c_int),
20
- ("num_channels", ctypes.c_int),
21
- ("received_sample_rate", ctypes.c_int),
22
- ("received_bitrate", ctypes.c_int),
23
- ("total_frozen_time", ctypes.c_int),
24
- ("frozen_rate", ctypes.c_int),
25
- ("received_bytes", ctypes.c_int64)
26
- ]
27
-
28
13
  class VideoTrackInfoInner(ctypes.Structure):
29
14
  _fields_ = [
30
15
  ("is_local", ctypes.c_int),
@@ -51,56 +36,6 @@ class VideoTrackInfoInner(ctypes.Structure):
51
36
  track_info.owner_uid = self.owner_uid
52
37
  return track_info
53
38
 
54
-
55
-
56
- class LocalVideoTrackStats(ctypes.Structure):
57
- _fields_ = [
58
- ("number_of_streams", ctypes.c_uint64),
59
- ("bytes_major_stream", ctypes.c_uint64),
60
- ("bytes_minor_stream", ctypes.c_uint64),
61
- ("frames_encoded", ctypes.c_uint32),
62
- ("ssrc_major_stream", ctypes.c_uint32),
63
- ("ssrc_minor_stream", ctypes.c_uint32),
64
- ("capture_frame_rate", ctypes.c_int),
65
- ("regulated_capture_frame_rate", ctypes.c_int),
66
- ("input_frame_rate", ctypes.c_int),
67
- ("encode_frame_rate", ctypes.c_int),
68
- ("render_frame_rate", ctypes.c_int),
69
- ("target_media_bitrate_bps", ctypes.c_int),
70
- ("media_bitrate_bps", ctypes.c_int),
71
- ("total_bitrate_bps", ctypes.c_int),
72
- ("capture_width", ctypes.c_int),
73
- ("capture_height", ctypes.c_int),
74
- ("regulated_capture_width", ctypes.c_int),
75
- ("regulated_capture_height", ctypes.c_int),
76
- ("width", ctypes.c_int),
77
- ("height", ctypes.c_int),
78
- ("encoder_type", ctypes.c_uint32),
79
- ("uplink_cost_time_ms", ctypes.c_uint32),
80
- ("quality_adapt_indication", ctypes.c_int)
81
- ]
82
- class RemoteVideoTrackStats(ctypes.Structure):
83
- _fields_ = [
84
- ("uid", ctypes.c_uint),
85
- ("delay", ctypes.c_int),
86
- ("width", ctypes.c_int),
87
- ("height", ctypes.c_int),
88
- ("received_bitrate", ctypes.c_int),
89
- ("decoder_output_frame_rate", ctypes.c_int),
90
- ("renderer_output_frame_rate", ctypes.c_int),
91
- ("frame_loss_rate", ctypes.c_int),
92
- ("packet_loss_rate", ctypes.c_int),
93
- ("rx_stream_type", ctypes.c_int),
94
- ("total_frozen_time", ctypes.c_int),
95
- ("frozen_rate", ctypes.c_int),
96
- ("total_decoded_frames", ctypes.c_uint32),
97
- ("av_sync_time_ms", ctypes.c_int),
98
- ("downlink_process_time_ms", ctypes.c_uint32),
99
- ("frame_render_delay_ms", ctypes.c_uint32),
100
- ("totalActiveTime", ctypes.c_uint64),
101
- ("publishDuration", ctypes.c_uint64)
102
- ]
103
-
104
39
  class AudioVolumeInfo(ctypes.Structure):
105
40
  _fields_ = [
106
41
  ("user_id", ctypes.c_uint),
@@ -338,7 +273,7 @@ class RTCLocalUserObserverInner(ctypes.Structure):
338
273
  self.local_user_observer.on_user_audio_track_subscribed(self.local_user, user_id_str, remote_audio_track)
339
274
 
340
275
  def _on_remote_audio_track_statistics(self, local_user_handle, remote_audio_track_handle, stats):
341
- print("LocalUserCB _on_remote_audio_track_statistics:", local_user_handle, remote_audio_track_handle, stats)
276
+ # print("LocalUserCB _on_remote_audio_track_statistics:", local_user_handle, remote_audio_track_handle, stats)
342
277
  audio_stats = stats.contents #RemoteAudioTrackStats
343
278
  remote_audio_track = self.local_user.get_remote_audio_map(remote_audio_track_handle)
344
279
  self.local_user_observer.on_remote_audio_track_statistics(self.local_user, remote_audio_track, audio_stats)
@@ -404,7 +339,7 @@ class RTCLocalUserObserverInner(ctypes.Structure):
404
339
  #note: for video, one user can publish multiple video tracks, so the identifier is the remote_video_track_handle,
405
340
  # its diff to audiotrack
406
341
  self.local_user.set_remote_video_map(remote_video_track_handle, remote_video_track)
407
- track_info = video_track_info.contents.to_track_info()
342
+ track_info = video_track_info.contents._convert_to_video_track_info()
408
343
  self.local_user_observer.on_user_video_track_subscribed(self.local_user, user_id_str, track_info, remote_video_track)
409
344
 
410
345
  def _on_user_video_track_state_changed(self, local_user_handle, user_id, remote_video_track_handle, state, reason, elapsed):
@@ -480,10 +415,10 @@ class RTCLocalUserObserverInner(ctypes.Structure):
480
415
  self.local_user_observer.on_remote_subscribe_fallback_to_audio_only(self.local_user, user_id_str, is_fallback)
481
416
 
482
417
  def _on_stream_message(self, local_user_handle, user_id, stream_id, data, size):
483
- print("LocalUserCB _on_stream_message:", local_user_handle, user_id, stream_id, data, size)
418
+ # print("LocalUserCB _on_stream_message:", local_user_handle, user_id, stream_id, data, size)
484
419
  user_id_str = user_id.decode('utf-8') if user_id else ""
485
420
  bytes_from_c = ctypes.string_at(data, size)
486
- data_byte_array = bytearray(bytes_from_c)
421
+ data_byte_array = bytearray(bytes_from_c).decode()
487
422
  #note: do not use date_byte_array.decode() for the stream msg is binary data, not limited to only text
488
423
  self.local_user_observer.on_stream_message(self.local_user, user_id_str, stream_id, data_byte_array, size)
489
424
 
@@ -53,7 +53,7 @@ class VideoEncodedFrameObserverInner(ctypes.Structure):
53
53
  self.on_encoded_video_frame = ON_ENCODED_VIDEO_FRAME(self._on_encoded_video_frame)
54
54
 
55
55
  def _on_encoded_video_frame(self, agora_video_encoded_frame_observer ,uid, image_buffer, length, video_encoded_frame_info):
56
- print("VideoEncodedFrameObserverInnerCB on_encoded_video_frame")
56
+ # print("VideoEncodedFrameObserverInnerCB on_encoded_video_frame")
57
57
  img_buffer = ctypes.string_at(image_buffer, length)
58
58
  vefi = video_encoded_frame_info.contents._to_encoded_video_frame_info()
59
59
  self.video_encoded_frame_observer.on_encoded_video_frame(agora_video_encoded_frame_observer, uid, img_buffer, length, vefi)
@@ -63,7 +63,7 @@ class VideoFrameObserverInner(ctypes.Structure):
63
63
 
64
64
  def _on_frame(self, agora_handle, channel_id, user_id, video_frame:VideoFrameInner):
65
65
  vf = video_frame.contents
66
- print("VideoFrameObserver _on_frame:", agora_handle, channel_id, user_id, vf.metadata_buffer, vf.metadata_size)
66
+ # print("VideoFrameObserver _on_frame:", agora_handle, channel_id, user_id, vf.metadata_buffer, vf.metadata_size)
67
67
  self.video_frame_observer.on_frame(agora_handle, channel_id.decode() if channel_id else None, user_id.decode(), vf.to_video_frame())
68
68
 
69
69
 
@@ -1,7 +1,21 @@
1
1
  import ctypes
2
2
  from .agora_base import *
3
3
 
4
- from ._local_user_observer import RemoteAudioTrackStats
4
+
5
+ class RemoteAudioTrackStats(ctypes.Structure):
6
+ _fields_ = [
7
+ ("uid", ctypes.c_uint),
8
+ ("quality", ctypes.c_int),
9
+ ("network_transport_delay", ctypes.c_int),
10
+ ("jitter_buffer_delay", ctypes.c_int),
11
+ ("audio_loss_rate", ctypes.c_int),
12
+ ("num_channels", ctypes.c_int),
13
+ ("received_sample_rate", ctypes.c_int),
14
+ ("received_bitrate", ctypes.c_int),
15
+ ("total_frozen_time", ctypes.c_int),
16
+ ("frozen_rate", ctypes.c_int),
17
+ ("received_bytes", ctypes.c_int64)
18
+ ]
5
19
 
6
20
  agora_remote_audio_track_get_statistics = agora_lib.agora_remote_audio_track_get_statistics
7
21
  agora_remote_audio_track_get_statistics.restype = ctypes.POINTER(RemoteAudioTrackStats)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: agora_python_server_sdk
3
- Version: 2.0.0
3
+ Version: 2.0.2
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
@@ -47,7 +47,7 @@ class CustomInstallCommand(install):
47
47
 
48
48
  setup(
49
49
  name='agora_python_server_sdk',
50
- version='2.0.0',
50
+ version='2.0.2',
51
51
  description='A Python SDK for Agora Server',
52
52
  long_description=open('README.md').read(),
53
53
  long_description_content_type='text/markdown',