sora-sdk 2024.4.0.dev44__tar.gz → 2025.1.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 (48) hide show
  1. {sora_sdk-2024.4.0.dev44/src/sora_sdk.egg-info → sora_sdk-2025.1.0}/PKG-INFO +31 -19
  2. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/README.md +27 -15
  3. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/buildbase.py +14 -4
  4. sora_sdk-2025.1.0/pyproject.toml +51 -0
  5. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/run.py +16 -5
  6. sora_sdk-2024.4.0.dev44/src/sora_sdk/sora_sdk_ext.cpython-310-darwin.so → sora_sdk-2025.1.0/src/sora_sdk/sora_sdk_ext.cpython-311-darwin.so +0 -0
  7. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/src/sora_sdk/sora_sdk_ext.pyi +143 -2
  8. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0/src/sora_sdk.egg-info}/PKG-INFO +31 -19
  9. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/src/sora_sdk.egg-info/SOURCES.txt +11 -2
  10. sora_sdk-2025.1.0/tests/test_amd_amf.py +310 -0
  11. sora_sdk-2025.1.0/tests/test_apple_video_toolbox.py +442 -0
  12. sora_sdk-2025.1.0/tests/test_authz.py +125 -0
  13. sora_sdk-2025.1.0/tests/test_authz_simulcast.py +197 -0
  14. sora_sdk-2025.1.0/tests/test_capability.py +94 -0
  15. sora_sdk-2025.1.0/tests/test_degradation_preference.py +240 -0
  16. sora_sdk-2025.1.0/tests/test_intel_vpl.py +658 -0
  17. sora_sdk-2025.1.0/tests/test_memory_leak.py +25 -0
  18. sora_sdk-2025.1.0/tests/test_nvidia_video_codec_sdk.py +409 -0
  19. sora_sdk-2025.1.0/tests/test_openh264.py +287 -0
  20. sora_sdk-2025.1.0/tests/test_opus.py +68 -0
  21. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_sendonly_recvonly.py +10 -14
  22. sora_sdk-2025.1.0/tests/test_simulcast.py +147 -0
  23. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_sora_disconnect.py +125 -6
  24. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_type_disconnect.py +1 -1
  25. sora_sdk-2024.4.0.dev44/pyproject.toml +0 -75
  26. sora_sdk-2024.4.0.dev44/tests/test_macos.py +0 -238
  27. sora_sdk-2024.4.0.dev44/tests/test_openh264.py +0 -127
  28. sora_sdk-2024.4.0.dev44/tests/test_simulcast.py +0 -68
  29. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/LICENSE +0 -0
  30. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/MANIFEST.in +0 -0
  31. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/NOTICE.md +0 -0
  32. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/pypath.py +0 -0
  33. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/setup.cfg +0 -0
  34. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/setup.py +0 -0
  35. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/src/sora_sdk/__init__.py +0 -0
  36. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/src/sora_sdk/py.typed +0 -0
  37. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/src/sora_sdk.egg-info/dependency_links.txt +0 -0
  38. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/src/sora_sdk.egg-info/top_level.txt +0 -0
  39. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_ca_cert.py +0 -0
  40. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_encoded_transform.py +0 -0
  41. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_messaging.py +0 -0
  42. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_messaging_header.py +0 -0
  43. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_re_offer_re_answer_sdp.py +0 -0
  44. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_signaling.py +0 -0
  45. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_signaling_message.py +0 -0
  46. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_signaling_notify.py +0 -0
  47. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_type_switched.py +0 -0
  48. {sora_sdk-2024.4.0.dev44 → sora_sdk-2025.1.0}/tests/test_vad.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: sora_sdk
3
- Version: 2024.4.0.dev44
3
+ Version: 2025.1.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>
@@ -187,14 +187,14 @@ Project-URL: Documentation, https://sora-python-sdk.shiguredo.jp
187
187
  Project-URL: Discord, https://discord.gg/shiguredo
188
188
  Classifier: License :: OSI Approved :: Apache Software License
189
189
  Classifier: Programming Language :: Python :: 3 :: Only
190
- Classifier: Programming Language :: Python :: 3.10
191
190
  Classifier: Programming Language :: Python :: 3.11
192
191
  Classifier: Programming Language :: Python :: 3.12
193
192
  Classifier: Programming Language :: Python :: 3.13
194
- Requires-Python: >=3.10
193
+ Requires-Python: >=3.11
195
194
  Description-Content-Type: text/markdown
196
195
  License-File: LICENSE
197
196
  License-File: NOTICE.md
197
+ Dynamic: home-page
198
198
 
199
199
  # Sora Python SDK
200
200
 
@@ -228,13 +228,24 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
228
228
  - Windows / macOS / Linux (Ubuntu) プラットフォームに対応
229
229
  - [WebRTC 統計情報](https://www.w3.org/TR/webrtc-stats/) の取得が可能
230
230
  - [WebRTC Encoded Transform](https://www.w3.org/TR/webrtc-encoded-transform/) に対応
231
+ - 回線が不安定になった際、解像度とフレームレートどちらを維持するかの設定をする [DegradationPreference](https://w3c.github.io/mst-content-hint/#degradation-preference-when-encoding) に対応
232
+ - MAINTAIN_FRAMERATE / MAINTAIN_RESOLUTION / BALANCED が指定できる
231
233
  - Intel / Apple / NVIDIA のハードウェアデコーダー/エンコーダーに対応
232
- - Intel VPL (AV1 / H.264 / H.265)
233
234
  - Apple Video Toolbox (H.264 / H.265)
234
- - NVIDIA Video Codec SDK (VP9 / H.264 / H.265)
235
+ - macOS arm64 で利用できる
236
+ - Intel VPL (AV1 / H.264 / H.265)
237
+ - Ubuntu x86_64 / Windows x86_64 で利用できる
238
+ - AMD AMF (VP9 /AV1 / H.264 / H.265)
239
+ - Ubuntu x86_64 / Windows x86_64 で利用できる
240
+ - AV1 エンコードは Windows x86_64 でのみ利用できる
241
+ - VP9 はデコードのみ利用できる
242
+ - NVIDIA Video Codec SDK (VP8 / VP9 / AV1 / H.264 / H.265)
243
+ - Ubuntu x86_64 / Windows x86_64 で利用できる
244
+ - VP8 と VP9 はデコードのみ利用できる
235
245
  - NVIDIA Jetson JetPack SDK (AV1 / H.264 / H.265)
236
246
  - [各プラットフォームで利用可能な HWA への対応](https://github.com/shiguredo/sora-cpp-sdk?tab=readme-ov-file#%E7%89%B9%E5%BE%B4)
237
247
  - [OpenH264](https://github.com/cisco/openh264) を利用した H.264 のソフトウェアエンコーダー/デコーダーに対応
248
+ - Ubuntu x86_64 / Ubuntu arm64 / Windows x86_64 / macOS arm64 で利用できる
238
249
  - 音声デバイス処理に [sounddevice](https://pypi.org/project/sounddevice/) などが利用できる
239
250
  - 映像デバイス処理に [opencv-python](https://pypi.org/project/opencv-python/) などが利用できる
240
251
  - 音声認識などの入力に受信した音声を利用できる
@@ -282,20 +293,24 @@ PyPI 経由ではインストールできません。
282
293
 
283
294
  ## システム条件
284
295
 
285
- - WebRTC SFU Sora 2023.2.0 以降
286
- - Python 3.10 以上
296
+ - WebRTC SFU Sora 2024.1.0 以降
297
+ - Python 3.11 以上
298
+
299
+ ## Python サポートポリシー
300
+
301
+ 直近の 3 バージョンの Python をサポートします。
287
302
 
288
303
  ## 対応プラットフォーム
289
304
 
290
- - Windows 11 x86_64
291
- - Windows Server 2022 x86_64
292
- - macOS Sequoia 15 arm64
293
- - macOS Ventura 14 arm64
294
305
  - Ubuntu 24.04 LTS x86_64
295
306
  - Ubuntu 24.04 LTS arm64
296
307
  - Ubuntu 22.04 LTS x86_64
297
308
  - Ubuntu 22.04 LTS arm64 (NVIDIA Jetson JetPack SDK 6)
298
309
  - PyPI からではなくパッケージファイルを利用してください
310
+ - macOS Sequoia 15 arm64
311
+ - macOS Ventura 14 arm64
312
+ - Windows 11 x86_64
313
+ - Windows Server 2022 x86_64
299
314
 
300
315
  ### macOS の対応バージョン
301
316
 
@@ -319,12 +334,9 @@ PyPI 経由ではインストールできません。
319
334
  ### 優先実装が可能な機能一覧
320
335
 
321
336
  - Windows 11 arm64
322
- - macOS Sonoma 13 arm64
323
337
  - Ubuntu 22.04 arm64
338
+ - Ubuntu 22.04 arm64 (NVIDIA Jetson JetPack SDK 6.1)
324
339
  - Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack SDK 5)
325
- - AMD Video Core Next (VCN) 対応
326
- - VP9 / AV1 / H.264 / H.265
327
- - Python 3.9 以前への対応
328
340
 
329
341
  ## サポートについて
330
342
 
@@ -347,9 +359,9 @@ Discord へお願いします。
347
359
  Apache License 2.0
348
360
 
349
361
  ```text
350
- Copyright 2023-2024, tnoho (Original Author)
351
- Copyright 2023-2024, Wandbox LLC (Original Author)
352
- Copyright 2023-2024, Shiguredo Inc.
362
+ Copyright 2023-2025, tnoho (Original Author)
363
+ Copyright 2023-2025, Wandbox LLC (Original Author)
364
+ Copyright 2023-2025, Shiguredo Inc.
353
365
 
354
366
  Licensed under the Apache License, Version 2.0 (the "License");
355
367
  you may not use this file except in compliance with the License.
@@ -30,13 +30,24 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
30
30
  - Windows / macOS / Linux (Ubuntu) プラットフォームに対応
31
31
  - [WebRTC 統計情報](https://www.w3.org/TR/webrtc-stats/) の取得が可能
32
32
  - [WebRTC Encoded Transform](https://www.w3.org/TR/webrtc-encoded-transform/) に対応
33
+ - 回線が不安定になった際、解像度とフレームレートどちらを維持するかの設定をする [DegradationPreference](https://w3c.github.io/mst-content-hint/#degradation-preference-when-encoding) に対応
34
+ - MAINTAIN_FRAMERATE / MAINTAIN_RESOLUTION / BALANCED が指定できる
33
35
  - Intel / Apple / NVIDIA のハードウェアデコーダー/エンコーダーに対応
34
- - Intel VPL (AV1 / H.264 / H.265)
35
36
  - Apple Video Toolbox (H.264 / H.265)
36
- - NVIDIA Video Codec SDK (VP9 / H.264 / H.265)
37
+ - macOS arm64 で利用できる
38
+ - Intel VPL (AV1 / H.264 / H.265)
39
+ - Ubuntu x86_64 / Windows x86_64 で利用できる
40
+ - AMD AMF (VP9 /AV1 / H.264 / H.265)
41
+ - Ubuntu x86_64 / Windows x86_64 で利用できる
42
+ - AV1 エンコードは Windows x86_64 でのみ利用できる
43
+ - VP9 はデコードのみ利用できる
44
+ - NVIDIA Video Codec SDK (VP8 / VP9 / AV1 / H.264 / H.265)
45
+ - Ubuntu x86_64 / Windows x86_64 で利用できる
46
+ - VP8 と VP9 はデコードのみ利用できる
37
47
  - NVIDIA Jetson JetPack SDK (AV1 / H.264 / H.265)
38
48
  - [各プラットフォームで利用可能な HWA への対応](https://github.com/shiguredo/sora-cpp-sdk?tab=readme-ov-file#%E7%89%B9%E5%BE%B4)
39
49
  - [OpenH264](https://github.com/cisco/openh264) を利用した H.264 のソフトウェアエンコーダー/デコーダーに対応
50
+ - Ubuntu x86_64 / Ubuntu arm64 / Windows x86_64 / macOS arm64 で利用できる
40
51
  - 音声デバイス処理に [sounddevice](https://pypi.org/project/sounddevice/) などが利用できる
41
52
  - 映像デバイス処理に [opencv-python](https://pypi.org/project/opencv-python/) などが利用できる
42
53
  - 音声認識などの入力に受信した音声を利用できる
@@ -84,20 +95,24 @@ PyPI 経由ではインストールできません。
84
95
 
85
96
  ## システム条件
86
97
 
87
- - WebRTC SFU Sora 2023.2.0 以降
88
- - Python 3.10 以上
98
+ - WebRTC SFU Sora 2024.1.0 以降
99
+ - Python 3.11 以上
100
+
101
+ ## Python サポートポリシー
102
+
103
+ 直近の 3 バージョンの Python をサポートします。
89
104
 
90
105
  ## 対応プラットフォーム
91
106
 
92
- - Windows 11 x86_64
93
- - Windows Server 2022 x86_64
94
- - macOS Sequoia 15 arm64
95
- - macOS Ventura 14 arm64
96
107
  - Ubuntu 24.04 LTS x86_64
97
108
  - Ubuntu 24.04 LTS arm64
98
109
  - Ubuntu 22.04 LTS x86_64
99
110
  - Ubuntu 22.04 LTS arm64 (NVIDIA Jetson JetPack SDK 6)
100
111
  - PyPI からではなくパッケージファイルを利用してください
112
+ - macOS Sequoia 15 arm64
113
+ - macOS Ventura 14 arm64
114
+ - Windows 11 x86_64
115
+ - Windows Server 2022 x86_64
101
116
 
102
117
  ### macOS の対応バージョン
103
118
 
@@ -121,12 +136,9 @@ PyPI 経由ではインストールできません。
121
136
  ### 優先実装が可能な機能一覧
122
137
 
123
138
  - Windows 11 arm64
124
- - macOS Sonoma 13 arm64
125
139
  - Ubuntu 22.04 arm64
140
+ - Ubuntu 22.04 arm64 (NVIDIA Jetson JetPack SDK 6.1)
126
141
  - Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack SDK 5)
127
- - AMD Video Core Next (VCN) 対応
128
- - VP9 / AV1 / H.264 / H.265
129
- - Python 3.9 以前への対応
130
142
 
131
143
  ## サポートについて
132
144
 
@@ -149,9 +161,9 @@ Discord へお願いします。
149
161
  Apache License 2.0
150
162
 
151
163
  ```text
152
- Copyright 2023-2024, tnoho (Original Author)
153
- Copyright 2023-2024, Wandbox LLC (Original Author)
154
- Copyright 2023-2024, Shiguredo Inc.
164
+ Copyright 2023-2025, tnoho (Original Author)
165
+ Copyright 2023-2025, Wandbox LLC (Original Author)
166
+ Copyright 2023-2025, Shiguredo Inc.
155
167
 
156
168
  Licensed under the Apache License, Version 2.0 (the "License");
157
169
  you may not use this file except in compliance with the License.
@@ -520,6 +520,7 @@ class WebrtcInfo(NamedTuple):
520
520
  webrtc_library_dir: str
521
521
  clang_dir: str
522
522
  libcxx_dir: str
523
+ libcxxabi_dir: str
523
524
 
524
525
 
525
526
  def get_webrtc_info(
@@ -536,6 +537,9 @@ def get_webrtc_info(
536
537
  webrtc_library_dir=os.path.join(webrtc_install_dir, "lib"),
537
538
  clang_dir=os.path.join(install_dir, "llvm", "clang"),
538
539
  libcxx_dir=os.path.join(install_dir, "llvm", "libcxx"),
540
+ libcxxabi_dir=os.path.join(
541
+ webrtc_install_dir, "include", "third_party", "libc++abi", "src"
542
+ ),
539
543
  )
540
544
  else:
541
545
  webrtc_build_source_dir = os.path.join(
@@ -556,6 +560,9 @@ def get_webrtc_info(
556
560
  webrtc_build_source_dir, "src", "third_party", "llvm-build", "Release+Asserts"
557
561
  ),
558
562
  libcxx_dir=os.path.join(webrtc_build_source_dir, "src", "third_party", "libc++", "src"),
563
+ libcxxabi_dir=os.path.join(
564
+ webrtc_build_source_dir, "src", "third_party", "libc++abi", "src"
565
+ ),
559
566
  )
560
567
 
561
568
 
@@ -691,7 +698,7 @@ def build_and_install_boost(
691
698
  ):
692
699
  version_underscore = version.replace(".", "_")
693
700
  archive = download(
694
- f"https://boostorg.jfrog.io/artifactory/main/release/{version}/source/boost_{version_underscore}.tar.gz",
701
+ f"https://archives.boost.io/release/{version}/source/boost_{version_underscore}.tar.gz",
695
702
  source_dir,
696
703
  )
697
704
  extract(archive, output_dir=build_dir, output_dirname="boost")
@@ -1701,7 +1708,10 @@ def get_build_platform() -> PlatformTarget:
1701
1708
  if arch in ("AMD64", "x86_64"):
1702
1709
  arch = "x86_64"
1703
1710
  elif arch in ("aarch64", "arm64"):
1704
- arch = "arm64"
1711
+ if os == "ubuntu":
1712
+ arch = "armv8"
1713
+ else:
1714
+ arch = "arm64"
1705
1715
  else:
1706
1716
  raise Exception(f"Arch {arch} not supported")
1707
1717
 
@@ -1800,8 +1810,8 @@ class Platform(object):
1800
1810
  self._check(build.arch in ("x86_64", "arm64"))
1801
1811
  if target.os == "ubuntu":
1802
1812
  self._check(build.os == "ubuntu")
1803
- self._check(build.arch == "x86_64")
1804
- if target.arch == "x86_64":
1813
+ self._check(build.arch in ("x86_64", "armv8"))
1814
+ if build.arch == target.arch:
1805
1815
  self._check(build.osver == target.osver)
1806
1816
  if target.os == "raspberry-pi-os":
1807
1817
  self._check(build.os == "ubuntu")
@@ -0,0 +1,51 @@
1
+ [project]
2
+ name = "sora_sdk"
3
+ authors = [{ name = "Shiguredo Inc.", email = "contact+pypi@shiguredo.jp" }]
4
+ version = "2025.1.0"
5
+ description = "WebRTC SFU Sora Python SDK"
6
+ readme = "README.md"
7
+ license = { file = "LICENSE" }
8
+ classifiers = [
9
+ "License :: OSI Approved :: Apache Software License",
10
+ "Programming Language :: Python :: 3 :: Only",
11
+ "Programming Language :: Python :: 3.11",
12
+ "Programming Language :: Python :: 3.12",
13
+ "Programming Language :: Python :: 3.13",
14
+ ]
15
+ requires-python = ">= 3.11"
16
+
17
+ [project.urls]
18
+ Source = "https://github.com/shiguredo/sora-python-sdk"
19
+ Documentation = "https://sora-python-sdk.shiguredo.jp"
20
+ Discord = "https://discord.gg/shiguredo"
21
+
22
+ [build-system]
23
+ requires = ["setuptools==76.1", "wheel==0.45.1"]
24
+ build-backend = "setuptools.build_meta"
25
+
26
+ [tool.uv]
27
+ python-preference = "only-managed"
28
+ dev-dependencies = [
29
+ "nanobind==2.5.0",
30
+ "setuptools==76.1",
31
+ "build==1.2.2.post1",
32
+ "wheel==0.45.1",
33
+ "typing-extensions",
34
+ "python-dotenv",
35
+ "numpy",
36
+ "httpx",
37
+ "pytest",
38
+ "ruff",
39
+ "mypy",
40
+ "pyjwt",
41
+ "pytest-repeat",
42
+ "psutil",
43
+ ]
44
+
45
+ [tool.ruff]
46
+ target-version = "py311"
47
+ line-length = 100
48
+
49
+
50
+ [tool.pytest.ini_options]
51
+ xfail_strict = true
@@ -127,7 +127,7 @@ def install_deps(
127
127
  install_cmake_args["platform"] = "macos-universal"
128
128
  elif platform.build.os == "ubuntu" and platform.build.arch == "x86_64":
129
129
  install_cmake_args["platform"] = "linux-x86_64"
130
- elif platform.build.os == "ubuntu" and platform.build.arch == "arm64":
130
+ elif platform.build.os == "ubuntu" and platform.build.arch == "armv8":
131
131
  install_cmake_args["platform"] = "linux-aarch64"
132
132
  else:
133
133
  raise Exception("Failed to install CMake")
@@ -261,12 +261,24 @@ def main():
261
261
  if platform.target.os == "ubuntu":
262
262
  # クロスコンパイルの設定。
263
263
  # 本来は toolchain ファイルに書く内容
264
+
265
+ if platform.build.arch == "armv8":
266
+ # ビルド環境が armv8 の場合は libwebrtc のバイナリが使えないのでローカルの clang を利用する
267
+ cmake_args += [
268
+ "-DCMAKE_C_COMPILER=clang-18",
269
+ "-DCMAKE_CXX_COMPILER=clang++-18",
270
+ ]
271
+ else:
272
+ cmake_args += [
273
+ f"-DCMAKE_C_COMPILER={os.path.join(webrtc_info.clang_dir, 'bin', 'clang')}",
274
+ f"-DCMAKE_CXX_COMPILER={os.path.join(webrtc_info.clang_dir, 'bin', 'clang++')}",
275
+ ]
264
276
  cmake_args += [
265
- f"-DCMAKE_C_COMPILER={os.path.join(webrtc_info.clang_dir, 'bin', 'clang')}",
266
- f"-DCMAKE_CXX_COMPILER={os.path.join(webrtc_info.clang_dir, 'bin', 'clang++')}",
267
277
  f"-DLIBCXX_INCLUDE_DIR={cmake_path(os.path.join(webrtc_info.libcxx_dir, 'include'))}",
278
+ f"-DLIBCXXABI_INCLUDE_DIR={cmake_path(os.path.join(webrtc_info.libcxxabi_dir, 'include'))}",
268
279
  ]
269
- if platform.target.arch == "armv8":
280
+
281
+ if platform.build.arch != platform.target.arch:
270
282
  sysroot = os.path.join(install_dir, "rootfs")
271
283
  nb_cmake_dir = cmdcap(["uv", "run", "python", "-m", "nanobind", "--cmake_dir"])
272
284
  cmake_args += [
@@ -279,7 +291,6 @@ def main():
279
291
  "-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=BOTH",
280
292
  "-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=BOTH",
281
293
  "-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=BOTH",
282
- f"-DCMAKE_SYSROOT={sysroot}",
283
294
  f"-DPython_ROOT_DIR={cmake_path(os.path.join(sysroot, 'usr', 'include', 'python3.12'))}",
284
295
  f"-DCMAKE_SYSROOT={sysroot}",
285
296
  f"-DNB_CMAKE_DIR={nb_cmake_dir}",
@@ -6,9 +6,9 @@ from numpy.typing import ArrayLike
6
6
 
7
7
 
8
8
  class Sora:
9
- def __init__(self, use_hardware_encoder: bool | None = None, openh264: str | None = None) -> None: ...
9
+ def __init__(self, openh264: str | None = None, video_codec_preference: SoraVideoCodecPreference | None = None) -> None: ...
10
10
 
11
- 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) -> SoraConnection: ...
11
+ 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: ...
12
12
 
13
13
  def create_audio_source(self, channels: int, sample_rate: int) -> SoraAudioSource: ...
14
14
 
@@ -156,6 +156,15 @@ class SoraConnection:
156
156
  @on_data_channel.setter
157
157
  def on_data_channel(self, arg: Callable[[str], None], /) -> None: ...
158
158
 
159
+ class SoraDegradationPreference(enum.IntEnum):
160
+ DISABLED = 0
161
+
162
+ BALANCED = 3
163
+
164
+ MAINTAIN_FRAMERATE = 1
165
+
166
+ MAINTAIN_RESOLUTION = 2
167
+
159
168
  class SoraFrameTransformer:
160
169
  def enqueue(self, arg: SoraTransformableFrame, /) -> None: ...
161
170
 
@@ -313,6 +322,132 @@ class SoraVAD:
313
322
 
314
323
  def analyze(self, frame: SoraAudioFrame) -> float: ...
315
324
 
325
+ class SoraVideoCodecCapability:
326
+ @property
327
+ def engines(self) -> list[SoraVideoCodecCapability.Engine]: ...
328
+
329
+ def to_json(self) -> object: ...
330
+
331
+ class Parameters:
332
+ @property
333
+ def version(self) -> str | None: ...
334
+
335
+ @property
336
+ def openh264_path(self) -> str | None: ...
337
+
338
+ @property
339
+ def vpl_impl(self) -> str | None: ...
340
+
341
+ @property
342
+ def vpl_impl_value(self) -> int | None: ...
343
+
344
+ @property
345
+ def nvcodec_gpu_device_name(self) -> str | None: ...
346
+
347
+ @property
348
+ def amf_runtime_version(self) -> str | None: ...
349
+
350
+ @property
351
+ def amf_embedded_version(self) -> str | None: ...
352
+
353
+ class Codec:
354
+ @property
355
+ def type(self) -> SoraVideoCodecType: ...
356
+
357
+ @property
358
+ def encoder(self) -> bool: ...
359
+
360
+ @property
361
+ def decoder(self) -> bool: ...
362
+
363
+ @property
364
+ def parameters(self) -> SoraVideoCodecCapability.Parameters: ...
365
+
366
+ class Engine:
367
+ @property
368
+ def name(self) -> SoraVideoCodecImplementation: ...
369
+
370
+ @property
371
+ def codecs(self) -> list[SoraVideoCodecCapability.Codec]: ...
372
+
373
+ @property
374
+ def parameters(self) -> SoraVideoCodecCapability.Parameters: ...
375
+
376
+ class SoraVideoCodecImplementation(enum.IntEnum):
377
+ INTERNAL = 0
378
+
379
+ CISCO_OPENH264 = 1
380
+
381
+ INTEL_VPL = 2
382
+
383
+ NVIDIA_VIDEO_CODEC_SDK = 3
384
+
385
+ AMD_AMF = 4
386
+
387
+ class SoraVideoCodecPreference:
388
+ def __init__(self, codecs: Sequence[SoraVideoCodecPreference.Codec] = []) -> None: ...
389
+
390
+ @property
391
+ def codecs(self) -> list[SoraVideoCodecPreference.Codec]: ...
392
+
393
+ @codecs.setter
394
+ def codecs(self, arg: Sequence[SoraVideoCodecPreference.Codec], /) -> None: ...
395
+
396
+ def to_json(self) -> object: ...
397
+
398
+ def find(self, arg: SoraVideoCodecType, /) -> int | None: ...
399
+
400
+ def get_or_add(self, arg: SoraVideoCodecType, /) -> int: ...
401
+
402
+ def has_implementation(self, arg: SoraVideoCodecImplementation, /) -> bool: ...
403
+
404
+ def merge(self, arg: SoraVideoCodecPreference, /) -> None: ...
405
+
406
+ class Parameters:
407
+ def __init__(self) -> None: ...
408
+
409
+ class Codec:
410
+ @overload
411
+ def __init__(self) -> None: ...
412
+
413
+ @overload
414
+ def __init__(self, type: SoraVideoCodecType, encoder: SoraVideoCodecImplementation | None = None, decoder: SoraVideoCodecImplementation | None = None, parameters: SoraVideoCodecPreference.Parameters = ...) -> None: ...
415
+
416
+ @property
417
+ def type(self) -> SoraVideoCodecType: ...
418
+
419
+ @type.setter
420
+ def type(self, arg: SoraVideoCodecType, /) -> None: ...
421
+
422
+ @property
423
+ def encoder(self) -> SoraVideoCodecImplementation | None: ...
424
+
425
+ @encoder.setter
426
+ def encoder(self, arg: SoraVideoCodecImplementation, /) -> None: ...
427
+
428
+ @property
429
+ def decoder(self) -> SoraVideoCodecImplementation | None: ...
430
+
431
+ @decoder.setter
432
+ def decoder(self, arg: SoraVideoCodecImplementation, /) -> None: ...
433
+
434
+ @property
435
+ def parameters(self) -> SoraVideoCodecPreference.Parameters: ...
436
+
437
+ @parameters.setter
438
+ def parameters(self, arg: SoraVideoCodecPreference.Parameters, /) -> None: ...
439
+
440
+ class SoraVideoCodecType(enum.IntEnum):
441
+ VP8 = 1
442
+
443
+ VP9 = 2
444
+
445
+ H264 = 4
446
+
447
+ H265 = 5
448
+
449
+ AV1 = 3
450
+
316
451
  class SoraVideoFrame:
317
452
  def data(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None, 3))]: ...
318
453
 
@@ -348,4 +483,10 @@ class SoraVideoSource(SoraTrackInterface):
348
483
  @overload
349
484
  def on_captured(self, ndarray: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None, 3), order='C', device='cpu')], timestamp_us: int) -> None: ...
350
485
 
486
+ def create_video_codec_preference_from_implementation(arg0: SoraVideoCodecCapability, arg1: SoraVideoCodecImplementation, /) -> SoraVideoCodecPreference: ...
487
+
351
488
  def enable_libwebrtc_log(arg: SoraLoggingSeverity, /) -> None: ...
489
+
490
+ def get_video_codec_capability(openh264: str | None = None) -> SoraVideoCodecCapability: ...
491
+
492
+ def rtc_log(arg0: SoraLoggingSeverity, arg1: str, /) -> None: ...
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: sora_sdk
3
- Version: 2024.4.0.dev44
3
+ Version: 2025.1.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>
@@ -187,14 +187,14 @@ Project-URL: Documentation, https://sora-python-sdk.shiguredo.jp
187
187
  Project-URL: Discord, https://discord.gg/shiguredo
188
188
  Classifier: License :: OSI Approved :: Apache Software License
189
189
  Classifier: Programming Language :: Python :: 3 :: Only
190
- Classifier: Programming Language :: Python :: 3.10
191
190
  Classifier: Programming Language :: Python :: 3.11
192
191
  Classifier: Programming Language :: Python :: 3.12
193
192
  Classifier: Programming Language :: Python :: 3.13
194
- Requires-Python: >=3.10
193
+ Requires-Python: >=3.11
195
194
  Description-Content-Type: text/markdown
196
195
  License-File: LICENSE
197
196
  License-File: NOTICE.md
197
+ Dynamic: home-page
198
198
 
199
199
  # Sora Python SDK
200
200
 
@@ -228,13 +228,24 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
228
228
  - Windows / macOS / Linux (Ubuntu) プラットフォームに対応
229
229
  - [WebRTC 統計情報](https://www.w3.org/TR/webrtc-stats/) の取得が可能
230
230
  - [WebRTC Encoded Transform](https://www.w3.org/TR/webrtc-encoded-transform/) に対応
231
+ - 回線が不安定になった際、解像度とフレームレートどちらを維持するかの設定をする [DegradationPreference](https://w3c.github.io/mst-content-hint/#degradation-preference-when-encoding) に対応
232
+ - MAINTAIN_FRAMERATE / MAINTAIN_RESOLUTION / BALANCED が指定できる
231
233
  - Intel / Apple / NVIDIA のハードウェアデコーダー/エンコーダーに対応
232
- - Intel VPL (AV1 / H.264 / H.265)
233
234
  - Apple Video Toolbox (H.264 / H.265)
234
- - NVIDIA Video Codec SDK (VP9 / H.264 / H.265)
235
+ - macOS arm64 で利用できる
236
+ - Intel VPL (AV1 / H.264 / H.265)
237
+ - Ubuntu x86_64 / Windows x86_64 で利用できる
238
+ - AMD AMF (VP9 /AV1 / H.264 / H.265)
239
+ - Ubuntu x86_64 / Windows x86_64 で利用できる
240
+ - AV1 エンコードは Windows x86_64 でのみ利用できる
241
+ - VP9 はデコードのみ利用できる
242
+ - NVIDIA Video Codec SDK (VP8 / VP9 / AV1 / H.264 / H.265)
243
+ - Ubuntu x86_64 / Windows x86_64 で利用できる
244
+ - VP8 と VP9 はデコードのみ利用できる
235
245
  - NVIDIA Jetson JetPack SDK (AV1 / H.264 / H.265)
236
246
  - [各プラットフォームで利用可能な HWA への対応](https://github.com/shiguredo/sora-cpp-sdk?tab=readme-ov-file#%E7%89%B9%E5%BE%B4)
237
247
  - [OpenH264](https://github.com/cisco/openh264) を利用した H.264 のソフトウェアエンコーダー/デコーダーに対応
248
+ - Ubuntu x86_64 / Ubuntu arm64 / Windows x86_64 / macOS arm64 で利用できる
238
249
  - 音声デバイス処理に [sounddevice](https://pypi.org/project/sounddevice/) などが利用できる
239
250
  - 映像デバイス処理に [opencv-python](https://pypi.org/project/opencv-python/) などが利用できる
240
251
  - 音声認識などの入力に受信した音声を利用できる
@@ -282,20 +293,24 @@ PyPI 経由ではインストールできません。
282
293
 
283
294
  ## システム条件
284
295
 
285
- - WebRTC SFU Sora 2023.2.0 以降
286
- - Python 3.10 以上
296
+ - WebRTC SFU Sora 2024.1.0 以降
297
+ - Python 3.11 以上
298
+
299
+ ## Python サポートポリシー
300
+
301
+ 直近の 3 バージョンの Python をサポートします。
287
302
 
288
303
  ## 対応プラットフォーム
289
304
 
290
- - Windows 11 x86_64
291
- - Windows Server 2022 x86_64
292
- - macOS Sequoia 15 arm64
293
- - macOS Ventura 14 arm64
294
305
  - Ubuntu 24.04 LTS x86_64
295
306
  - Ubuntu 24.04 LTS arm64
296
307
  - Ubuntu 22.04 LTS x86_64
297
308
  - Ubuntu 22.04 LTS arm64 (NVIDIA Jetson JetPack SDK 6)
298
309
  - PyPI からではなくパッケージファイルを利用してください
310
+ - macOS Sequoia 15 arm64
311
+ - macOS Ventura 14 arm64
312
+ - Windows 11 x86_64
313
+ - Windows Server 2022 x86_64
299
314
 
300
315
  ### macOS の対応バージョン
301
316
 
@@ -319,12 +334,9 @@ PyPI 経由ではインストールできません。
319
334
  ### 優先実装が可能な機能一覧
320
335
 
321
336
  - Windows 11 arm64
322
- - macOS Sonoma 13 arm64
323
337
  - Ubuntu 22.04 arm64
338
+ - Ubuntu 22.04 arm64 (NVIDIA Jetson JetPack SDK 6.1)
324
339
  - Ubuntu 20.04 arm64 (NVIDIA Jetson JetPack SDK 5)
325
- - AMD Video Core Next (VCN) 対応
326
- - VP9 / AV1 / H.264 / H.265
327
- - Python 3.9 以前への対応
328
340
 
329
341
  ## サポートについて
330
342
 
@@ -347,9 +359,9 @@ Discord へお願いします。
347
359
  Apache License 2.0
348
360
 
349
361
  ```text
350
- Copyright 2023-2024, tnoho (Original Author)
351
- Copyright 2023-2024, Wandbox LLC (Original Author)
352
- Copyright 2023-2024, Shiguredo Inc.
362
+ Copyright 2023-2025, tnoho (Original Author)
363
+ Copyright 2023-2025, Wandbox LLC (Original Author)
364
+ Copyright 2023-2025, Shiguredo Inc.
353
365
 
354
366
  Licensed under the Apache License, Version 2.0 (the "License");
355
367
  you may not use this file except in compliance with the License.
@@ -9,18 +9,27 @@ run.py
9
9
  setup.py
10
10
  src/sora_sdk/__init__.py
11
11
  src/sora_sdk/py.typed
12
- src/sora_sdk/sora_sdk_ext.cpython-310-darwin.so
12
+ src/sora_sdk/sora_sdk_ext.cpython-311-darwin.so
13
13
  src/sora_sdk/sora_sdk_ext.pyi
14
14
  src/sora_sdk.egg-info/PKG-INFO
15
15
  src/sora_sdk.egg-info/SOURCES.txt
16
16
  src/sora_sdk.egg-info/dependency_links.txt
17
17
  src/sora_sdk.egg-info/top_level.txt
18
+ tests/test_amd_amf.py
19
+ tests/test_apple_video_toolbox.py
20
+ tests/test_authz.py
21
+ tests/test_authz_simulcast.py
18
22
  tests/test_ca_cert.py
23
+ tests/test_capability.py
24
+ tests/test_degradation_preference.py
19
25
  tests/test_encoded_transform.py
20
- tests/test_macos.py
26
+ tests/test_intel_vpl.py
27
+ tests/test_memory_leak.py
21
28
  tests/test_messaging.py
22
29
  tests/test_messaging_header.py
30
+ tests/test_nvidia_video_codec_sdk.py
23
31
  tests/test_openh264.py
32
+ tests/test_opus.py
24
33
  tests/test_re_offer_re_answer_sdp.py
25
34
  tests/test_sendonly_recvonly.py
26
35
  tests/test_signaling.py