sora-sdk 2025.2.0.dev0__tar.gz → 2025.2.0.dev1__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 (44) hide show
  1. {sora_sdk-2025.2.0.dev0/src/sora_sdk.egg-info → sora_sdk-2025.2.0.dev1}/PKG-INFO +1 -1
  2. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/pyproject.toml +1 -1
  3. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/src/sora_sdk/sora_sdk_ext.cpython-311-darwin.so +0 -0
  4. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1/src/sora_sdk.egg-info}/PKG-INFO +1 -1
  5. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/src/sora_sdk.egg-info/SOURCES.txt +0 -1
  6. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_apple_video_toolbox.py +5 -10
  7. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_authz_simulcast.py +8 -3
  8. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_openh264.py +7 -0
  9. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_sora_disconnect.py +0 -12
  10. sora_sdk-2025.2.0.dev0/tests/test_memory_leak.py +0 -25
  11. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/LICENSE +0 -0
  12. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/MANIFEST.in +0 -0
  13. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/NOTICE.md +0 -0
  14. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/README.md +0 -0
  15. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/buildbase.py +0 -0
  16. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/pypath.py +0 -0
  17. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/run.py +0 -0
  18. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/setup.cfg +0 -0
  19. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/setup.py +0 -0
  20. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/src/sora_sdk/__init__.py +0 -0
  21. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/src/sora_sdk/py.typed +0 -0
  22. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/src/sora_sdk/sora_sdk_ext.pyi +0 -0
  23. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/src/sora_sdk.egg-info/dependency_links.txt +0 -0
  24. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/src/sora_sdk.egg-info/top_level.txt +0 -0
  25. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_amd_amf.py +0 -0
  26. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_authz.py +0 -0
  27. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_ca_cert.py +0 -0
  28. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_capability.py +0 -0
  29. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_degradation_preference.py +0 -0
  30. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_encoded_transform.py +0 -0
  31. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_intel_vpl.py +0 -0
  32. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_messaging.py +0 -0
  33. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_messaging_header.py +0 -0
  34. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_nvidia_video_codec_sdk.py +0 -0
  35. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_opus.py +0 -0
  36. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_re_offer_re_answer_sdp.py +0 -0
  37. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_sendonly_recvonly.py +0 -0
  38. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_signaling.py +0 -0
  39. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_signaling_message.py +0 -0
  40. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_signaling_notify.py +0 -0
  41. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_simulcast.py +0 -0
  42. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_type_disconnect.py +0 -0
  43. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_type_switched.py +0 -0
  44. {sora_sdk-2025.2.0.dev0 → sora_sdk-2025.2.0.dev1}/tests/test_vad.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sora_sdk
3
- Version: 2025.2.0.dev0
3
+ Version: 2025.2.0.dev1
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>
@@ -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 = "2025.2.0.dev0"
4
+ version = "2025.2.0.dev1"
5
5
  description = "WebRTC SFU Sora Python SDK"
6
6
  readme = "README.md"
7
7
  license = { file = "LICENSE" }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: sora_sdk
3
- Version: 2025.2.0.dev0
3
+ Version: 2025.2.0.dev1
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>
@@ -24,7 +24,6 @@ tests/test_capability.py
24
24
  tests/test_degradation_preference.py
25
25
  tests/test_encoded_transform.py
26
26
  tests/test_intel_vpl.py
27
- tests/test_memory_leak.py
28
27
  tests/test_messaging.py
29
28
  tests/test_messaging_header.py
30
29
  tests/test_nvidia_video_codec_sdk.py
@@ -286,19 +286,19 @@ def test_apple_video_toolbox_simulcast_authz_scale_resolution_to(
286
286
  {
287
287
  "rid": "r0",
288
288
  "active": True,
289
- "scaleResolutionDownTo": {"maxWidth": 320, "maxHeight": 180},
289
+ "scaleResolutionDownTo": {"maxWidth": video_width, "maxHeight": video_height},
290
290
  "scalabilityMode": "L1T1",
291
291
  },
292
292
  {
293
293
  "rid": "r1",
294
294
  "active": True,
295
- "scaleResolutionDownTo": {"maxWidth": 320, "maxHeight": 180},
295
+ "scaleResolutionDownTo": {"maxWidth": video_width, "maxHeight": video_height},
296
296
  "scalabilityMode": "L1T1",
297
297
  },
298
298
  {
299
299
  "rid": "r2",
300
300
  "active": True,
301
- "scaleResolutionDownTo": {"maxWidth": 320, "maxHeight": 180},
301
+ "scaleResolutionDownTo": {"maxWidth": video_width, "maxHeight": video_height},
302
302
  "scalabilityMode": "L1T1",
303
303
  },
304
304
  ]
@@ -417,12 +417,8 @@ def test_apple_video_toolbox_simulcast_authz_scale_resolution_to(
417
417
  assert s["frameWidth"] == 320
418
418
  assert s["frameHeight"] == 176
419
419
 
420
- # FIXME:これは libwebrtc 側の挙動を制御できず L1T2 になってしまう
421
- scalability_mode = None
422
- # FIXME: scalabilityMode がない場合がある
423
- if "scalabilityMode" in s:
424
- scalability_mode = s["scalabilityMode"]
425
- assert s["scalabilityMode"] == "L1T2"
420
+ # Apple Video Toolbox の場合は scalabilityMode がない
421
+ assert "scalabilityMode" not in s
426
422
 
427
423
  # targetBitrate が指定したビットレートの 90% 以上、100% 以下に収まることを確認
428
424
  expected_bitrate = video_bit_rate * 1000
@@ -430,7 +426,6 @@ def test_apple_video_toolbox_simulcast_authz_scale_resolution_to(
430
426
  s["rid"],
431
427
  video_codec_type,
432
428
  s["encoderImplementation"],
433
- scalability_mode,
434
429
  expected_bitrate,
435
430
  s["targetBitrate"],
436
431
  s["frameWidth"],
@@ -165,6 +165,13 @@ def test_simulcast_authz_scale_resolution_to(
165
165
  assert "SimulcastEncoderAdapter" in s["encoderImplementation"]
166
166
  assert encoder_implementation in s["encoderImplementation"]
167
167
 
168
+ if (
169
+ s["qualityLimitationReason"] != "none"
170
+ and "frameWidth" not in s
171
+ and "frameHeight" not in s
172
+ ):
173
+ pytest.skip(f"qualityLimitationReason: {s['qualityLimitationReason']}")
174
+
168
175
  assert s["keyFramesEncoded"] > 0
169
176
  assert s["bytesSent"] > 500
170
177
  assert s["packetsSent"] > 10
@@ -172,12 +179,10 @@ def test_simulcast_authz_scale_resolution_to(
172
179
  assert s["frameWidth"] == 640
173
180
  assert s["frameHeight"] == 352
174
181
 
175
- # FIXME:これは libwebrtc 側の挙動を制御できず L1T2 になってしまう
176
182
  scalability_mode = None
177
- # FIXME: scalabilityMode がない場合がある
178
183
  if "scalabilityMode" in s:
184
+ assert s["scalabilityMode"] == "L1T1"
179
185
  scalability_mode = s["scalabilityMode"]
180
- assert s["scalabilityMode"] == "L1T2"
181
186
 
182
187
  # targetBitrate が指定したビットレートの 90% 以上、100% 以下に収まることを確認
183
188
  expected_bitrate = video_bit_rate * 1000
@@ -258,12 +258,19 @@ def test_openh264_simulcast(
258
258
 
259
259
  assert s["bytesSent"] > 500
260
260
  assert s["packetsSent"] > 20
261
+
262
+ scalability_mode = None
263
+ if "scalabilityMode" in s:
264
+ assert s["scalabilityMode"] == "L1T1"
265
+ scalability_mode = s["scalabilityMode"]
266
+
261
267
  # targetBitrate が指定したビットレートの 90% 以上、100% 以下に収まることを確認
262
268
  expected_bitrate = video_bit_rate * 1000
263
269
  print(
264
270
  s["rid"],
265
271
  video_codec_type,
266
272
  expected_implementation,
273
+ scalability_mode,
267
274
  expected_bitrate,
268
275
  s["targetBitrate"],
269
276
  s["frameWidth"],
@@ -1,20 +1,14 @@
1
- import os
2
1
  import sys
3
2
  import time
4
3
  import uuid
5
4
 
6
5
  import jwt
7
- import pytest
8
6
  from api import disconnect_connection_api
9
7
  from client import SoraClient, SoraRole
10
8
 
11
9
  from sora_sdk import SoraSignalingErrorCode
12
10
 
13
11
 
14
- @pytest.mark.skipif(
15
- os.getenv("CI") == "true" and sys.platform != "linux",
16
- reason="CI では linux でのみ実行する",
17
- )
18
12
  def test_websocket_signaling_only_disconnect_api(setup):
19
13
  signaling_urls = setup.get("signaling_urls")
20
14
  channel_id_prefix = setup.get("channel_id_prefix")
@@ -88,9 +82,6 @@ def test_websocket_signaling_only_lifetime_expired(setup):
88
82
  assert conn.ws_close_reason == "LIFETIME-EXPIRED"
89
83
 
90
84
 
91
- @pytest.mark.skipif(
92
- os.getenv("CI") == "true" and sys.platform != "linux", reason="linux でのみ実行する"
93
- )
94
85
  def test_websocket_datachannel_signaling_disconnect_api(setup):
95
86
  signaling_urls = setup.get("signaling_urls")
96
87
  channel_id_prefix = setup.get("channel_id_prefix")
@@ -164,9 +155,6 @@ def test_websocket_datachannel_signaling_lifetime_expired(setup):
164
155
  assert conn.ws_close_reason == "LIFETIME-EXPIRED"
165
156
 
166
157
 
167
- @pytest.mark.skipif(
168
- os.getenv("CI") == "true" and sys.platform != "linux", reason="linux でのみ実行する"
169
- )
170
158
  def test_datachannel_only_signaling_disconnect_api(setup):
171
159
  signaling_urls = setup.get("signaling_urls")
172
160
  channel_id_prefix = setup.get("channel_id_prefix")
@@ -1,25 +0,0 @@
1
- import sys
2
- import time
3
- import uuid
4
-
5
- from client import SoraClient, SoraRole
6
-
7
-
8
- def test_memory_leak(setup):
9
- signaling_urls = setup.get("signaling_urls")
10
- channel_id_prefix = setup.get("channel_id_prefix")
11
- metadata = setup.get("metadata")
12
-
13
- channel_id = f"{channel_id_prefix}_{__name__}_{sys._getframe().f_code.co_name}_{uuid.uuid4()}"
14
-
15
- with SoraClient(
16
- signaling_urls,
17
- SoraRole.SENDONLY,
18
- channel_id,
19
- audio=True,
20
- video=True,
21
- metadata=metadata,
22
- ) as sendonly:
23
- time.sleep(5)
24
-
25
- sendonly.disconnect()