sora-sdk 2024.4.0.dev20__tar.gz → 2024.4.0.dev22__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.
- {sora_sdk-2024.4.0.dev20/src/sora_sdk.egg-info → sora_sdk-2024.4.0.dev22}/PKG-INFO +3 -3
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/README.md +2 -2
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/pyproject.toml +1 -1
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/run.py +1 -1
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/src/sora_sdk/sora_sdk_ext.cpython-310-darwin.so +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22/src/sora_sdk.egg-info}/PKG-INFO +3 -3
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/src/sora_sdk.egg-info/SOURCES.txt +2 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_encoded_transform.py +6 -6
- sora_sdk-2024.4.0.dev22/tests/test_signaling_notify.py +53 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_sora_disconnect.py +20 -0
- sora_sdk-2024.4.0.dev22/tests/test_type_switched.py +118 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_vad.py +2 -2
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/LICENSE +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/MANIFEST.in +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/NOTICE.md +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/buildbase.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/pypath.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/setup.cfg +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/setup.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/src/sora_sdk/__init__.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/src/sora_sdk/py.typed +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/src/sora_sdk/sora_sdk_ext.pyi +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/src/sora_sdk.egg-info/dependency_links.txt +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/src/sora_sdk.egg-info/top_level.txt +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_ca_cert.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_macos.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_messaging.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_openh264.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_re_offer_re_answer_sdp.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_sendonly_recvonly.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_signaling_message.py +0 -0
- {sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/tests/test_simulcast.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sora_sdk
|
|
3
|
-
Version: 2024.4.0.
|
|
3
|
+
Version: 2024.4.0.dev22
|
|
4
4
|
Summary: WebRTC SFU Sora Python SDK
|
|
5
5
|
Home-page: https://github.com/shiguredo/sora-python-sdk
|
|
6
6
|
Author-email: "Shiguredo Inc." <contact+pypi@shiguredo.jp>
|
|
@@ -290,7 +290,8 @@ PyPI 経由ではインストールできません。
|
|
|
290
290
|
- Windows 11 x86_64
|
|
291
291
|
- Windows Server 2022 x86_64
|
|
292
292
|
- macOS Sequoia 15 arm64
|
|
293
|
-
- macOS
|
|
293
|
+
- macOS Ventura 14 arm64
|
|
294
|
+
- macOS Sonoma 13 arm64
|
|
294
295
|
- Ubuntu 24.04 LTS x86_64
|
|
295
296
|
- Ubuntu 24.04 LTS arm64
|
|
296
297
|
- Ubuntu 22.04 LTS x86_64
|
|
@@ -311,7 +312,6 @@ PyPI 経由ではインストールできません。
|
|
|
311
312
|
### 優先実装が可能な機能一覧
|
|
312
313
|
|
|
313
314
|
- Windows 11 arm64
|
|
314
|
-
- macOS Ventura 13 arm64
|
|
315
315
|
- Ubuntu 24.04 arm64
|
|
316
316
|
- Ubuntu 22.04 arm64
|
|
317
317
|
- Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack SDK 5)
|
|
@@ -92,7 +92,8 @@ PyPI 経由ではインストールできません。
|
|
|
92
92
|
- Windows 11 x86_64
|
|
93
93
|
- Windows Server 2022 x86_64
|
|
94
94
|
- macOS Sequoia 15 arm64
|
|
95
|
-
- macOS
|
|
95
|
+
- macOS Ventura 14 arm64
|
|
96
|
+
- macOS Sonoma 13 arm64
|
|
96
97
|
- Ubuntu 24.04 LTS x86_64
|
|
97
98
|
- Ubuntu 24.04 LTS arm64
|
|
98
99
|
- Ubuntu 22.04 LTS x86_64
|
|
@@ -113,7 +114,6 @@ PyPI 経由ではインストールできません。
|
|
|
113
114
|
### 優先実装が可能な機能一覧
|
|
114
115
|
|
|
115
116
|
- Windows 11 arm64
|
|
116
|
-
- macOS Ventura 13 arm64
|
|
117
117
|
- Ubuntu 24.04 arm64
|
|
118
118
|
- Ubuntu 22.04 arm64
|
|
119
119
|
- Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack SDK 5)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sora_sdk"
|
|
3
3
|
authors = [{ name = "Shiguredo Inc.", email = "contact+pypi@shiguredo.jp" }]
|
|
4
|
-
version = "2024.4.0.
|
|
4
|
+
version = "2024.4.0.dev22"
|
|
5
5
|
description = "WebRTC SFU Sora Python SDK"
|
|
6
6
|
readme = "README.md"
|
|
7
7
|
license = { file = "LICENSE" }
|
{sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/src/sora_sdk/sora_sdk_ext.cpython-310-darwin.so
RENAMED
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sora_sdk
|
|
3
|
-
Version: 2024.4.0.
|
|
3
|
+
Version: 2024.4.0.dev22
|
|
4
4
|
Summary: WebRTC SFU Sora Python SDK
|
|
5
5
|
Home-page: https://github.com/shiguredo/sora-python-sdk
|
|
6
6
|
Author-email: "Shiguredo Inc." <contact+pypi@shiguredo.jp>
|
|
@@ -290,7 +290,8 @@ PyPI 経由ではインストールできません。
|
|
|
290
290
|
- Windows 11 x86_64
|
|
291
291
|
- Windows Server 2022 x86_64
|
|
292
292
|
- macOS Sequoia 15 arm64
|
|
293
|
-
- macOS
|
|
293
|
+
- macOS Ventura 14 arm64
|
|
294
|
+
- macOS Sonoma 13 arm64
|
|
294
295
|
- Ubuntu 24.04 LTS x86_64
|
|
295
296
|
- Ubuntu 24.04 LTS arm64
|
|
296
297
|
- Ubuntu 22.04 LTS x86_64
|
|
@@ -311,7 +312,6 @@ PyPI 経由ではインストールできません。
|
|
|
311
312
|
### 優先実装が可能な機能一覧
|
|
312
313
|
|
|
313
314
|
- Windows 11 arm64
|
|
314
|
-
- macOS Ventura 13 arm64
|
|
315
315
|
- Ubuntu 24.04 arm64
|
|
316
316
|
- Ubuntu 22.04 arm64
|
|
317
317
|
- Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack SDK 5)
|
|
@@ -23,6 +23,8 @@ tests/test_openh264.py
|
|
|
23
23
|
tests/test_re_offer_re_answer_sdp.py
|
|
24
24
|
tests/test_sendonly_recvonly.py
|
|
25
25
|
tests/test_signaling_message.py
|
|
26
|
+
tests/test_signaling_notify.py
|
|
26
27
|
tests/test_simulcast.py
|
|
27
28
|
tests/test_sora_disconnect.py
|
|
29
|
+
tests/test_type_switched.py
|
|
28
30
|
tests/test_vad.py
|
|
@@ -35,7 +35,7 @@ class SendonlyEncodedTransform:
|
|
|
35
35
|
# 接続した
|
|
36
36
|
self._connected: Event = Event()
|
|
37
37
|
# 終了
|
|
38
|
-
self.
|
|
38
|
+
self._disconnected = Event()
|
|
39
39
|
|
|
40
40
|
self._audio_channels: int = 1
|
|
41
41
|
self._audio_sample_rate: int = 16000
|
|
@@ -117,13 +117,13 @@ class SendonlyEncodedTransform:
|
|
|
117
117
|
return self._is_called_on_video_transform
|
|
118
118
|
|
|
119
119
|
def _fake_audio_loop(self):
|
|
120
|
-
while not self.
|
|
120
|
+
while not self._disconnected.is_set():
|
|
121
121
|
time.sleep(0.02)
|
|
122
122
|
if self._audio_source is not None:
|
|
123
123
|
self._audio_source.on_data(numpy.zeros((320, 1), dtype=numpy.int16))
|
|
124
124
|
|
|
125
125
|
def _fake_video_loop(self):
|
|
126
|
-
while not self.
|
|
126
|
+
while not self._disconnected.is_set():
|
|
127
127
|
time.sleep(1.0 / 30)
|
|
128
128
|
if self._video_source is not None:
|
|
129
129
|
self._video_source.on_captured(
|
|
@@ -148,7 +148,7 @@ class SendonlyEncodedTransform:
|
|
|
148
148
|
|
|
149
149
|
def _on_disconnect(self, error_code, message):
|
|
150
150
|
print(f"Disconnected Sora: error_code='{error_code}' message='{message}'")
|
|
151
|
-
self.
|
|
151
|
+
self._disconnected.set()
|
|
152
152
|
self._connected.clear()
|
|
153
153
|
|
|
154
154
|
if self._fake_audio_thread is not None:
|
|
@@ -209,7 +209,7 @@ class RecvonlyEncodedTransform:
|
|
|
209
209
|
# 接続した
|
|
210
210
|
self._connected: Event = Event()
|
|
211
211
|
# 終了
|
|
212
|
-
self.
|
|
212
|
+
self._disconnected = Event()
|
|
213
213
|
|
|
214
214
|
self._audio_output_frequency: int = 24000
|
|
215
215
|
self._audio_output_channels: int = 1
|
|
@@ -276,7 +276,7 @@ class RecvonlyEncodedTransform:
|
|
|
276
276
|
|
|
277
277
|
def _on_disconnect(self, error_code, message):
|
|
278
278
|
print(f"Disconnected Sora: error_code='{error_code}' message='{message}'")
|
|
279
|
-
self.
|
|
279
|
+
self._disconnected.set()
|
|
280
280
|
self._connected.clear()
|
|
281
281
|
|
|
282
282
|
def _on_track(self, track: SoraMediaTrack) -> None:
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import uuid
|
|
3
|
+
|
|
4
|
+
from client import SoraClient, SoraRole
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def test_signaling_notify(setup):
|
|
8
|
+
"""
|
|
9
|
+
2 接続での connection.created と connection.destroyed の通知を確認する
|
|
10
|
+
"""
|
|
11
|
+
signaling_urls = setup.get("signaling_urls")
|
|
12
|
+
channel_id_prefix = setup.get("channel_id_prefix")
|
|
13
|
+
metadata = setup.get("metadata")
|
|
14
|
+
|
|
15
|
+
channel_id = f"{channel_id_prefix}_{__name__}_{sys._getframe().f_code.co_name}_{uuid.uuid4()}"
|
|
16
|
+
|
|
17
|
+
with SoraClient(
|
|
18
|
+
signaling_urls,
|
|
19
|
+
SoraRole.SENDRECV,
|
|
20
|
+
channel_id,
|
|
21
|
+
audio=True,
|
|
22
|
+
video=True,
|
|
23
|
+
metadata=metadata,
|
|
24
|
+
) as c1:
|
|
25
|
+
# c1 に自分の connection.created が通知される
|
|
26
|
+
notify = c1.wait_notify(lambda notify: notify["event_type"] == "connection.created")
|
|
27
|
+
assert notify["connection_id"] == c1.connection_id
|
|
28
|
+
assert notify["channel_connections"] == 1
|
|
29
|
+
|
|
30
|
+
with SoraClient(
|
|
31
|
+
signaling_urls,
|
|
32
|
+
SoraRole.SENDRECV,
|
|
33
|
+
channel_id,
|
|
34
|
+
audio=True,
|
|
35
|
+
video=True,
|
|
36
|
+
metadata=metadata,
|
|
37
|
+
) as c2:
|
|
38
|
+
# c2 に自分の connection.created が通知される
|
|
39
|
+
notify = c2.wait_notify(lambda notify: notify["event_type"] == "connection.created")
|
|
40
|
+
assert notify["connection_id"] == c2.connection_id
|
|
41
|
+
assert notify["channel_connections"] == 2
|
|
42
|
+
# data に c1 の connection_id が入ってる
|
|
43
|
+
assert notify["data"][0]["connection_id"] == c1.connection_id
|
|
44
|
+
|
|
45
|
+
# c1 に c2 の connection.created が通知される
|
|
46
|
+
notify = c1.wait_notify(lambda notify: notify["event_type"] == "connection.created")
|
|
47
|
+
assert notify["connection_id"] == c2.connection_id
|
|
48
|
+
assert notify["channel_connections"] == 2
|
|
49
|
+
|
|
50
|
+
# c1 に c2 の connection.destroyed が通知される
|
|
51
|
+
notify = c1.wait_notify(lambda notify: notify["event_type"] == "connection.destroyed")
|
|
52
|
+
assert notify["connection_id"] == c2.connection_id
|
|
53
|
+
assert notify["channel_connections"] == 1
|
|
@@ -6,6 +6,8 @@ import pytest
|
|
|
6
6
|
from api import disconnect_connection_api
|
|
7
7
|
from client import SoraClient, SoraRole
|
|
8
8
|
|
|
9
|
+
from sora_sdk import SoraSignalingErrorCode
|
|
10
|
+
|
|
9
11
|
|
|
10
12
|
@pytest.mark.skipif(sys.platform != "linux", reason="linux でのみ実行する")
|
|
11
13
|
def test_websocket_signaling_only_disconnect_api(setup):
|
|
@@ -33,10 +35,17 @@ def test_websocket_signaling_only_disconnect_api(setup):
|
|
|
33
35
|
response = disconnect_connection_api(api_url, channel_id, conn.connection_id)
|
|
34
36
|
assert response.status_code == 200
|
|
35
37
|
|
|
38
|
+
time.sleep(3)
|
|
39
|
+
|
|
36
40
|
assert conn.ws_close is True
|
|
37
41
|
assert conn.ws_close_code == 1000
|
|
38
42
|
assert conn.ws_close_reason == "DISCONNECTED-API"
|
|
39
43
|
|
|
44
|
+
# C++ SDK 側でこのテストが通るようなコードが必要
|
|
45
|
+
# assert conn.disconnect_code == SoraSignalingErrorCode.CLOSE_SUCCEEDED
|
|
46
|
+
# assert conn.disconnect_reason is not None
|
|
47
|
+
# assert "DISCONNECTED-API" in conn.disconnect_reason
|
|
48
|
+
|
|
40
49
|
# TODO: LIFETIME-EXPIRED のテスト
|
|
41
50
|
|
|
42
51
|
|
|
@@ -66,10 +75,17 @@ def test_websocket_datachannel_signaling_disconnect_api(setup):
|
|
|
66
75
|
response = disconnect_connection_api(api_url, channel_id, conn.connection_id)
|
|
67
76
|
assert response.status_code == 200
|
|
68
77
|
|
|
78
|
+
time.sleep(3)
|
|
79
|
+
|
|
69
80
|
assert conn.ws_close is True
|
|
70
81
|
assert conn.ws_close_code == 1000
|
|
71
82
|
assert conn.ws_close_reason == "DISCONNECTED-API"
|
|
72
83
|
|
|
84
|
+
# C++ SDK 側でこのテストが通るようなコードが必要
|
|
85
|
+
# assert conn.disconnect_code == SoraSignalingErrorCode.CLOSE_SUCCEEDED
|
|
86
|
+
# assert conn.disconnect_reason is not None
|
|
87
|
+
# assert "DISCONNECTED-API" in conn.disconnect_reason
|
|
88
|
+
|
|
73
89
|
# TODO: LIFETIME-EXPIRED のテスト
|
|
74
90
|
|
|
75
91
|
|
|
@@ -112,4 +128,8 @@ def test_datachannel_only_signaling_disconnect_api(setup):
|
|
|
112
128
|
assert conn.close_message["code"] == 1000
|
|
113
129
|
assert conn.close_message["reason"] == "DISCONNECTED-API"
|
|
114
130
|
|
|
131
|
+
assert conn.disconnect_code == SoraSignalingErrorCode.CLOSE_SUCCEEDED
|
|
132
|
+
assert conn.disconnect_reason is not None
|
|
133
|
+
assert "DISCONNECTED-API" in conn.disconnect_reason
|
|
134
|
+
|
|
115
135
|
# TODO: LIFETIME-EXPIRED のテスト
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import time
|
|
3
|
+
import uuid
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
from client import SoraClient, SoraRole
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def test_websocket_signaling_only_type_switched(setup):
|
|
10
|
+
signaling_urls = setup.get("signaling_urls")
|
|
11
|
+
channel_id_prefix = setup.get("channel_id_prefix")
|
|
12
|
+
metadata = setup.get("metadata")
|
|
13
|
+
|
|
14
|
+
channel_id = f"{channel_id_prefix}_{__name__}_{sys._getframe().f_code.co_name}_{uuid.uuid4()}"
|
|
15
|
+
|
|
16
|
+
"""
|
|
17
|
+
- WebSocket シグナリングのみ
|
|
18
|
+
- type: switched 送られてこない
|
|
19
|
+
"""
|
|
20
|
+
with SoraClient(
|
|
21
|
+
signaling_urls,
|
|
22
|
+
SoraRole.RECVONLY,
|
|
23
|
+
channel_id,
|
|
24
|
+
audio=True,
|
|
25
|
+
video=True,
|
|
26
|
+
metadata=metadata,
|
|
27
|
+
data_channel_signaling=False,
|
|
28
|
+
ignore_disconnect_websocket=False,
|
|
29
|
+
) as conn:
|
|
30
|
+
time.sleep(3)
|
|
31
|
+
|
|
32
|
+
assert conn.switched is False
|
|
33
|
+
assert conn.ws_close_code is None
|
|
34
|
+
assert conn.ws_close_reason is None
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test_hybrid_signaling_type_switched(setup):
|
|
38
|
+
signaling_urls = setup.get("signaling_urls")
|
|
39
|
+
channel_id_prefix = setup.get("channel_id_prefix")
|
|
40
|
+
metadata = setup.get("metadata")
|
|
41
|
+
|
|
42
|
+
channel_id = f"{channel_id_prefix}_{__name__}_{sys._getframe().f_code.co_name}_{uuid.uuid4()}"
|
|
43
|
+
|
|
44
|
+
"""
|
|
45
|
+
- WebSocket シグナリング + DataChannel シグナリング
|
|
46
|
+
- type: switched 送られてくる
|
|
47
|
+
"""
|
|
48
|
+
with SoraClient(
|
|
49
|
+
signaling_urls,
|
|
50
|
+
SoraRole.RECVONLY,
|
|
51
|
+
channel_id,
|
|
52
|
+
audio=True,
|
|
53
|
+
video=True,
|
|
54
|
+
metadata=metadata,
|
|
55
|
+
data_channel_signaling=True,
|
|
56
|
+
ignore_disconnect_websocket=False,
|
|
57
|
+
) as conn:
|
|
58
|
+
time.sleep(3)
|
|
59
|
+
|
|
60
|
+
assert conn.switched is True
|
|
61
|
+
assert conn.ws_close_code is None
|
|
62
|
+
assert conn.ws_close_reason is None
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def test_datachannel_signaling_only_type_switched(setup):
|
|
66
|
+
signaling_urls = setup.get("signaling_urls")
|
|
67
|
+
channel_id_prefix = setup.get("channel_id_prefix")
|
|
68
|
+
metadata = setup.get("metadata")
|
|
69
|
+
|
|
70
|
+
channel_id = f"{channel_id_prefix}_{__name__}_{sys._getframe().f_code.co_name}_{uuid.uuid4()}"
|
|
71
|
+
|
|
72
|
+
"""
|
|
73
|
+
- DataChannel シグナリングのみ
|
|
74
|
+
- type: switched 送られてくる
|
|
75
|
+
- Python SDK は WebSocket を自分で切断する
|
|
76
|
+
"""
|
|
77
|
+
with SoraClient(
|
|
78
|
+
signaling_urls,
|
|
79
|
+
SoraRole.RECVONLY,
|
|
80
|
+
channel_id,
|
|
81
|
+
audio=True,
|
|
82
|
+
video=True,
|
|
83
|
+
metadata=metadata,
|
|
84
|
+
data_channel_signaling=True,
|
|
85
|
+
ignore_disconnect_websocket=True,
|
|
86
|
+
) as conn:
|
|
87
|
+
time.sleep(3)
|
|
88
|
+
|
|
89
|
+
assert conn.switched is True
|
|
90
|
+
assert conn.ws_close_code == 1000
|
|
91
|
+
assert conn.ws_close_reason == "SELF-CLOSED"
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@pytest.mark.skip(reason="Sora がまだ対応していない")
|
|
95
|
+
def test_disconnect_before_switched(setup):
|
|
96
|
+
# switched 前に type: disconnect を送りつける
|
|
97
|
+
# ignore_disconnect_websocket は true
|
|
98
|
+
signaling_urls = setup.get("signaling_urls")
|
|
99
|
+
channel_id_prefix = setup.get("channel_id_prefix")
|
|
100
|
+
metadata = setup.get("metadata")
|
|
101
|
+
|
|
102
|
+
channel_id = f"{channel_id_prefix}_{__name__}_{sys._getframe().f_code.co_name}_{uuid.uuid4()}"
|
|
103
|
+
|
|
104
|
+
with SoraClient(
|
|
105
|
+
signaling_urls,
|
|
106
|
+
SoraRole.RECVONLY,
|
|
107
|
+
channel_id,
|
|
108
|
+
audio=True,
|
|
109
|
+
video=True,
|
|
110
|
+
metadata=metadata,
|
|
111
|
+
data_channel_signaling=True,
|
|
112
|
+
ignore_disconnect_websocket=True,
|
|
113
|
+
) as conn:
|
|
114
|
+
conn.disconnect()
|
|
115
|
+
|
|
116
|
+
if not conn.switched:
|
|
117
|
+
assert conn.ws_close_code == 1000
|
|
118
|
+
assert conn.ws_close_reason == "TYPE-DISCONNECT"
|
|
@@ -30,7 +30,7 @@ class VAD:
|
|
|
30
30
|
# 接続した
|
|
31
31
|
self._connected: Event = Event()
|
|
32
32
|
# 終了
|
|
33
|
-
self.
|
|
33
|
+
self._disconnected = Event()
|
|
34
34
|
|
|
35
35
|
self._audio_output_frequency: int = 24000
|
|
36
36
|
self._audio_output_channels: int = 1
|
|
@@ -86,7 +86,7 @@ class VAD:
|
|
|
86
86
|
|
|
87
87
|
def _on_disconnect(self, error_code, message):
|
|
88
88
|
print(f"Disconnected Sora: error_code='{error_code}' message='{message}'")
|
|
89
|
-
self.
|
|
89
|
+
self._disconnected.set()
|
|
90
90
|
self._connected.clear()
|
|
91
91
|
|
|
92
92
|
def _on_frame(self, frame: SoraAudioFrame):
|
|
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
|
{sora_sdk-2024.4.0.dev20 → sora_sdk-2024.4.0.dev22}/src/sora_sdk.egg-info/dependency_links.txt
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
|