sora-sdk 2025.2.3__tar.gz → 2025.3.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.

Potentially problematic release.


This version of sora-sdk might be problematic. Click here for more details.

Files changed (44) hide show
  1. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/MANIFEST.in +1 -0
  2. {sora_sdk-2025.2.3/src/sora_sdk.egg-info → sora_sdk-2025.3.0.dev1}/PKG-INFO +1 -1
  3. sora_sdk-2025.3.0.dev1/VERSION +1 -0
  4. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/pyproject.toml +1 -1
  5. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/run.py +3 -1
  6. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/setup.py +8 -0
  7. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/src/sora_sdk/sora_sdk_ext.cpython-311-darwin.so +0 -0
  8. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/src/sora_sdk/sora_sdk_ext.pyi +1 -1
  9. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1/src/sora_sdk.egg-info}/PKG-INFO +1 -1
  10. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/src/sora_sdk.egg-info/SOURCES.txt +1 -0
  11. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_capability.py +0 -24
  12. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_openh264.py +45 -0
  13. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_openh264_simulcast.py +13 -0
  14. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/LICENSE +0 -0
  15. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/README.md +0 -0
  16. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/buildbase.py +0 -0
  17. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/pypath.py +0 -0
  18. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/setup.cfg +0 -0
  19. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/src/sora_sdk/__init__.py +0 -0
  20. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/src/sora_sdk/py.typed +0 -0
  21. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/src/sora_sdk.egg-info/dependency_links.txt +0 -0
  22. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/src/sora_sdk.egg-info/top_level.txt +0 -0
  23. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_amd_amf.py +0 -0
  24. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_apple_video_toolbox.py +0 -0
  25. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_authz.py +0 -0
  26. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_authz_simulcast.py +0 -0
  27. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_ca_cert.py +0 -0
  28. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_degradation_preference.py +0 -0
  29. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_encoded_transform.py +0 -0
  30. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_intel_vpl.py +0 -0
  31. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_messaging.py +0 -0
  32. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_messaging_header.py +0 -0
  33. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_nvidia_video_codec_sdk.py +0 -0
  34. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_opus.py +0 -0
  35. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_re_offer_re_answer_sdp.py +0 -0
  36. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_sendonly_recvonly.py +0 -0
  37. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_signaling.py +0 -0
  38. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_signaling_message.py +0 -0
  39. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_signaling_notify.py +0 -0
  40. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_simulcast.py +0 -0
  41. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_sora_disconnect.py +0 -0
  42. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_type_disconnect.py +0 -0
  43. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_type_switched.py +0 -0
  44. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0.dev1}/tests/test_vad.py +0 -0
@@ -1,3 +1,4 @@
1
1
  include buildbase.py
2
2
  include run.py
3
3
  include pypath.py
4
+ include VERSION
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sora_sdk
3
- Version: 2025.2.3
3
+ Version: 2025.3.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>
@@ -0,0 +1 @@
1
+ 2025.3.0.dev1
@@ -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.3"
4
+ dynamic = ["version"]
5
5
  description = "WebRTC SFU Sora Python SDK"
6
6
  readme = "README.md"
7
7
  license = "Apache-2.0"
@@ -1,5 +1,6 @@
1
1
  import argparse
2
2
  import hashlib
3
+ import importlib.metadata
3
4
  import multiprocessing
4
5
  import os
5
6
  import shlex
@@ -46,7 +47,7 @@ def install_deps(
46
47
  local_sora_cpp_sdk_dir: Optional[str],
47
48
  local_sora_cpp_sdk_args: List[str],
48
49
  ):
49
- version = read_version_file("VERSION")
50
+ version = read_version_file("DEPS")
50
51
 
51
52
  # multistrap を使った sysroot の構築
52
53
  if (
@@ -244,6 +245,7 @@ def main():
244
245
  cmake_args = []
245
246
  cmake_args.append(f"-DCMAKE_BUILD_TYPE={configuration}")
246
247
  cmake_args.append(f"-DTARGET_OS={platform.target.os}")
248
+ cmake_args.append(f"-DSORA_PYTHON_SDK_VERSION={importlib.metadata.version('sora-sdk')}")
247
249
  cmake_args.append(f"-DBOOST_ROOT={cmake_path(sora_info.boost_install_dir)}")
248
250
  cmake_args.append(f"-DWEBRTC_INCLUDE_DIR={cmake_path(webrtc_info.webrtc_include_dir)}")
249
251
  cmake_args.append(f"-DWEBRTC_LIBRARY_DIR={cmake_path(webrtc_info.webrtc_library_dir)}")
@@ -13,6 +13,13 @@ from buildbase import PlatformTarget, cd, get_build_platform # noqa: E402
13
13
 
14
14
 
15
15
  def run_setup(build_platform, target_platform):
16
+ with open(os.path.join(BASE_DIR, "VERSION"), "r") as f:
17
+ version = f.read().strip()
18
+
19
+ build_profile = os.getenv("BUILD_PROFILE")
20
+ if build_profile == "debug":
21
+ version += "+debug"
22
+
16
23
  plat = None
17
24
  if target_platform.os == "jetson":
18
25
  plat = "manylinux_2_17_aarch64.manylinux2014_aarch64"
@@ -35,6 +42,7 @@ def run_setup(build_platform, target_platform):
35
42
  return impl, impl, plat if plat is not None else plat2
36
43
 
37
44
  setup(
45
+ version=version,
38
46
  url="https://github.com/shiguredo/sora-python-sdk",
39
47
  packages=["sora_sdk"],
40
48
  package_dir={"": "src"},
@@ -485,7 +485,7 @@ def create_video_codec_preference_from_implementation(arg0: SoraVideoCodecCapabi
485
485
  class Sora:
486
486
  def __init__(self, openh264: str | None = None, video_codec_preference: SoraVideoCodecPreference | None = None) -> None: ...
487
487
 
488
- def create_connection(self, signaling_urls: list[str], role: str, channel_id: str, client_id: Optional[str] = None, bundle_id: Optional[str] = None, metadata: Optional[dict] = None, signaling_notify_metadata: Optional[dict] = None, audio_source: Optional[SoraTrackInterface] = None, video_source: Optional[SoraTrackInterface] = None, audio_frame_transformer: Optional[SoraAudioFrameTransformer] = None, video_frame_transformer: Optional[SoraVideoFrameTransformer] = None, audio: Optional[bool] = None, video: Optional[bool] = None, audio_codec_type: Optional[str] = None, video_codec_type: Optional[str] = None, video_bit_rate: Optional[int] = None, audio_bit_rate: Optional[int] = None, video_vp9_params: Optional[dict] = None, video_av1_params: Optional[dict] = None, video_h264_params: Optional[dict] = None, audio_opus_params: Optional[dict] = None, simulcast: Optional[bool] = None, spotlight: Optional[bool] = None, spotlight_number: Optional[int] = None, simulcast_rid: Optional[str] = None, spotlight_focus_rid: Optional[str] = None, spotlight_unfocus_rid: Optional[str] = None, forwarding_filter: Optional[dict] = None, forwarding_filters: Optional[list[dict]] = None, data_channels: Optional[list[dict]] = None, data_channel_signaling: Optional[bool] = None, ignore_disconnect_websocket: Optional[bool] = None, data_channel_signaling_timeout: Optional[int] = None, disconnect_wait_timeout: Optional[int] = None, websocket_close_timeout: Optional[int] = None, websocket_connection_timeout: Optional[int] = None, audio_streaming_language_code: Optional[str] = None, insecure: Optional[bool] = None, client_cert: Optional[bytes] = None, client_key: Optional[bytes] = None, ca_cert: Optional[bytes] = None, proxy_url: Optional[str] = None, proxy_username: Optional[str] = None, proxy_password: Optional[str] = None, proxy_agent: Optional[str] = None, degradation_preference: Optional[SoraDegradationPreference] = None) -> SoraConnection: ...
488
+ def create_connection(self, signaling_urls: list[str], role: str, channel_id: str, client_id: Optional[str] = None, bundle_id: Optional[str] = None, metadata: Optional[dict] = None, signaling_notify_metadata: Optional[dict] = None, audio_source: Optional[SoraTrackInterface] = None, video_source: Optional[SoraTrackInterface] = None, audio_frame_transformer: Optional[SoraAudioFrameTransformer] = None, video_frame_transformer: Optional[SoraVideoFrameTransformer] = None, audio: Optional[bool] = None, video: Optional[bool] = None, audio_codec_type: Optional[str] = None, video_codec_type: Optional[str] = None, video_bit_rate: Optional[int] = None, audio_bit_rate: Optional[int] = None, video_vp9_params: Optional[dict] = None, video_av1_params: Optional[dict] = None, video_h264_params: Optional[dict] = None, audio_opus_params: Optional[dict] = None, simulcast: Optional[bool] = None, spotlight: Optional[bool] = None, spotlight_number: Optional[int] = None, simulcast_rid: Optional[str] = None, spotlight_focus_rid: Optional[str] = None, spotlight_unfocus_rid: Optional[str] = None, forwarding_filter: Optional[dict] = None, forwarding_filters: Optional[list[dict]] = None, data_channels: Optional[list[dict]] = None, data_channel_signaling: Optional[bool] = None, ignore_disconnect_websocket: Optional[bool] = None, data_channel_signaling_timeout: Optional[int] = None, disconnect_wait_timeout: Optional[int] = None, websocket_close_timeout: Optional[int] = None, websocket_connection_timeout: Optional[int] = None, audio_streaming_language_code: Optional[str] = None, insecure: Optional[bool] = None, client_cert: Optional[bytes] = None, client_key: Optional[bytes] = None, ca_cert: Optional[bytes] = None, proxy_url: Optional[str] = None, proxy_username: Optional[str] = None, proxy_password: Optional[str] = None, proxy_agent: Optional[str] = None, degradation_preference: Optional[SoraDegradationPreference] = None, user_agent: Optional[str] = None) -> SoraConnection: ...
489
489
 
490
490
  def create_audio_source(self, channels: int, sample_rate: int) -> SoraAudioSource: ...
491
491
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sora_sdk
3
- Version: 2025.2.3
3
+ Version: 2025.3.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,6 +1,7 @@
1
1
  LICENSE
2
2
  MANIFEST.in
3
3
  README.md
4
+ VERSION
4
5
  buildbase.py
5
6
  pypath.py
6
7
  pyproject.toml
@@ -9,33 +9,9 @@ from sora_sdk import (
9
9
  SoraVideoCodecImplementation,
10
10
  SoraVideoCodecPreference,
11
11
  SoraVideoCodecType,
12
- create_video_codec_preference_from_implementation,
13
- get_video_codec_capability,
14
12
  )
15
13
 
16
14
 
17
- def test_capability(setup):
18
- openh264_path = setup.get("openh264_path")
19
- capability = get_video_codec_capability(openh264=openh264_path)
20
- has_internal = False
21
- has_openh264 = False
22
- for engine in capability.engines:
23
- if engine.name == SoraVideoCodecImplementation.INTERNAL:
24
- has_internal = True
25
- if engine.name == SoraVideoCodecImplementation.CISCO_OPENH264:
26
- has_openh264 = True
27
- assert has_internal and has_openh264
28
-
29
-
30
- def test_preference(setup):
31
- openh264_path = setup.get("openh264_path")
32
- capability = get_video_codec_capability(openh264=openh264_path)
33
- preference = create_video_codec_preference_from_implementation(
34
- capability, SoraVideoCodecImplementation.CISCO_OPENH264
35
- )
36
- assert preference.has_implementation(SoraVideoCodecImplementation.CISCO_OPENH264)
37
-
38
-
39
15
  def test_preference_invalid(setup):
40
16
  signaling_urls = setup.get("signaling_urls")
41
17
  channel_id_prefix = setup.get("channel_id_prefix")
@@ -1,7 +1,9 @@
1
+ import os
1
2
  import sys
2
3
  import time
3
4
  import uuid
4
5
 
6
+ import pytest
5
7
  from client import SoraClient, SoraRole
6
8
 
7
9
  from sora_sdk import (
@@ -9,10 +11,45 @@ from sora_sdk import (
9
11
  SoraVideoCodecImplementation,
10
12
  SoraVideoCodecPreference,
11
13
  SoraVideoCodecType,
14
+ create_video_codec_preference_from_implementation,
12
15
  get_video_codec_capability,
13
16
  )
14
17
 
15
18
 
19
+ @pytest.mark.skipif(
20
+ os.environ.get("OPENH264_VERSION") is None,
21
+ reason="OpenH264 のときだけ実行する",
22
+ )
23
+ def test_capability(setup):
24
+ openh264_path = setup.get("openh264_path")
25
+ capability = get_video_codec_capability(openh264=openh264_path)
26
+ has_internal = False
27
+ has_openh264 = False
28
+ for engine in capability.engines:
29
+ if engine.name == SoraVideoCodecImplementation.INTERNAL:
30
+ has_internal = True
31
+ if engine.name == SoraVideoCodecImplementation.CISCO_OPENH264:
32
+ has_openh264 = True
33
+ assert has_internal and has_openh264
34
+
35
+
36
+ @pytest.mark.skipif(
37
+ os.environ.get("OPENH264_VERSION") is None,
38
+ reason="OpenH264 のときだけ実行する",
39
+ )
40
+ def test_preference(setup):
41
+ openh264_path = setup.get("openh264_path")
42
+ capability = get_video_codec_capability(openh264=openh264_path)
43
+ preference = create_video_codec_preference_from_implementation(
44
+ capability, SoraVideoCodecImplementation.CISCO_OPENH264
45
+ )
46
+ assert preference.has_implementation(SoraVideoCodecImplementation.CISCO_OPENH264)
47
+
48
+
49
+ @pytest.mark.skipif(
50
+ os.environ.get("OPENH264_VERSION") is None,
51
+ reason="OpenH264 のときだけ実行する",
52
+ )
16
53
  def test_openh264_get_codec_capability(setup):
17
54
  openh264_path = setup.get("openh264_path")
18
55
  capability = get_video_codec_capability(openh264_path)
@@ -54,6 +91,10 @@ def test_openh264_get_codec_capability(setup):
54
91
  )
55
92
 
56
93
 
94
+ @pytest.mark.skipif(
95
+ os.environ.get("OPENH264_VERSION") is None,
96
+ reason="OpenH264 のときだけ実行する",
97
+ )
57
98
  def test_openh264_video_codec_preference(setup):
58
99
  openh264_path = setup.get("openh264_path")
59
100
  Sora(
@@ -86,6 +127,10 @@ def test_openh264_video_codec_preference(setup):
86
127
  )
87
128
 
88
129
 
130
+ @pytest.mark.skipif(
131
+ os.environ.get("OPENH264_VERSION") is None,
132
+ reason="OpenH264 のときだけ実行する",
133
+ )
89
134
  def test_openh264_sendonly_recvonly(setup):
90
135
  signaling_urls = setup.get("signaling_urls")
91
136
  channel_id_prefix = setup.get("channel_id_prefix")
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import sys
2
3
  import time
3
4
  import uuid
@@ -14,6 +15,10 @@ from sora_sdk import (
14
15
  )
15
16
 
16
17
 
18
+ @pytest.mark.skipif(
19
+ os.environ.get("OPENH264_VERSION") is None,
20
+ reason="OpenH264 のときだけ実行する",
21
+ )
17
22
  @pytest.mark.parametrize(
18
23
  (
19
24
  "video_codec_type",
@@ -148,6 +153,10 @@ def test_openh264_simulcast(
148
153
  )
149
154
 
150
155
 
156
+ @pytest.mark.skipif(
157
+ os.environ.get("OPENH264_VERSION") is None,
158
+ reason="OpenH264 のときだけ実行する",
159
+ )
151
160
  @pytest.mark.parametrize(
152
161
  (
153
162
  "video_codec_type",
@@ -293,6 +302,10 @@ def test_openh264_authz_simulcast_r2_active_false(
293
302
  )
294
303
 
295
304
 
305
+ @pytest.mark.skipif(
306
+ os.environ.get("OPENH264_VERSION") is None,
307
+ reason="OpenH264 のときだけ実行する",
308
+ )
296
309
  @pytest.mark.parametrize(
297
310
  (
298
311
  "video_codec_type",
File without changes
File without changes
File without changes
File without changes