sora-sdk 2025.2.3__tar.gz → 2025.3.0__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 (46) hide show
  1. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/MANIFEST.in +1 -0
  2. {sora_sdk-2025.2.3/src/sora_sdk.egg-info → sora_sdk-2025.3.0}/PKG-INFO +8 -13
  3. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/README.md +7 -12
  4. sora_sdk-2025.3.0/VERSION +1 -0
  5. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/pyproject.toml +5 -7
  6. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/run.py +14 -15
  7. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/setup.py +16 -3
  8. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/src/sora_sdk/__init__.py +19 -0
  9. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/src/sora_sdk/sora_sdk_ext.cpython-311-darwin.so +0 -0
  10. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/src/sora_sdk/sora_sdk_ext.pyi +7 -1
  11. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0/src/sora_sdk.egg-info}/PKG-INFO +8 -13
  12. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/src/sora_sdk.egg-info/SOURCES.txt +3 -1
  13. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_amd_amf.py +6 -26
  14. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_apple_video_toolbox.py +17 -62
  15. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_authz.py +15 -51
  16. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_authz_simulcast.py +21 -70
  17. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_ca_cert.py +4 -22
  18. sora_sdk-2025.3.0/tests/test_capability.py +52 -0
  19. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_degradation_preference.py +8 -41
  20. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_encoded_transform.py +46 -33
  21. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_intel_vpl.py +18 -73
  22. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_messaging.py +3 -15
  23. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_messaging_header.py +3 -15
  24. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_nvidia_video_codec_sdk.py +9 -39
  25. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_openh264.py +51 -25
  26. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_openh264_simulcast.py +33 -69
  27. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_opus.py +2 -12
  28. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_re_offer_re_answer_sdp.py +5 -22
  29. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_sendonly_recvonly.py +6 -28
  30. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_signaling.py +4 -22
  31. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_signaling_message.py +8 -34
  32. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_signaling_notify.py +3 -16
  33. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_simulcast.py +2 -11
  34. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_sora_disconnect.py +36 -108
  35. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_type_disconnect.py +8 -32
  36. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_type_switched.py +9 -41
  37. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/tests/test_vad.py +27 -19
  38. sora_sdk-2025.3.0/tests/test_version.py +17 -0
  39. sora_sdk-2025.2.3/tests/test_capability.py +0 -94
  40. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/LICENSE +0 -0
  41. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/buildbase.py +0 -0
  42. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/pypath.py +0 -0
  43. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/setup.cfg +0 -0
  44. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/src/sora_sdk/py.typed +0 -0
  45. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/src/sora_sdk.egg-info/dependency_links.txt +0 -0
  46. {sora_sdk-2025.2.3 → sora_sdk-2025.3.0}/src/sora_sdk.egg-info/top_level.txt +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
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>
@@ -93,20 +93,12 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
93
93
 
94
94
  ## sora_sdk パッケージの追加
95
95
 
96
- ### uv
97
-
98
- [uv](https://docs.astral.sh/uv/)
96
+ [uv](https://docs.astral.sh/uv/) の利用を推奨します。
99
97
 
100
98
  ```bash
101
99
  uv add sora_sdk
102
100
  ```
103
101
 
104
- ### pip
105
-
106
- ```bash
107
- pip install sora_sdk
108
- ```
109
-
110
102
  ### NVIDIA Jetson 向けパッケージ
111
103
 
112
104
  PyPI 経由ではインストールできません。
@@ -128,13 +120,17 @@ PyPI 経由ではインストールできません。
128
120
  - Ubuntu 24.04 LTS x86_64
129
121
  - Ubuntu 24.04 LTS arm64
130
122
  - Ubuntu 22.04 LTS x86_64
131
- - Ubuntu 22.04 LTS arm64 (NVIDIA Jetson JetPack SDK 6)
132
- - PyPI からではなくパッケージファイルを利用してください
123
+ - Ubuntu 22.04 LTS arm64
133
124
  - macOS Sequoia 15 arm64
134
125
  - macOS Ventura 14 arm64
135
126
  - Windows 11 x86_64
136
127
  - Windows Server 2025 x86_64
137
128
 
129
+ ### Jetson 向け
130
+
131
+ - Ubuntu 22.04 LTS arm64 (NVIDIA Jetson JetPack SDK 6)
132
+ - PyPI からではなくパッケージファイルを利用してください
133
+
138
134
  ### macOS の対応バージョン
139
135
 
140
136
  直近の 2 バージョンをサポートします。
@@ -157,7 +153,6 @@ PyPI 経由ではインストールできません。
157
153
  ### 優先実装が可能な機能一覧
158
154
 
159
155
  - Windows 11 arm64
160
- - Ubuntu 22.04 arm64
161
156
  - Ubuntu 22.04 arm64 (NVIDIA Jetson JetPack SDK 6.1)
162
157
  - Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack SDK 5)
163
158
 
@@ -73,20 +73,12 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
73
73
 
74
74
  ## sora_sdk パッケージの追加
75
75
 
76
- ### uv
77
-
78
- [uv](https://docs.astral.sh/uv/)
76
+ [uv](https://docs.astral.sh/uv/) の利用を推奨します。
79
77
 
80
78
  ```bash
81
79
  uv add sora_sdk
82
80
  ```
83
81
 
84
- ### pip
85
-
86
- ```bash
87
- pip install sora_sdk
88
- ```
89
-
90
82
  ### NVIDIA Jetson 向けパッケージ
91
83
 
92
84
  PyPI 経由ではインストールできません。
@@ -108,13 +100,17 @@ PyPI 経由ではインストールできません。
108
100
  - Ubuntu 24.04 LTS x86_64
109
101
  - Ubuntu 24.04 LTS arm64
110
102
  - Ubuntu 22.04 LTS x86_64
111
- - Ubuntu 22.04 LTS arm64 (NVIDIA Jetson JetPack SDK 6)
112
- - PyPI からではなくパッケージファイルを利用してください
103
+ - Ubuntu 22.04 LTS arm64
113
104
  - macOS Sequoia 15 arm64
114
105
  - macOS Ventura 14 arm64
115
106
  - Windows 11 x86_64
116
107
  - Windows Server 2025 x86_64
117
108
 
109
+ ### Jetson 向け
110
+
111
+ - Ubuntu 22.04 LTS arm64 (NVIDIA Jetson JetPack SDK 6)
112
+ - PyPI からではなくパッケージファイルを利用してください
113
+
118
114
  ### macOS の対応バージョン
119
115
 
120
116
  直近の 2 バージョンをサポートします。
@@ -137,7 +133,6 @@ PyPI 経由ではインストールできません。
137
133
  ### 優先実装が可能な機能一覧
138
134
 
139
135
  - Windows 11 arm64
140
- - Ubuntu 22.04 arm64
141
136
  - Ubuntu 22.04 arm64 (NVIDIA Jetson JetPack SDK 6.1)
142
137
  - Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack SDK 5)
143
138
 
@@ -0,0 +1 @@
1
+ 2025.3.0
@@ -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"
@@ -20,26 +20,24 @@ Documentation = "https://sora-python-sdk.shiguredo.jp"
20
20
  Discord = "https://discord.gg/shiguredo"
21
21
 
22
22
  [build-system]
23
- requires = ["setuptools==80.0", "wheel==0.45.1"]
23
+ requires = ["setuptools==80.9", "wheel==0.45.1"]
24
24
  build-backend = "setuptools.build_meta"
25
25
 
26
26
  [tool.uv]
27
27
  python-preference = "only-managed"
28
28
  dev-dependencies = [
29
29
  "nanobind==2.7.0",
30
- "setuptools==80.0",
30
+ "setuptools==80.9",
31
31
  "build==1.2.2.post1",
32
32
  "wheel==0.45.1",
33
- "typing-extensions",
34
- "python-dotenv",
35
33
  "numpy",
36
34
  "httpx",
37
35
  "pytest",
38
36
  "ruff",
39
- "mypy",
40
37
  "pyjwt",
41
38
  "pytest-repeat",
42
- "psutil",
39
+ "ty",
40
+ "pydantic-settings",
43
41
  ]
44
42
 
45
43
  [tool.ruff]
@@ -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
@@ -30,7 +31,7 @@ from buildbase import (
30
31
  mkdir_p,
31
32
  read_version_file,
32
33
  )
33
- from pypath import get_python_include_dir, get_python_library, get_python_version
34
+ from pypath import get_python_include_dir, get_python_version
34
35
 
35
36
  BASE_DIR = os.path.abspath(os.path.dirname(__file__))
36
37
 
@@ -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 (
@@ -173,6 +174,7 @@ AVAILABLE_TARGETS = [
173
174
  "macos_arm64",
174
175
  "ubuntu-22.04_x86_64",
175
176
  "ubuntu-24.04_x86_64",
177
+ "ubuntu-22.04_armv8",
176
178
  "ubuntu-24.04_armv8",
177
179
  "ubuntu-22.04_armv8_jetson",
178
180
  ]
@@ -199,6 +201,8 @@ def main():
199
201
  platform = Platform("ubuntu", "22.04", "x86_64")
200
202
  elif args.target == "ubuntu-24.04_x86_64":
201
203
  platform = Platform("ubuntu", "24.04", "x86_64")
204
+ elif args.target == "ubuntu-22.04_armv8":
205
+ platform = Platform("ubuntu", "22.04", "armv8")
202
206
  elif args.target == "ubuntu-24.04_armv8":
203
207
  platform = Platform("ubuntu", "24.04", "armv8")
204
208
  elif args.target == "ubuntu-22.04_armv8_jetson":
@@ -244,19 +248,15 @@ def main():
244
248
  cmake_args = []
245
249
  cmake_args.append(f"-DCMAKE_BUILD_TYPE={configuration}")
246
250
  cmake_args.append(f"-DTARGET_OS={platform.target.os}")
251
+ cmake_args.append(f"-DSORA_PYTHON_SDK_VERSION={importlib.metadata.version('sora-sdk')}")
247
252
  cmake_args.append(f"-DBOOST_ROOT={cmake_path(sora_info.boost_install_dir)}")
248
253
  cmake_args.append(f"-DWEBRTC_INCLUDE_DIR={cmake_path(webrtc_info.webrtc_include_dir)}")
249
254
  cmake_args.append(f"-DWEBRTC_LIBRARY_DIR={cmake_path(webrtc_info.webrtc_library_dir)}")
250
255
  cmake_args.append(f"-DSORA_DIR={cmake_path(sora_info.sora_install_dir)}")
251
256
  cmake_args.append(f"-DOPENH264_DIR={cmake_path(os.path.join(install_dir, 'openh264'))}")
252
257
  python_version = get_python_version()
253
- cmake_args.append(f"-DPYTHON_VERSION_STRING={python_version}")
254
- cmake_args.append(f"-DPYTHON_INCLUDE_DIR={get_python_include_dir(python_version)}")
255
- cmake_args.append(f"-DPYTHON_EXECUTABLE={cmake_path(sys.executable)}")
256
- python_library = get_python_library(python_version)
257
- if python_library is None:
258
- raise Exception("Failed to get Python library")
259
- cmake_args.append(f"-DPYTHON_LIBRARY={cmake_path(python_library)}")
258
+ cmake_args.append(f"-DPython_INCLUDE_DIR={get_python_include_dir(python_version)}")
259
+ cmake_args.append(f"-DPython_EXECUTABLE={cmake_path(sys.executable)}")
260
260
 
261
261
  if platform.target.os == "ubuntu":
262
262
  # クロスコンパイルの設定。
@@ -265,8 +265,8 @@ def main():
265
265
  if platform.build.arch == "armv8":
266
266
  # ビルド環境が armv8 の場合は libwebrtc のバイナリが使えないのでローカルの clang を利用する
267
267
  cmake_args += [
268
- "-DCMAKE_C_COMPILER=clang-18",
269
- "-DCMAKE_CXX_COMPILER=clang++-18",
268
+ "-DCMAKE_C_COMPILER=clang-19",
269
+ "-DCMAKE_CXX_COMPILER=clang++-19",
270
270
  ]
271
271
  else:
272
272
  cmake_args += [
@@ -280,7 +280,8 @@ def main():
280
280
 
281
281
  if platform.build.arch != platform.target.arch:
282
282
  sysroot = os.path.join(install_dir, "rootfs")
283
- nb_cmake_dir = cmdcap(["uv", "run", "python", "-m", "nanobind", "--cmake_dir"])
283
+ python_version = get_python_version()
284
+ python_version_short = ".".join(python_version.split(".")[:2])
284
285
  cmake_args += [
285
286
  "-DCMAKE_SYSTEM_NAME=Linux",
286
287
  "-DCMAKE_SYSTEM_PROCESSOR=aarch64",
@@ -291,10 +292,8 @@ def main():
291
292
  "-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH",
292
293
  "-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH",
293
294
  "-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH",
294
- f"-DPython_ROOT_DIR={cmake_path(os.path.join(sysroot, 'usr', 'include', 'python3.12'))}",
295
295
  f"-DCMAKE_SYSROOT={sysroot}",
296
- f"-DNB_CMAKE_DIR={nb_cmake_dir}",
297
- "-DNB_SUFFIX=.cpython-312-aarch64-linux-gnu.so",
296
+ f"-DNB_SUFFIX=.cpython-{python_version_short.replace('.', '')}-aarch64-linux-gnu.so",
298
297
  ]
299
298
  elif platform.target.os == "macos":
300
299
  sysroot = cmdcap(["xcrun", "--sdk", "macosx", "--show-sdk-path"])
@@ -13,16 +13,26 @@ 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"
19
26
  elif target_platform.os == "ubuntu" and target_platform.arch == "armv8":
20
- plat = "manylinux_2_17_aarch64.manylinux2014_aarch64"
27
+ if target_platform.osver == "22.04":
28
+ plat = "manylinux_2_31_aarch64"
29
+ if target_platform.osver == "24.04":
30
+ plat = "manylinux_2_35_aarch64"
21
31
  elif target_platform.os == "ubuntu" and target_platform.arch == "x86_64":
22
32
  if target_platform.osver == "22.04":
23
- plat = "manylinux_2_17_x86_64.manylinux2014_x86_64"
33
+ plat = "manylinux_2_31_x86_64"
24
34
  if target_platform.osver == "24.04":
25
- plat = "manylinux_2_17_x86_64.manylinux2014_x86_64"
35
+ plat = "manylinux_2_35_x86_64"
26
36
 
27
37
  class bdist_wheel(_bdist_wheel):
28
38
  def finalize_options(self):
@@ -35,6 +45,7 @@ def run_setup(build_platform, target_platform):
35
45
  return impl, impl, plat if plat is not None else plat2
36
46
 
37
47
  setup(
48
+ version=version,
38
49
  url="https://github.com/shiguredo/sora-python-sdk",
39
50
  packages=["sora_sdk"],
40
51
  package_dir={"": "src"},
@@ -54,6 +65,8 @@ def main():
54
65
  target = os.getenv("SORA_SDK_TARGET")
55
66
  if target is None:
56
67
  target_platform = build_platform
68
+ elif target == "ubuntu-22.04_armv8":
69
+ target_platform = PlatformTarget("ubuntu", "22.04", "armv8")
57
70
  elif target == "ubuntu-24.04_armv8":
58
71
  target_platform = PlatformTarget("ubuntu", "24.04", "armv8")
59
72
  elif target == "ubuntu-22.04_armv8_jetson":
@@ -1,5 +1,24 @@
1
1
  from .sora_sdk_ext import * # noqa: F401,F403
2
2
 
3
+ # インストールされたパッケージの場合は importlib.metadata から取得
4
+ # 開発環境の場合は VERSION ファイルから取得
5
+ try:
6
+ from importlib.metadata import version, PackageNotFoundError
7
+ try:
8
+ __version__ = version("sora_sdk")
9
+ except PackageNotFoundError:
10
+ # パッケージがインストールされていない場合(開発環境)
11
+ import os
12
+ _version_file = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "VERSION")
13
+ if os.path.exists(_version_file):
14
+ with open(_version_file, "r") as f:
15
+ __version__ = f.read().strip()
16
+ else:
17
+ __version__ = "unknown"
18
+ except ImportError:
19
+ # Python 3.8 以前の互換性のため
20
+ __version__ = "unknown"
21
+
3
22
  """
4
23
  sink はそれぞれ track が必要で参照を保持する必要がある
5
24
  しかしながら、 sink の C++ 側で shared_ptr として track を持つと、
@@ -226,6 +226,12 @@ class SoraConnection:
226
226
  @on_message.setter
227
227
  def on_message(self, arg: Callable[[str, bytes], None], /) -> None: ...
228
228
 
229
+ @property
230
+ def on_rpc(self) -> Callable[[bytes], None]: ...
231
+
232
+ @on_rpc.setter
233
+ def on_rpc(self, arg: Callable[[bytes], None], /) -> None: ...
234
+
229
235
  @property
230
236
  def on_switched(self) -> Callable[[str], None]: ...
231
237
 
@@ -485,7 +491,7 @@ def create_video_codec_preference_from_implementation(arg0: SoraVideoCodecCapabi
485
491
  class Sora:
486
492
  def __init__(self, openh264: str | None = None, video_codec_preference: SoraVideoCodecPreference | None = None) -> None: ...
487
493
 
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: ...
494
+ 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
495
 
490
496
  def create_audio_source(self, channels: int, sample_rate: int) -> SoraAudioSource: ...
491
497
 
@@ -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
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>
@@ -93,20 +93,12 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
93
93
 
94
94
  ## sora_sdk パッケージの追加
95
95
 
96
- ### uv
97
-
98
- [uv](https://docs.astral.sh/uv/)
96
+ [uv](https://docs.astral.sh/uv/) の利用を推奨します。
99
97
 
100
98
  ```bash
101
99
  uv add sora_sdk
102
100
  ```
103
101
 
104
- ### pip
105
-
106
- ```bash
107
- pip install sora_sdk
108
- ```
109
-
110
102
  ### NVIDIA Jetson 向けパッケージ
111
103
 
112
104
  PyPI 経由ではインストールできません。
@@ -128,13 +120,17 @@ PyPI 経由ではインストールできません。
128
120
  - Ubuntu 24.04 LTS x86_64
129
121
  - Ubuntu 24.04 LTS arm64
130
122
  - Ubuntu 22.04 LTS x86_64
131
- - Ubuntu 22.04 LTS arm64 (NVIDIA Jetson JetPack SDK 6)
132
- - PyPI からではなくパッケージファイルを利用してください
123
+ - Ubuntu 22.04 LTS arm64
133
124
  - macOS Sequoia 15 arm64
134
125
  - macOS Ventura 14 arm64
135
126
  - Windows 11 x86_64
136
127
  - Windows Server 2025 x86_64
137
128
 
129
+ ### Jetson 向け
130
+
131
+ - Ubuntu 22.04 LTS arm64 (NVIDIA Jetson JetPack SDK 6)
132
+ - PyPI からではなくパッケージファイルを利用してください
133
+
138
134
  ### macOS の対応バージョン
139
135
 
140
136
  直近の 2 バージョンをサポートします。
@@ -157,7 +153,6 @@ PyPI 経由ではインストールできません。
157
153
  ### 優先実装が可能な機能一覧
158
154
 
159
155
  - Windows 11 arm64
160
- - Ubuntu 22.04 arm64
161
156
  - Ubuntu 22.04 arm64 (NVIDIA Jetson JetPack SDK 6.1)
162
157
  - Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack SDK 5)
163
158
 
@@ -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
@@ -38,4 +39,5 @@ tests/test_simulcast.py
38
39
  tests/test_sora_disconnect.py
39
40
  tests/test_type_disconnect.py
40
41
  tests/test_type_switched.py
41
- tests/test_vad.py
42
+ tests/test_vad.py
43
+ tests/test_version.py
@@ -1,7 +1,5 @@
1
1
  import os
2
- import sys
3
2
  import time
4
- import uuid
5
3
 
6
4
  import pytest
7
5
  from client import (
@@ -21,7 +19,7 @@ from sora_sdk import (
21
19
 
22
20
 
23
21
  @pytest.mark.skipif(os.environ.get("AMD_AMF") is None, reason="AMD AMF でのみ実行する")
24
- def test_amd_amf_available(setup):
22
+ def test_amd_amf_available(settings):
25
23
  capability = get_video_codec_capability()
26
24
 
27
25
  amd_amf_available = False
@@ -68,26 +66,18 @@ def test_amd_amf_available(setup):
68
66
  "H265",
69
67
  ],
70
68
  )
71
- def test_amd_amf_sendonly_recvonly(setup, video_codec_type):
69
+ def test_amd_amf_sendonly_recvonly(settings, video_codec_type):
72
70
  if not is_codec_supported(video_codec_type, SoraVideoCodecImplementation.AMD_AMF):
73
71
  pytest.skip(
74
72
  f"このチップでは {video_codec_type} のエンコード/デコードの両方がサポートされていません"
75
73
  )
76
74
 
77
- signaling_urls = setup.get("signaling_urls")
78
- channel_id_prefix = setup.get("channel_id_prefix")
79
- metadata = setup.get("metadata")
80
-
81
- channel_id = f"{channel_id_prefix}_{__name__}_{sys._getframe().f_code.co_name}_{uuid.uuid4()}"
82
-
83
75
  sendonly = SoraClient(
84
- signaling_urls,
76
+ settings,
85
77
  SoraRole.SENDONLY,
86
- channel_id,
87
78
  audio=False,
88
79
  video=True,
89
80
  video_codec_type=video_codec_type,
90
- metadata=metadata,
91
81
  video_codec_preference=SoraVideoCodecPreference(
92
82
  codecs=[
93
83
  SoraVideoCodecPreference.Codec(
@@ -100,10 +90,8 @@ def test_amd_amf_sendonly_recvonly(setup, video_codec_type):
100
90
  sendonly.connect(fake_video=True)
101
91
 
102
92
  recvonly = SoraClient(
103
- signaling_urls,
93
+ settings,
104
94
  SoraRole.RECVONLY,
105
- channel_id,
106
- metadata=metadata,
107
95
  video_codec_preference=SoraVideoCodecPreference(
108
96
  codecs=[
109
97
  SoraVideoCodecPreference.Codec(
@@ -197,7 +185,7 @@ def test_amd_amf_sendonly_recvonly(setup, video_codec_type):
197
185
  ],
198
186
  )
199
187
  def test_amd_amf_simulcast(
200
- setup,
188
+ settings,
201
189
  video_codec_type,
202
190
  expected_implementation,
203
191
  video_width,
@@ -207,24 +195,16 @@ def test_amd_amf_simulcast(
207
195
  if not is_codec_supported(video_codec_type, SoraVideoCodecImplementation.AMD_AMF):
208
196
  pytest.skip(f"このチップでは {video_codec_type} のエンコードがサポートされていません")
209
197
 
210
- signaling_urls = setup.get("signaling_urls")
211
- channel_id_prefix = setup.get("channel_id_prefix")
212
- metadata = setup.get("metadata")
213
-
214
- channel_id = f"{channel_id_prefix}_{__name__}_{sys._getframe().f_code.co_name}_{uuid.uuid4()}"
215
-
216
198
  video_bit_rate = default_video_bit_rate(video_codec_type, video_width, video_height)
217
199
 
218
200
  sendonly = SoraClient(
219
- signaling_urls,
201
+ settings,
220
202
  SoraRole.SENDONLY,
221
- channel_id,
222
203
  simulcast=True,
223
204
  audio=False,
224
205
  video=True,
225
206
  video_codec_type=video_codec_type,
226
207
  video_bit_rate=video_bit_rate,
227
- metadata=metadata,
228
208
  video_width=video_width,
229
209
  video_height=video_height,
230
210
  video_codec_preference=SoraVideoCodecPreference(