agora-python-server-sdk 2.2.0__tar.gz → 2.2.1__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.
- {agora_python_server_sdk-2.2.0/agora_python_server_sdk.egg-info → agora_python_server_sdk-2.2.1}/PKG-INFO +15 -2
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/README.md +7 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/_ctypes_handle/_ctypes_data.py +3 -2
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/utils/audio_consumer.py +30 -4
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1/agora_python_server_sdk.egg-info}/PKG-INFO +15 -2
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/setup.py +1 -1
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/MANIFEST.in +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/__init__.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/_ctypes_handle/_audio_frame_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/_ctypes_handle/_local_user_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/_ctypes_handle/_rtc_connection_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/_ctypes_handle/_video_encoded_frame_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/_ctypes_handle/_video_frame_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/_utils/globals.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/agora_base.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/agora_parameter.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/agora_service.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/audio_encoded_frame_sender.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/audio_frame_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/audio_pcm_data_sender.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/audio_sessionctrl.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/audio_vad_manager.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/local_audio_track.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/local_user.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/local_user_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/local_video_track.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/media_node_factory.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/remote_audio_track.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/remote_video_track.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/rtc_connection.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/rtc_connection_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/utils/vad_dump.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/video_encoded_frame_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/video_encoded_image_sender.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/video_frame_observer.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/video_frame_sender.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/voice_detection.py +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora_python_server_sdk.egg-info/SOURCES.txt +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora_python_server_sdk.egg-info/dependency_links.txt +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora_python_server_sdk.egg-info/top_level.txt +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/pyproject.toml +0 -0
- {agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: agora_python_server_sdk
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.1
|
|
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
|
|
@@ -12,6 +12,12 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
13
|
Requires-Python: >=3.10
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
|
+
Dynamic: classifier
|
|
16
|
+
Dynamic: description
|
|
17
|
+
Dynamic: description-content-type
|
|
18
|
+
Dynamic: home-page
|
|
19
|
+
Dynamic: requires-python
|
|
20
|
+
Dynamic: summary
|
|
15
21
|
|
|
16
22
|
# Note
|
|
17
23
|
- This is a Python SDK wrapper for the Agora RTC SDK.
|
|
@@ -50,6 +56,13 @@ python agora_rtc/examples/example_audio_pcm_send.py --appId=xxx --channelId=xxx
|
|
|
50
56
|
```
|
|
51
57
|
|
|
52
58
|
# Change log
|
|
59
|
+
2025.02.26 Release 2.2.1
|
|
60
|
+
--Update:
|
|
61
|
+
- Reduced buffer size from 180ms to 100ms to minimize latency.
|
|
62
|
+
-- Added:
|
|
63
|
+
- AudioConsumer::is_push_to_rtc_completed: Add audio consumer support for playback state notifications.
|
|
64
|
+
-- Bug fix:
|
|
65
|
+
- Fixed incorrect _samples_per_channel calculation in stereo mode.
|
|
53
66
|
|
|
54
67
|
2025.01.08 Release 2.2.0
|
|
55
68
|
-- Updates:
|
|
@@ -35,6 +35,13 @@ python agora_rtc/examples/example_audio_pcm_send.py --appId=xxx --channelId=xxx
|
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
# Change log
|
|
38
|
+
2025.02.26 Release 2.2.1
|
|
39
|
+
--Update:
|
|
40
|
+
- Reduced buffer size from 180ms to 100ms to minimize latency.
|
|
41
|
+
-- Added:
|
|
42
|
+
- AudioConsumer::is_push_to_rtc_completed: Add audio consumer support for playback state notifications.
|
|
43
|
+
-- Bug fix:
|
|
44
|
+
- Fixed incorrect _samples_per_channel calculation in stereo mode.
|
|
38
45
|
|
|
39
46
|
2025.01.08 Release 2.2.0
|
|
40
47
|
-- Updates:
|
|
@@ -809,12 +809,13 @@ class ExternalVideoFrameInner(ctypes.Structure):
|
|
|
809
809
|
else:
|
|
810
810
|
c_alpha_buffer_ptr = ctypes.c_void_p(0)
|
|
811
811
|
|
|
812
|
-
c_metadata_size = len (frame.metadata)
|
|
812
|
+
c_metadata_size = len (frame.metadata) if frame.metadata is not None else 0
|
|
813
813
|
if frame.metadata is not None and c_metadata_size > 0:
|
|
814
814
|
c_metadata_ptr = (ctypes.c_uint8 * len(frame.metadata)).from_buffer(frame.metadata)
|
|
815
815
|
c_metadata_size = len(frame.metadata)
|
|
816
816
|
else:
|
|
817
|
-
c_metadata_ptr = ctypes.c_void_p(0)
|
|
817
|
+
#c_metadata_ptr = ctypes.c_void_p(0)
|
|
818
|
+
c_metadata_ptr = ctypes.POINTER(ctypes.c_uint8)()
|
|
818
819
|
c_metadata_size = 0
|
|
819
820
|
|
|
820
821
|
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/utils/audio_consumer.py
RENAMED
|
@@ -31,6 +31,8 @@ AudioConsumer调用方式:
|
|
|
31
31
|
E 退出的时候,调用release()方法,释放资源
|
|
32
32
|
"""
|
|
33
33
|
class AudioConsumer:
|
|
34
|
+
MIN_BUFFER_SIZE = 10
|
|
35
|
+
RTC_E2E_DELAY = 200 # e2e delay 90ms for iphone, 120ms for android;150ms for web. so we use 200ms here
|
|
34
36
|
def __init__(self, pcm_sender: AudioPcmDataSender, sample_rate: int, channels: int) -> None:
|
|
35
37
|
self._lock = threading.Lock()
|
|
36
38
|
self._start_time = 0
|
|
@@ -45,11 +47,12 @@ class AudioConsumer:
|
|
|
45
47
|
#audio parame
|
|
46
48
|
self._frame.bytes_per_sample = 2
|
|
47
49
|
self._bytes_per_frame = sample_rate // 100 * channels * 2
|
|
48
|
-
self._samples_per_channel = sample_rate // 100
|
|
50
|
+
self._samples_per_channel = sample_rate // 100
|
|
49
51
|
#init pcmaudioframe
|
|
50
52
|
self._frame.timestamp = 0
|
|
51
53
|
|
|
52
54
|
self._init = True
|
|
55
|
+
self._last_consume_time = 0
|
|
53
56
|
|
|
54
57
|
pass
|
|
55
58
|
def push_pcm_data(self, data) ->None:
|
|
@@ -64,6 +67,7 @@ class AudioConsumer:
|
|
|
64
67
|
return
|
|
65
68
|
self._start_time = time.time()*1000
|
|
66
69
|
self._consumed_packages = 0
|
|
70
|
+
self._last_consume_time = self._start_time
|
|
67
71
|
pass
|
|
68
72
|
|
|
69
73
|
def consume(self):
|
|
@@ -75,13 +79,16 @@ class AudioConsumer:
|
|
|
75
79
|
expected_total_packages = int(elapsed_time//10)
|
|
76
80
|
besent_packages = expected_total_packages - self._consumed_packages
|
|
77
81
|
data_len = len(self._data)
|
|
82
|
+
#if data is not empty, to update last consume time
|
|
83
|
+
if data_len > 0:
|
|
84
|
+
self._last_consume_time = now
|
|
78
85
|
|
|
79
|
-
if besent_packages >
|
|
86
|
+
if besent_packages > AudioConsumer.MIN_BUFFER_SIZE and data_len //self._bytes_per_frame < AudioConsumer.MIN_BUFFER_SIZE: #for fist time, if data_len is not enough, just return and wait for next time
|
|
80
87
|
#print("-----underflow data")
|
|
81
88
|
return -2
|
|
82
|
-
if besent_packages >
|
|
89
|
+
if besent_packages > AudioConsumer.MIN_BUFFER_SIZE: #rest to start state, push 18 packs in Start_STATE
|
|
83
90
|
self._reset()
|
|
84
|
-
besent_packages = min(
|
|
91
|
+
besent_packages = min(AudioConsumer.MIN_BUFFER_SIZE, data_len//self._bytes_per_frame)
|
|
85
92
|
self._consumed_packages = -besent_packages
|
|
86
93
|
|
|
87
94
|
|
|
@@ -113,6 +120,25 @@ class AudioConsumer:
|
|
|
113
120
|
return 0
|
|
114
121
|
with self._lock:
|
|
115
122
|
return len(self._data)
|
|
123
|
+
|
|
124
|
+
#判断AudioConsumer中的数据是否已经完全推送给了RTC 频道
|
|
125
|
+
#因为audioconsumer内部有一定的缓存机制,所以当get_remaining_data_size 返回是0的时候,还有数据没有推送给
|
|
126
|
+
#rtc 频道。如果要判断数据是否完全推送给了rtc 频道,需要调用这个api来做判断。
|
|
127
|
+
#return value:1--push to rtc completed, 0--push to rtc not completed -1--error
|
|
128
|
+
def is_push_to_rtc_completed(self)->int:
|
|
129
|
+
if self._init == False:
|
|
130
|
+
return -1
|
|
131
|
+
with self._lock:
|
|
132
|
+
remain_size = len(self._data)
|
|
133
|
+
if remain_size == 0:
|
|
134
|
+
now = time.time()*1000
|
|
135
|
+
diff = now - self._last_consume_time
|
|
136
|
+
|
|
137
|
+
if diff > AudioConsumer.MIN_BUFFER_SIZE*10 + AudioConsumer.RTC_E2E_DELAY:
|
|
138
|
+
return 1
|
|
139
|
+
|
|
140
|
+
return 0
|
|
141
|
+
pass
|
|
116
142
|
def clear(self):
|
|
117
143
|
if self._init == False:
|
|
118
144
|
return
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: agora_python_server_sdk
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.1
|
|
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
|
|
@@ -12,6 +12,12 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
13
13
|
Requires-Python: >=3.10
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
|
+
Dynamic: classifier
|
|
16
|
+
Dynamic: description
|
|
17
|
+
Dynamic: description-content-type
|
|
18
|
+
Dynamic: home-page
|
|
19
|
+
Dynamic: requires-python
|
|
20
|
+
Dynamic: summary
|
|
15
21
|
|
|
16
22
|
# Note
|
|
17
23
|
- This is a Python SDK wrapper for the Agora RTC SDK.
|
|
@@ -50,6 +56,13 @@ python agora_rtc/examples/example_audio_pcm_send.py --appId=xxx --channelId=xxx
|
|
|
50
56
|
```
|
|
51
57
|
|
|
52
58
|
# Change log
|
|
59
|
+
2025.02.26 Release 2.2.1
|
|
60
|
+
--Update:
|
|
61
|
+
- Reduced buffer size from 180ms to 100ms to minimize latency.
|
|
62
|
+
-- Added:
|
|
63
|
+
- AudioConsumer::is_push_to_rtc_completed: Add audio consumer support for playback state notifications.
|
|
64
|
+
-- Bug fix:
|
|
65
|
+
- Fixed incorrect _samples_per_channel calculation in stereo mode.
|
|
53
66
|
|
|
54
67
|
2025.01.08 Release 2.2.0
|
|
55
68
|
-- Updates:
|
|
@@ -50,7 +50,7 @@ class CustomInstallCommand(install):
|
|
|
50
50
|
|
|
51
51
|
setup(
|
|
52
52
|
name='agora_python_server_sdk',
|
|
53
|
-
version='2.2.
|
|
53
|
+
version='2.2.1',
|
|
54
54
|
description='A Python SDK for Agora Server',
|
|
55
55
|
long_description=open('README.md').read(),
|
|
56
56
|
long_description_content_type='text/markdown',
|
|
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
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/agora_parameter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/audio_frame_observer.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/audio_pcm_data_sender.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/audio_sessionctrl.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/audio_vad_manager.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/local_audio_track.py
RENAMED
|
File without changes
|
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/local_user_observer.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/local_video_track.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/media_node_factory.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/remote_audio_track.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/remote_video_track.py
RENAMED
|
File without changes
|
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/rtc_connection_observer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/video_frame_observer.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/video_frame_sender.py
RENAMED
|
File without changes
|
{agora_python_server_sdk-2.2.0 → agora_python_server_sdk-2.2.1}/agora/rtc/voice_detection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|