agora-python-server-sdk 2.3.2__tar.gz → 2.3.4__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 (48) hide show
  1. {agora_python_server_sdk-2.3.2/agora_python_server_sdk.egg-info → agora_python_server_sdk-2.3.4}/PKG-INFO +5 -1
  2. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/README.md +4 -0
  3. agora_python_server_sdk-2.3.4/agora/__init__.py +202 -0
  4. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/__init__.py +1 -1
  5. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtm/__init__.py +1 -0
  6. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4/agora_python_server_sdk.egg-info}/PKG-INFO +5 -1
  7. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora_python_server_sdk.egg-info/SOURCES.txt +1 -0
  8. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/setup.py +9 -17
  9. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/MANIFEST.in +0 -0
  10. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/_ctypes_handle/_audio_frame_observer.py +0 -0
  11. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/_ctypes_handle/_ctypes_data.py +0 -0
  12. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/_ctypes_handle/_local_user_observer.py +0 -0
  13. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/_ctypes_handle/_rtc_connection_observer.py +0 -0
  14. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/_ctypes_handle/_video_encoded_frame_observer.py +0 -0
  15. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/_ctypes_handle/_video_frame_observer.py +0 -0
  16. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/_utils/globals.py +0 -0
  17. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/agora_base.py +0 -0
  18. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/agora_parameter.py +0 -0
  19. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/agora_service.py +0 -0
  20. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/audio_encoded_frame_sender.py +0 -0
  21. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/audio_frame_observer.py +0 -0
  22. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/audio_pcm_data_sender.py +0 -0
  23. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/audio_sessionctrl.py +0 -0
  24. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/audio_vad_manager.py +0 -0
  25. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/local_audio_track.py +0 -0
  26. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/local_user.py +0 -0
  27. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/local_user_observer.py +0 -0
  28. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/local_video_track.py +0 -0
  29. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/media_node_factory.py +0 -0
  30. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/remote_audio_track.py +0 -0
  31. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/remote_video_track.py +0 -0
  32. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/rtc_connection.py +0 -0
  33. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/rtc_connection_observer.py +0 -0
  34. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/utils/audio_consumer.py +0 -0
  35. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/utils/vad_dump.py +0 -0
  36. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/video_encoded_frame_observer.py +0 -0
  37. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/video_encoded_image_sender.py +0 -0
  38. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/video_frame_observer.py +0 -0
  39. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/video_frame_sender.py +0 -0
  40. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtc/voice_detection.py +0 -0
  41. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtm/_ctypes_handle/_ctypes_data.py +0 -0
  42. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtm/rtm_base.py +0 -0
  43. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtm/rtm_client.py +0 -0
  44. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora/rtm/rtm_event_handler.py +0 -0
  45. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora_python_server_sdk.egg-info/dependency_links.txt +0 -0
  46. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/agora_python_server_sdk.egg-info/top_level.txt +0 -0
  47. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/pyproject.toml +0 -0
  48. {agora_python_server_sdk-2.3.2 → agora_python_server_sdk-2.3.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: agora_python_server_sdk
3
- Version: 2.3.2
3
+ Version: 2.3.4
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
@@ -64,6 +64,10 @@ python agora_rtc/examples/example_audio_pcm_send.py --appId=xxx --channelId=xxx
64
64
  ```
65
65
 
66
66
  # Change log
67
+ # 2025.11.07 release 2.3.3
68
+ -- update: to support rtm
69
+ -- adjust sdk's directory structure
70
+ -- change requests to urllib
67
71
  # 2025.10.23 release 2.3.2: support rtc and rtm in one package
68
72
  -- update: to support rtm.can support both rtc and rtm in one package.
69
73
  -- adjust sdk's directory structure
@@ -49,6 +49,10 @@ python agora_rtc/examples/example_audio_pcm_send.py --appId=xxx --channelId=xxx
49
49
  ```
50
50
 
51
51
  # Change log
52
+ # 2025.11.07 release 2.3.3
53
+ -- update: to support rtm
54
+ -- adjust sdk's directory structure
55
+ -- change requests to urllib
52
56
  # 2025.10.23 release 2.3.2: support rtc and rtm in one package
53
57
  -- update: to support rtm.can support both rtc and rtm in one package.
54
58
  -- adjust sdk's directory structure
@@ -0,0 +1,202 @@
1
+ #!/usr/bin/env python
2
+
3
+ import hashlib
4
+ import ssl
5
+ import zipfile
6
+ import site
7
+ from urllib import request
8
+ import ctypes
9
+ import os
10
+ import sys
11
+ import platform
12
+ import logging
13
+ logger = logging.getLogger(__name__)
14
+ ssl._create_default_https_context = ssl._create_unverified_context
15
+
16
+ '''
17
+ # this is the global init for agora python server sdk, include rtc and rtm
18
+ # it will check the sdk version and download the latest sdk if needed
19
+ path dir structure is:
20
+ /home/xxx/agora/
21
+ agora_sdk
22
+ include
23
+ *.so/*.dylib
24
+ rtc
25
+ __init__.py
26
+ rtc*.py
27
+ rtm
28
+ __init__.py
29
+ rtm*.py
30
+ __init__.py
31
+ setup.py
32
+ README.md
33
+ LICENSE
34
+ CHANGELOG.md
35
+ CONTRIBUTING.md
36
+ CODE_OF_CONDUCT.md
37
+ SECURITY.md
38
+ CONTRIBUTORS.md
39
+ '''
40
+ '''
41
+ # requirement for package zip file:
42
+ no root dir, only so/dylib file in the root dir
43
+ '''
44
+
45
+
46
+
47
+
48
+ def get_file_md5(file_path):
49
+ hash_md5 = hashlib.md5()
50
+ try:
51
+ with open(file_path, "rb") as f:
52
+ for chunk in iter(lambda: f.read(4096), b""):
53
+ hash_md5.update(chunk)
54
+ return hash_md5.hexdigest()
55
+ except Exception as e:
56
+ logger.error(f"get_file_md5 error: {e}")
57
+ return ""
58
+
59
+
60
+ #get agora root path, like: /home/xxx/agora
61
+ def get_sdk_root_path():
62
+ agora_path = os.path.dirname(os.path.abspath(__file__))
63
+ return agora_path
64
+ #get agora 's library path, like: /home/xxx/agora/agora_sdk/
65
+ def get_sdk_library_path():
66
+ agora_path = get_sdk_root_path()
67
+ library_path = os.path.join(agora_path, "agora_sdk")
68
+
69
+ return library_path
70
+ def get_sdk_rtc_path():
71
+ agora_path = get_sdk_root_path()
72
+ rtc_path = os.path.join(agora_path, "rtc")
73
+ return rtc_path
74
+ def get_sdk_rtm_path():
75
+ agora_path = get_sdk_root_path()
76
+ rtm_path = os.path.join(agora_path, "rtm")
77
+ return rtm_path
78
+
79
+
80
+ #helper function to download file from ur
81
+ def report_progress(blocknum, blocksize, totalsize):
82
+ """
83
+ 下载进度回调函数
84
+ """
85
+ if totalsize > 0:
86
+ # calculate download progress percentage
87
+ percent = min(100, (blocknum * blocksize) / totalsize * 100)
88
+ # use carriage return to overwrite current line, to update progress in place
89
+ print(f"\rDownloading: ----{percent:.2f}%-----", end='', flush=True)
90
+ # when download is complete (or calculated value exceeds 100%)
91
+ if percent >= 100:
92
+ print("Downloading: ----100.00%-----\n")
93
+ else:
94
+ # if cannot get file total size, show downloaded bytes
95
+ downloaded = blocknum * blocksize
96
+ print(f"\rDownloading: ----{downloaded} bytes-----", end='', flush=True)
97
+
98
+
99
+ def _check_download_and_extract_sdk():
100
+ agora_service_path = os.path.dirname(os.path.abspath(__file__))
101
+ # change from dir like: /home/xxx/agora_rtc/agora/rtc/agora_sdk to
102
+ # /home/xxx/agora_rtc/agora/agora_sdk
103
+ # /home/xxx/agora_rtc/agora/rtc
104
+ # /home/xxx/agora_rtc/agora/rtm
105
+ global sdk_library_dir, sdk_root_dir
106
+
107
+ zip_path = os.path.join(sdk_root_dir, "agora_rtc_sdk.zip")
108
+ logger.error(f"sdk_library_dir: {sdk_library_dir}")
109
+ logger.error(f"zip_path: {zip_path}")
110
+
111
+ # for diff os and arch
112
+ arch = platform.machine()
113
+ os_type = platform.system()
114
+
115
+
116
+
117
+ #url = "https://download.agora.io/sdk/release/agora_rtc_sdk-x86_64-linux-gnu-v4.4.30-20241024_101940-398537.zip"
118
+ # version 2.2.0 for linux
119
+ #url = "https://download.agora.io/sdk/release/agora_rtc_sdk-x86_64-linux-gnu-v4.4.31-20241223_111509-491956.zip"
120
+ #url = "https://download.agora.io/sdk/release/agora_rtc_sdk-x86_64-linux-gnu-v4.4.32-20250715_161625-791246.zip"
121
+ #url = "https://download.agora.io/sdk/release/agora_rtc_sdk-x86_64-linux-gnu-v4.4.32-20250829_160340-860733.zip"
122
+ #fusion version: 20251023
123
+
124
+ url = "https://download.agora.io/sdk/release/agora_rtc_sdk-x86_64-linux-gnu-v4.4.32-20250829_160340-860733-aed_20251107_1642.zip"
125
+
126
+
127
+ rtc_libfile_path = os.path.join(sdk_library_dir, "libagora_rtc_sdk.so")
128
+ #rtc_md5 = "7031dd10d1681cd88fd89d68c5b54282"
129
+ rtc_md5 = "7eb8042e43246f95f188549d8711d1bf"
130
+ if sys.platform == 'darwin':
131
+ #url = "https://download.agora.io/sdk/release/agora_rtc_sdk_mac_rel.v4.4.30_22472_FULL_20241024_1224_398653.zip"
132
+ # version 2.2.0 for mac
133
+ #url = "https://download.agora.io/sdk/release/agora_sdk_mac_v4.4.31_23136_FULL_20241223_1245_492039.zip"
134
+ #url = "https://download.agora.io/sdk/release/agora_sdk_mac_v4.4.32_24915_FULL_20250715_1710_791284.zip"
135
+ #url = "https://download.agora.io/sdk/release/agora_sdk_mac_v4.4.32_25418_FULL_20250829_1647_860754.zip"
136
+ #20251023 Fusion version: one sdk package include rtc and rtm
137
+ url = "https://download.agora.io/sdk/release/agora_sdk_mac_v4.4.32_25418_FULL_20250829_1647_860754-aed_20251107_1639.zip"
138
+
139
+
140
+
141
+ rtc_libfile_path = os.path.join(sdk_library_dir, "libAgoraRtcKit.dylib")
142
+ #rtc_md5 = "ca3ca14f9e2b7d97eb2594d1f32dab9f"
143
+ rtc_md5 = "df0ec3b5073d17dee76cc4d97c13699a"
144
+ if arch == "aarch64" and sys.platform == 'linux':
145
+ #url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.31-20250307_175457-603878.zip"
146
+ #url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20250425_150503-675674.zip"
147
+ #url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455.zip"
148
+ url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455_20251023_1538.zip"
149
+ rtc_md5 = "5c002f25d2b381e353082da4f835b4f2"
150
+
151
+ is_file_exist = os.path.exists(rtc_libfile_path)
152
+ if is_file_exist:
153
+ md5_value = get_file_md5(rtc_libfile_path)
154
+ else:
155
+ md5_value = ""
156
+ if md5_value == rtc_md5:
157
+ return
158
+
159
+ logger.error(f"missing agora sdk, now download it, please wait for a while...: {rtc_libfile_path} {md5_value} {rtc_md5} {is_file_exist}")
160
+ if os.path.exists(sdk_library_dir):
161
+ os.system(f"rm -rf {sdk_library_dir}")
162
+ os.makedirs(sdk_library_dir, exist_ok=True)
163
+ if os.path.exists(zip_path):
164
+ os.remove(zip_path)
165
+
166
+ logger.error(f"sdk_library_dir: {sdk_library_dir}")
167
+ logger.error(f"Downloading {url}...")
168
+ #download_file_with_progress(url, zip_path)
169
+ request.urlretrieve(url, zip_path,reporthook=report_progress)
170
+
171
+
172
+ logger.error(f"Extracting {zip_path}...")
173
+
174
+ with zipfile.ZipFile(zip_path, 'r') as zip_ref:
175
+ zip_ref.extractall(sdk_root_dir)
176
+
177
+ if os.path.exists(zip_path):
178
+ os.remove(zip_path)
179
+ logger.error("download done, continue...")
180
+
181
+
182
+
183
+ sdk_root_dir = get_sdk_root_path()
184
+ sdk_rtc_dir = get_sdk_rtc_path()
185
+ sdk_rtm_dir = get_sdk_rtm_path()
186
+ sdk_library_dir = get_sdk_library_path()
187
+
188
+ _check_download_and_extract_sdk()
189
+
190
+
191
+ if sys.platform == 'darwin':
192
+ rtc_libfile_path = os.path.join(sdk_library_dir, 'libAgoraRtcKit.dylib')
193
+ else:
194
+ rtc_libfile_path = os.path.join(sdk_library_dir, 'libagora_rtc_sdk.so')
195
+ ctypes.CDLL(os.path.join(sdk_library_dir, 'libaosl.so'))
196
+
197
+ #check if the library exists
198
+ if not os.path.exists(rtc_libfile_path):
199
+ logger.error(f"library {rtc_libfile_path} not found")
200
+ sys.exit(1)
201
+ # import these variables to the sub modules
202
+ __all__ = ['sdk_library_dir', 'sdk_rtc_dir', 'sdk_rtm_dir', 'sdk_root_dir']
@@ -25,7 +25,7 @@ try:
25
25
 
26
26
  elif sys.platform == 'linux':
27
27
  lib_agora_rtc_path = os.path.join(lib_dir, 'libagora_rtc_sdk.so')
28
- #ctypes.CDLL(os.path.join(lib_dir, 'libagora-fdkaac.so'))
28
+ ctypes.CDLL(os.path.join(lib_dir, 'libagora-fdkaac.so'))
29
29
  agora_lib = ctypes.CDLL(lib_agora_rtc_path)
30
30
  except OSError as e:
31
31
  logger.error(f"Error loading the library: {e}")
@@ -30,6 +30,7 @@ try:
30
30
  elif sys.platform == 'linux':
31
31
  lib_agora_rtm_path = os.path.join(sdk_library_dir, 'libagora_rtm_sdk_c.so')
32
32
  rtm_lib = ctypes.CDLL(lib_agora_rtm_path)
33
+ ctypes.CDLL(os.path.join(sdk_library_dir, 'libagora_rtm_sdk.so'))
33
34
  except OSError as e:
34
35
  logger.error(f"Error loading the library: {e}")
35
36
  logger.error(f"Attempted to load from: {lib_agora_rtm_path}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: agora_python_server_sdk
3
- Version: 2.3.2
3
+ Version: 2.3.4
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
@@ -64,6 +64,10 @@ python agora_rtc/examples/example_audio_pcm_send.py --appId=xxx --channelId=xxx
64
64
  ```
65
65
 
66
66
  # Change log
67
+ # 2025.11.07 release 2.3.3
68
+ -- update: to support rtm
69
+ -- adjust sdk's directory structure
70
+ -- change requests to urllib
67
71
  # 2025.10.23 release 2.3.2: support rtc and rtm in one package
68
72
  -- update: to support rtm.can support both rtc and rtm in one package.
69
73
  -- adjust sdk's directory structure
@@ -2,6 +2,7 @@ MANIFEST.in
2
2
  README.md
3
3
  pyproject.toml
4
4
  setup.py
5
+ agora/__init__.py
5
6
  agora/rtc/__init__.py
6
7
  agora/rtc/agora_base.py
7
8
  agora/rtc/agora_parameter.py
@@ -76,25 +76,17 @@ class CustomInstallCommand(install):
76
76
  if arch == "aarch64" and sys.platform == 'linux':
77
77
  url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20250829_160340-860733.zip"
78
78
 
79
- #verison 2.3.1 20251009 to update arm64 sdk
80
- if arch == "aarch64" and sys.platform == 'linux':
81
- url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455.zip"
82
-
83
- #20251023 Fusion version: one sdk package include rtc and rtm
79
+ #20251107 Fusion version: one sdk package include rtc and rtm
80
+ url = "https://download.agora.io/sdk/release/agora_rtc_sdk-x86_64-linux-gnu-v4.4.32-20250829_160340-860733-aed_20251107_1642.zip"
84
81
  if sys.platform == 'darwin':
85
- url = "https://download.agora.io/sdk/release/agora_sdk_mac_v4.4.32_25418_FULL_20250829_1647_860754_20251023_1441.zip"
86
-
82
+ url = "https://download.agora.io/sdk/release/agora_sdk_mac_v4.4.32_25418_FULL_20250829_1647_860754-aed_20251107_1639.zip"
83
+
84
+
87
85
  if arch == "aarch64" and sys.platform == 'linux':
88
- url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455_20251023_1538.zip"
89
-
90
- #20251106 Fusion version: one sdk package include rtc and rtm
91
- url = "https://download.agora.io/sdk/release/agora_rtc_sdk_x86_64-linux-gnu-v4.4.32.150_26715_SERVER_20251030_1807-aed.zip"
92
- if sys.platform == 'darwin':
93
- url = "https://download.agora.io/sdk/release/agora_sdk_mac_v4.4.30_25869_FULL_20251030_1836_953684-aed.zip"
86
+ url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455.zip"
94
87
 
95
- if arch == "aarch64" and sys.platform == 'linux':
96
- url = "https://download.agora.io/sdk/release/Agora-RTC-aarch64-linux-gnu-v4.4.32-20251009_145437-921455_20251106_1538.zip"
97
88
 
89
+
98
90
  if os.path.exists(sdk_dir):
99
91
  os.system(f"rm -rf {sdk_dir}")
100
92
  os.makedirs(agora_service_path, exist_ok=True)
@@ -115,12 +107,12 @@ class CustomInstallCommand(install):
115
107
 
116
108
  setup(
117
109
  name='agora_python_server_sdk',
118
- version='2.3.2',
110
+ version='2.3.4',
119
111
  description='A Python SDK for Agora Server',
120
112
  long_description=open('README.md').read(),
121
113
  long_description_content_type='text/markdown',
122
114
  url='https://github.com/AgoraIO-Extensions/Agora-Python-Server-SDK',
123
- packages=["agora.rtc", "agora.rtc._ctypes_handle", "agora.rtc._utils","agora.rtc.utils","agora.rtm","agora.rtm._ctypes_handle"],
115
+ packages=["agora", "agora.rtc", "agora.rtc._ctypes_handle", "agora.rtc._utils","agora.rtc.utils","agora.rtm","agora.rtm._ctypes_handle"],
124
116
  classifiers=[
125
117
  "Intended Audience :: Developers",
126
118
  'License :: OSI Approved :: MIT License',