sora-sdk 2025.3.0.dev7__tar.gz → 2025.4.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.
- {sora_sdk-2025.3.0.dev7/src/sora_sdk.egg-info → sora_sdk-2025.4.0}/PKG-INFO +2 -2
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/README.md +1 -1
- sora_sdk-2025.4.0/VERSION +1 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/buildbase.py +292 -3
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/pyproject.toml +8 -10
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/run.py +117 -32
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/src/sora_sdk/__init__.py +5 -1
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/src/sora_sdk/sora_sdk_ext.cpython-311-darwin.so +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/src/sora_sdk/sora_sdk_ext.pyi +16 -15
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0/src/sora_sdk.egg-info}/PKG-INFO +2 -2
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/src/sora_sdk.egg-info/SOURCES.txt +1 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_amd_amf.py +73 -7
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_apple_video_toolbox.py +3 -11
- sora_sdk-2025.4.0/tests/test_capability.py +50 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_intel_vpl.py +140 -138
- sora_sdk-2025.4.0/tests/test_key_frame_request.py +75 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_nvidia_video_codec_sdk.py +64 -10
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_openh264.py +4 -19
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_openh264_simulcast.py +4 -11
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_sendonly_recvonly.py +10 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_version.py +3 -3
- sora_sdk-2025.3.0.dev7/VERSION +0 -1
- sora_sdk-2025.3.0.dev7/tests/test_capability.py +0 -52
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/LICENSE +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/MANIFEST.in +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/pypath.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/setup.cfg +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/setup.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/src/sora_sdk/py.typed +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/src/sora_sdk.egg-info/dependency_links.txt +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/src/sora_sdk.egg-info/top_level.txt +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_authz.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_authz_simulcast.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_ca_cert.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_degradation_preference.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_encoded_transform.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_messaging.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_messaging_header.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_opus.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_re_offer_re_answer_sdp.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_signaling.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_signaling_message.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_signaling_notify.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_simulcast.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_sora_disconnect.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_type_disconnect.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_type_switched.py +0 -0
- {sora_sdk-2025.3.0.dev7 → sora_sdk-2025.4.0}/tests/test_vad.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sora_sdk
|
|
3
|
-
Version: 2025.
|
|
3
|
+
Version: 2025.4.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>
|
|
@@ -108,7 +108,7 @@ PyPI 経由ではインストールできません。
|
|
|
108
108
|
|
|
109
109
|
## システム条件
|
|
110
110
|
|
|
111
|
-
- WebRTC SFU Sora 2024.
|
|
111
|
+
- WebRTC SFU Sora 2024.2.0 以降
|
|
112
112
|
- Python 3.11 以上
|
|
113
113
|
|
|
114
114
|
## Python サポートポリシー
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2025.4.0
|
|
@@ -302,7 +302,12 @@ def _extractzip(z: zipfile.ZipFile, path: str):
|
|
|
302
302
|
def extract(file: str, output_dir: str, output_dirname: str, filetype: Optional[str] = None):
|
|
303
303
|
path = os.path.join(output_dir, output_dirname)
|
|
304
304
|
logging.info(f"Extract {file} to {path}")
|
|
305
|
-
if
|
|
305
|
+
if (
|
|
306
|
+
filetype == "gzip"
|
|
307
|
+
or file.endswith(".tar.gz")
|
|
308
|
+
or filetype == "lzma"
|
|
309
|
+
or file.endswith(".tar.xz")
|
|
310
|
+
):
|
|
306
311
|
rm_rf(path)
|
|
307
312
|
with tarfile.open(file) as t:
|
|
308
313
|
dir = is_single_dir_tar(t)
|
|
@@ -378,6 +383,7 @@ def git_clone_shallow(url, hash, dir, submodule=False):
|
|
|
378
383
|
|
|
379
384
|
|
|
380
385
|
def apply_patch(patch, dir, depth):
|
|
386
|
+
patch = os.path.abspath(patch)
|
|
381
387
|
with cd(dir):
|
|
382
388
|
logging.info(f"patch -p{depth} < {patch}")
|
|
383
389
|
if platform.system() == "Windows":
|
|
@@ -800,6 +806,7 @@ def build_and_install_boost(
|
|
|
800
806
|
)
|
|
801
807
|
elif target_os == "android":
|
|
802
808
|
# Android の場合、android-ndk を使ってビルドする
|
|
809
|
+
# ただし cxx が指定されてた場合はそちらを優先する
|
|
803
810
|
with open("project-config.jam", "w", encoding="utf-8") as f:
|
|
804
811
|
bin = os.path.join(
|
|
805
812
|
android_ndk, "toolchains", "llvm", "prebuilt", android_build_platform, "bin"
|
|
@@ -814,7 +821,7 @@ def build_and_install_boost(
|
|
|
814
821
|
f.write(
|
|
815
822
|
f"using clang \
|
|
816
823
|
: android \
|
|
817
|
-
: {escape(os.path.join(bin, 'clang++'))} \
|
|
824
|
+
: {escape(cxx if len(cxx) != 0 else os.path.join(bin, 'clang++'))} \
|
|
818
825
|
--target=aarch64-none-linux-android{native_api_level} \
|
|
819
826
|
--sysroot={escape(sysroot)} \
|
|
820
827
|
: <archiver>{escape(os.path.join(bin, 'llvm-ar'))} \
|
|
@@ -932,7 +939,7 @@ def build_sora(
|
|
|
932
939
|
]
|
|
933
940
|
|
|
934
941
|
with cd(local_sora_cpp_sdk_dir):
|
|
935
|
-
cmd(["python3", "run.py", platform, *local_sora_cpp_sdk_args])
|
|
942
|
+
cmd(["python3", "run.py", "build", platform, *local_sora_cpp_sdk_args])
|
|
936
943
|
|
|
937
944
|
|
|
938
945
|
class SoraInfo(NamedTuple):
|
|
@@ -1226,6 +1233,93 @@ def install_sdl2(
|
|
|
1226
1233
|
cmd(["cmake", "--install", ".", "--config", configuration])
|
|
1227
1234
|
|
|
1228
1235
|
|
|
1236
|
+
@versioned
|
|
1237
|
+
def install_sdl3(
|
|
1238
|
+
version, source_dir, build_dir, install_dir, debug: bool, platform: str, cmake_args: List[str]
|
|
1239
|
+
):
|
|
1240
|
+
url = f"https://github.com/libsdl-org/SDL/releases/download/release-{version}/SDL3-{version}.tar.gz"
|
|
1241
|
+
path = download(url, source_dir)
|
|
1242
|
+
sdl3_source_dir = os.path.join(source_dir, "sdl3")
|
|
1243
|
+
sdl3_build_dir = os.path.join(build_dir, "sdl3")
|
|
1244
|
+
sdl3_install_dir = os.path.join(install_dir, "sdl3")
|
|
1245
|
+
rm_rf(sdl3_source_dir)
|
|
1246
|
+
rm_rf(sdl3_build_dir)
|
|
1247
|
+
rm_rf(sdl3_install_dir)
|
|
1248
|
+
extract(path, source_dir, "sdl3")
|
|
1249
|
+
|
|
1250
|
+
mkdir_p(sdl3_build_dir)
|
|
1251
|
+
with cd(sdl3_build_dir):
|
|
1252
|
+
configuration = "Debug" if debug else "Release"
|
|
1253
|
+
cmake_args = cmake_args[:]
|
|
1254
|
+
cmake_args += [
|
|
1255
|
+
sdl3_source_dir,
|
|
1256
|
+
f"-DCMAKE_BUILD_TYPE={configuration}",
|
|
1257
|
+
f"-DCMAKE_INSTALL_PREFIX={cmake_path(sdl3_install_dir)}",
|
|
1258
|
+
"-DBUILD_SHARED_LIBS=OFF",
|
|
1259
|
+
"-DSDL_STATIC=ON",
|
|
1260
|
+
"-DSDL_SHARED=OFF",
|
|
1261
|
+
]
|
|
1262
|
+
if platform == "windows":
|
|
1263
|
+
cmake_args += [
|
|
1264
|
+
f"-DCMAKE_MSVC_RUNTIME_LIBRARY={'MultiThreaded' if not debug else 'MultiThreadedDebug'}",
|
|
1265
|
+
"-DSDL_AUDIO=OFF",
|
|
1266
|
+
"-DSDL_JOYSTICK=OFF",
|
|
1267
|
+
"-DSDL_HAPTIC=OFF",
|
|
1268
|
+
# GitHub Actions 上で gameinput.h が存在しないのに
|
|
1269
|
+
# なぜか check_c_source_compiles() が成功してしまうので
|
|
1270
|
+
# HAVE_GAMEINPUT_H=0 で強制的に無効化する
|
|
1271
|
+
"-DHAVE_GAMEINPUT_H=0",
|
|
1272
|
+
]
|
|
1273
|
+
elif platform == "macos":
|
|
1274
|
+
# どの環境でも同じようにインストールされるようにするため全部 ON/OFF を明示的に指定する
|
|
1275
|
+
cmake_args += [
|
|
1276
|
+
"-DSDL_AUDIO=OFF",
|
|
1277
|
+
"-DSDL_VIDEO=ON",
|
|
1278
|
+
"-DSDL_RENDER=ON",
|
|
1279
|
+
"-DSDL_HAPTIC=ON",
|
|
1280
|
+
"-DSDL_POWER=ON",
|
|
1281
|
+
"-DSDL_JOYSTICK=ON",
|
|
1282
|
+
"-DSDL_SENSOR=ON",
|
|
1283
|
+
"-DSDL_OPENGL=ON",
|
|
1284
|
+
"-DSDL_OPENGLES=ON",
|
|
1285
|
+
"-DSDL_METAL=ON",
|
|
1286
|
+
"-DSDL_VULKAN=OFF",
|
|
1287
|
+
]
|
|
1288
|
+
elif platform == "linux":
|
|
1289
|
+
# どの環境でも同じようにインストールされるようにするため全部 ON/OFF を明示的に指定する
|
|
1290
|
+
cmake_args += [
|
|
1291
|
+
"-DSDL_AUDIO=OFF",
|
|
1292
|
+
"-DSDL_VIDEO=ON",
|
|
1293
|
+
"-DSDL_RENDER=ON",
|
|
1294
|
+
"-DSDL_HAPTIC=ON",
|
|
1295
|
+
"-DSDL_POWER=ON",
|
|
1296
|
+
"-DSDL_JOYSTICK=ON",
|
|
1297
|
+
"-DSDL_SENSOR=ON",
|
|
1298
|
+
"-DSDL_OPENGL=ON",
|
|
1299
|
+
"-DSDL_OPENGLES=ON",
|
|
1300
|
+
"-DSDL_X11=ON",
|
|
1301
|
+
"-DSDL_X11_SHARED=OFF",
|
|
1302
|
+
"-DSDL_X11_XCURSOR=OFF",
|
|
1303
|
+
"-DSDL_X11_XDBE=OFF",
|
|
1304
|
+
"-DSDL_X11_XFIXES=OFF",
|
|
1305
|
+
"-DSDL_X11_XINPUT=OFF",
|
|
1306
|
+
"-DSDL_X11_XRANDR=OFF",
|
|
1307
|
+
"-DSDL_X11_XSCRNSAVER=OFF",
|
|
1308
|
+
"-DSDL_X11_XSHAPE=OFF",
|
|
1309
|
+
"-DSDL_X11_XSYNC=OFF",
|
|
1310
|
+
"-DSDL_WAYLAND=OFF",
|
|
1311
|
+
"-DSDL_VULKAN=OFF",
|
|
1312
|
+
"-DSDL_KMSDRM=OFF",
|
|
1313
|
+
"-DSDL_RPI=OFF",
|
|
1314
|
+
]
|
|
1315
|
+
cmd(["cmake"] + cmake_args)
|
|
1316
|
+
|
|
1317
|
+
cmd(
|
|
1318
|
+
["cmake", "--build", ".", "--config", configuration, f"-j{multiprocessing.cpu_count()}"]
|
|
1319
|
+
)
|
|
1320
|
+
cmd(["cmake", "--install", ".", "--config", configuration])
|
|
1321
|
+
|
|
1322
|
+
|
|
1229
1323
|
@versioned
|
|
1230
1324
|
def install_cli11(version, install_dir):
|
|
1231
1325
|
cli11_install_dir = os.path.join(install_dir, "cli11")
|
|
@@ -1307,6 +1401,33 @@ def install_vpl(version, configuration, source_dir, build_dir, install_dir, cmak
|
|
|
1307
1401
|
cmd(["cmake", "--install", ".", "--config", configuration])
|
|
1308
1402
|
|
|
1309
1403
|
|
|
1404
|
+
@versioned
|
|
1405
|
+
def install_blend2d_official(
|
|
1406
|
+
version,
|
|
1407
|
+
configuration,
|
|
1408
|
+
source_dir,
|
|
1409
|
+
build_dir,
|
|
1410
|
+
install_dir,
|
|
1411
|
+
ios,
|
|
1412
|
+
cmake_args,
|
|
1413
|
+
):
|
|
1414
|
+
rm_rf(os.path.join(source_dir, "blend2d"))
|
|
1415
|
+
rm_rf(os.path.join(build_dir, "blend2d"))
|
|
1416
|
+
rm_rf(os.path.join(install_dir, "blend2d"))
|
|
1417
|
+
|
|
1418
|
+
url = f"https://blend2d.com/download/blend2d-{version}.tar.gz"
|
|
1419
|
+
path = download(url, source_dir)
|
|
1420
|
+
extract(path, source_dir, "blend2d")
|
|
1421
|
+
_build_blend2d(
|
|
1422
|
+
configuration=configuration,
|
|
1423
|
+
source_dir=source_dir,
|
|
1424
|
+
build_dir=build_dir,
|
|
1425
|
+
install_dir=install_dir,
|
|
1426
|
+
ios=ios,
|
|
1427
|
+
cmake_args=cmake_args,
|
|
1428
|
+
)
|
|
1429
|
+
|
|
1430
|
+
|
|
1310
1431
|
@versioned
|
|
1311
1432
|
def install_blend2d(
|
|
1312
1433
|
version,
|
|
@@ -1332,7 +1453,17 @@ def install_blend2d(
|
|
|
1332
1453
|
asmjit_version,
|
|
1333
1454
|
os.path.join(source_dir, "blend2d", "3rdparty", "asmjit"),
|
|
1334
1455
|
)
|
|
1456
|
+
_build_blend2d(
|
|
1457
|
+
configuration=configuration,
|
|
1458
|
+
source_dir=source_dir,
|
|
1459
|
+
build_dir=build_dir,
|
|
1460
|
+
install_dir=install_dir,
|
|
1461
|
+
ios=ios,
|
|
1462
|
+
cmake_args=cmake_args,
|
|
1463
|
+
)
|
|
1464
|
+
|
|
1335
1465
|
|
|
1466
|
+
def _build_blend2d(configuration, source_dir, build_dir, install_dir, ios, cmake_args):
|
|
1336
1467
|
mkdir_p(os.path.join(build_dir, "blend2d"))
|
|
1337
1468
|
with cd(os.path.join(build_dir, "blend2d")):
|
|
1338
1469
|
cmd(
|
|
@@ -1747,6 +1878,7 @@ def install_opus(
|
|
|
1747
1878
|
"cmake",
|
|
1748
1879
|
f"-DCMAKE_INSTALL_PREFIX={cmake_path(opus_install_dir)}",
|
|
1749
1880
|
f"-DCMAKE_BUILD_TYPE={configuration}",
|
|
1881
|
+
"-DCMAKE_POSITION_INDEPENDENT_CODE=ON",
|
|
1750
1882
|
"-DOPUS_BUILD_SHARED_LIBRARY=OFF",
|
|
1751
1883
|
"-DOPUS_BUILD_TESTING=OFF",
|
|
1752
1884
|
"-DOPUS_BUILD_PROGRAMS=OFF",
|
|
@@ -1803,6 +1935,163 @@ def install_amf(version, install_dir):
|
|
|
1803
1935
|
)
|
|
1804
1936
|
|
|
1805
1937
|
|
|
1938
|
+
@versioned
|
|
1939
|
+
def install_mbedtls(version, source_dir, build_dir, install_dir, debug, cmake_args):
|
|
1940
|
+
rm_rf(os.path.join(source_dir, "mbedtls"))
|
|
1941
|
+
rm_rf(os.path.join(build_dir, "mbedtls"))
|
|
1942
|
+
rm_rf(os.path.join(install_dir, "mbedtls"))
|
|
1943
|
+
git_clone_shallow(
|
|
1944
|
+
"https://github.com/Mbed-TLS/mbedtls.git",
|
|
1945
|
+
version,
|
|
1946
|
+
os.path.join(source_dir, "mbedtls"),
|
|
1947
|
+
)
|
|
1948
|
+
with cd(os.path.join(source_dir, "mbedtls")):
|
|
1949
|
+
configuration = "Debug" if debug else "Release"
|
|
1950
|
+
cmd(["python3", "scripts/config.py", "set", "MBEDTLS_SSL_DTLS_SRTP"])
|
|
1951
|
+
cmd(
|
|
1952
|
+
[
|
|
1953
|
+
"cmake",
|
|
1954
|
+
f"-DCMAKE_INSTALL_PREFIX={cmake_path(os.path.join(install_dir, 'mbedtls'))}",
|
|
1955
|
+
f"-DCMAKE_BUILD_TYPE={configuration}",
|
|
1956
|
+
"-DCMAKE_POSITION_INDEPENDENT_CODE=ON",
|
|
1957
|
+
"-B",
|
|
1958
|
+
os.path.join(build_dir, "mbedtls"),
|
|
1959
|
+
]
|
|
1960
|
+
+ cmake_args
|
|
1961
|
+
)
|
|
1962
|
+
cmd(
|
|
1963
|
+
[
|
|
1964
|
+
"cmake",
|
|
1965
|
+
"--build",
|
|
1966
|
+
os.path.join(build_dir, "mbedtls"),
|
|
1967
|
+
f"-j{multiprocessing.cpu_count()}",
|
|
1968
|
+
"--config",
|
|
1969
|
+
"Release",
|
|
1970
|
+
]
|
|
1971
|
+
)
|
|
1972
|
+
cmd(["cmake", "--install", os.path.join(build_dir, "mbedtls")])
|
|
1973
|
+
|
|
1974
|
+
|
|
1975
|
+
@versioned
|
|
1976
|
+
def install_libjpeg_turbo(version, source_dir, build_dir, install_dir, configuration, cmake_args):
|
|
1977
|
+
libjpeg_source_dir = os.path.join(source_dir, "libjpeg-turbo")
|
|
1978
|
+
libjpeg_build_dir = os.path.join(build_dir, "libjpeg-turbo")
|
|
1979
|
+
libjpeg_install_dir = os.path.join(install_dir, "libjpeg-turbo")
|
|
1980
|
+
rm_rf(libjpeg_source_dir)
|
|
1981
|
+
rm_rf(libjpeg_build_dir)
|
|
1982
|
+
rm_rf(libjpeg_install_dir)
|
|
1983
|
+
git_clone_shallow(
|
|
1984
|
+
"https://github.com/libjpeg-turbo/libjpeg-turbo.git",
|
|
1985
|
+
version,
|
|
1986
|
+
libjpeg_source_dir,
|
|
1987
|
+
)
|
|
1988
|
+
mkdir_p(libjpeg_build_dir)
|
|
1989
|
+
with cd(libjpeg_build_dir):
|
|
1990
|
+
cmd(
|
|
1991
|
+
[
|
|
1992
|
+
"cmake",
|
|
1993
|
+
libjpeg_source_dir,
|
|
1994
|
+
f"-DCMAKE_INSTALL_PREFIX={libjpeg_install_dir}",
|
|
1995
|
+
f"-DCMAKE_BUILD_TYPE={configuration}",
|
|
1996
|
+
"-DENABLE_SHARED=FALSE",
|
|
1997
|
+
"-DENABLE_STATIC=TRUE",
|
|
1998
|
+
"-DCMAKE_BUILD_TYPE=Release",
|
|
1999
|
+
"-DCMAKE_POSITION_INDEPENDENT_CODE=ON",
|
|
2000
|
+
]
|
|
2001
|
+
+ cmake_args
|
|
2002
|
+
)
|
|
2003
|
+
cmd(
|
|
2004
|
+
[
|
|
2005
|
+
"cmake",
|
|
2006
|
+
"--build",
|
|
2007
|
+
libjpeg_build_dir,
|
|
2008
|
+
f"-j{multiprocessing.cpu_count()}",
|
|
2009
|
+
"--config",
|
|
2010
|
+
"Release",
|
|
2011
|
+
]
|
|
2012
|
+
)
|
|
2013
|
+
cmd(["cmake", "--install", libjpeg_build_dir])
|
|
2014
|
+
|
|
2015
|
+
|
|
2016
|
+
@versioned
|
|
2017
|
+
def install_libyuv(
|
|
2018
|
+
version, source_dir, build_dir, install_dir, libjpeg_turbo_dir, configuration, cmake_args
|
|
2019
|
+
):
|
|
2020
|
+
libyuv_source_dir = os.path.join(source_dir, "libyuv")
|
|
2021
|
+
libyuv_build_dir = os.path.join(build_dir, "libyuv")
|
|
2022
|
+
libyuv_install_dir = os.path.join(install_dir, "libyuv")
|
|
2023
|
+
rm_rf(libyuv_source_dir)
|
|
2024
|
+
rm_rf(libyuv_build_dir)
|
|
2025
|
+
rm_rf(libyuv_install_dir)
|
|
2026
|
+
git_clone_shallow(
|
|
2027
|
+
"https://chromium.googlesource.com/libyuv/libyuv",
|
|
2028
|
+
version,
|
|
2029
|
+
libyuv_source_dir,
|
|
2030
|
+
)
|
|
2031
|
+
mkdir_p(libyuv_build_dir)
|
|
2032
|
+
with cd(libyuv_build_dir):
|
|
2033
|
+
cmd(
|
|
2034
|
+
[
|
|
2035
|
+
"cmake",
|
|
2036
|
+
libyuv_source_dir,
|
|
2037
|
+
f"-DCMAKE_INSTALL_PREFIX={cmake_path(libyuv_install_dir)}",
|
|
2038
|
+
f"-DCMAKE_BUILD_TYPE={configuration}",
|
|
2039
|
+
f"-DCMAKE_PREFIX_PATH={cmake_path(libjpeg_turbo_dir)}",
|
|
2040
|
+
*cmake_args,
|
|
2041
|
+
]
|
|
2042
|
+
)
|
|
2043
|
+
cmd(
|
|
2044
|
+
[
|
|
2045
|
+
"cmake",
|
|
2046
|
+
"--build",
|
|
2047
|
+
libyuv_build_dir,
|
|
2048
|
+
f"-j{multiprocessing.cpu_count()}",
|
|
2049
|
+
"--config",
|
|
2050
|
+
"Release",
|
|
2051
|
+
]
|
|
2052
|
+
)
|
|
2053
|
+
cmd(["cmake", "--install", libyuv_build_dir])
|
|
2054
|
+
|
|
2055
|
+
|
|
2056
|
+
@versioned
|
|
2057
|
+
def install_aom(version, source_dir, build_dir, install_dir, configuration, cmake_args):
|
|
2058
|
+
aom_source_dir = os.path.join(source_dir, "aom")
|
|
2059
|
+
aom_build_dir = os.path.join(build_dir, "aom")
|
|
2060
|
+
aom_install_dir = os.path.join(install_dir, "aom")
|
|
2061
|
+
rm_rf(aom_source_dir)
|
|
2062
|
+
rm_rf(aom_build_dir)
|
|
2063
|
+
rm_rf(aom_install_dir)
|
|
2064
|
+
git_clone_shallow(
|
|
2065
|
+
"https://aomedia.googlesource.com/aom",
|
|
2066
|
+
version,
|
|
2067
|
+
aom_source_dir,
|
|
2068
|
+
)
|
|
2069
|
+
with cd(aom_source_dir):
|
|
2070
|
+
cmd(
|
|
2071
|
+
[
|
|
2072
|
+
"cmake",
|
|
2073
|
+
"-B",
|
|
2074
|
+
aom_build_dir,
|
|
2075
|
+
f"-DCMAKE_INSTALL_PREFIX={cmake_path(aom_install_dir)}",
|
|
2076
|
+
f"-DCMAKE_BUILD_TYPE={configuration}",
|
|
2077
|
+
"-DENABLE_DOCS=OFF",
|
|
2078
|
+
"-DENABLE_TESTS=OFF",
|
|
2079
|
+
*cmake_args,
|
|
2080
|
+
]
|
|
2081
|
+
)
|
|
2082
|
+
cmd(
|
|
2083
|
+
[
|
|
2084
|
+
"cmake",
|
|
2085
|
+
"--build",
|
|
2086
|
+
aom_build_dir,
|
|
2087
|
+
f"-j{multiprocessing.cpu_count()}",
|
|
2088
|
+
"--config",
|
|
2089
|
+
"Release",
|
|
2090
|
+
]
|
|
2091
|
+
)
|
|
2092
|
+
cmd(["cmake", "--install", aom_build_dir])
|
|
2093
|
+
|
|
2094
|
+
|
|
1806
2095
|
class PlatformTarget(object):
|
|
1807
2096
|
def __init__(self, os, osver, arch, extra=None):
|
|
1808
2097
|
self.os = os
|
|
@@ -26,26 +26,24 @@ build-backend = "setuptools.build_meta"
|
|
|
26
26
|
[tool.uv]
|
|
27
27
|
python-preference = "only-managed"
|
|
28
28
|
dev-dependencies = [
|
|
29
|
-
"nanobind==2.
|
|
30
|
-
"setuptools==80.9",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
29
|
+
"nanobind==2.9.2",
|
|
30
|
+
"setuptools==80.9.0",
|
|
31
|
+
"pytest",
|
|
32
|
+
"pytest-repeat",
|
|
33
|
+
"pytest-xdist",
|
|
34
34
|
"numpy",
|
|
35
35
|
"httpx",
|
|
36
|
-
"pytest",
|
|
37
|
-
"ruff",
|
|
38
36
|
"pyjwt",
|
|
39
|
-
"
|
|
37
|
+
"ruff",
|
|
40
38
|
"ty",
|
|
41
|
-
"pydantic-settings",
|
|
42
|
-
"pyright",
|
|
43
39
|
]
|
|
44
40
|
|
|
45
41
|
[tool.ruff]
|
|
46
42
|
target-version = "py311"
|
|
47
43
|
line-length = 100
|
|
48
44
|
|
|
45
|
+
[tool.ty.src]
|
|
46
|
+
include = ["src", "tests"]
|
|
49
47
|
|
|
50
48
|
[tool.pytest.ini_options]
|
|
51
49
|
xfail_strict = true
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import argparse
|
|
2
|
+
import glob
|
|
2
3
|
import hashlib
|
|
3
4
|
import importlib.metadata
|
|
4
5
|
import multiprocessing
|
|
@@ -180,35 +181,48 @@ AVAILABLE_TARGETS = [
|
|
|
180
181
|
]
|
|
181
182
|
|
|
182
183
|
|
|
183
|
-
def
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
parser.add_argument("target", choices=AVAILABLE_TARGETS)
|
|
184
|
+
def _find_clang_binary(name: str) -> Optional[str]:
|
|
185
|
+
if shutil.which(name) is not None:
|
|
186
|
+
return name
|
|
187
|
+
else:
|
|
188
|
+
for n in range(50, 14, -1):
|
|
189
|
+
if shutil.which(f"{name}-{n}") is not None:
|
|
190
|
+
return f"{name}-{n}"
|
|
191
|
+
return None
|
|
192
192
|
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
|
|
194
|
+
def _get_platform(target: str) -> Platform:
|
|
195
|
+
if target == "windows_x86_64":
|
|
195
196
|
platform = Platform("windows", get_windows_osver(), "x86_64")
|
|
196
|
-
elif
|
|
197
|
+
elif target == "macos_x86_64":
|
|
197
198
|
platform = Platform("macos", get_macos_osver(), "x86_64")
|
|
198
|
-
elif
|
|
199
|
+
elif target == "macos_arm64":
|
|
199
200
|
platform = Platform("macos", get_macos_osver(), "arm64")
|
|
200
|
-
elif
|
|
201
|
+
elif target == "ubuntu-22.04_x86_64":
|
|
201
202
|
platform = Platform("ubuntu", "22.04", "x86_64")
|
|
202
|
-
elif
|
|
203
|
+
elif target == "ubuntu-24.04_x86_64":
|
|
203
204
|
platform = Platform("ubuntu", "24.04", "x86_64")
|
|
204
|
-
elif
|
|
205
|
+
elif target == "ubuntu-22.04_armv8":
|
|
205
206
|
platform = Platform("ubuntu", "22.04", "armv8")
|
|
206
|
-
elif
|
|
207
|
+
elif target == "ubuntu-24.04_armv8":
|
|
207
208
|
platform = Platform("ubuntu", "24.04", "armv8")
|
|
208
|
-
elif
|
|
209
|
+
elif target == "ubuntu-22.04_armv8_jetson":
|
|
209
210
|
platform = Platform("jetson", None, "armv8", "ubuntu-22.04")
|
|
210
211
|
else:
|
|
211
|
-
raise Exception(f"Unknown target {
|
|
212
|
+
raise Exception(f"Unknown target {target}")
|
|
213
|
+
return platform
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
def _build(
|
|
217
|
+
target: str,
|
|
218
|
+
debug: bool,
|
|
219
|
+
relwithdebinfo: bool,
|
|
220
|
+
local_webrtc_build_dir: Optional[str],
|
|
221
|
+
local_webrtc_build_args: List[str],
|
|
222
|
+
local_sora_cpp_sdk_dir: Optional[str],
|
|
223
|
+
local_sora_cpp_sdk_args: List[str],
|
|
224
|
+
):
|
|
225
|
+
platform = _get_platform(target)
|
|
212
226
|
|
|
213
227
|
source_dir = os.path.join(BASE_DIR, "_source", platform.target.package_name)
|
|
214
228
|
build_dir = os.path.join(BASE_DIR, "_build", platform.target.package_name)
|
|
@@ -223,27 +237,23 @@ def main():
|
|
|
223
237
|
source_dir,
|
|
224
238
|
build_dir,
|
|
225
239
|
install_dir,
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
240
|
+
debug,
|
|
241
|
+
local_webrtc_build_dir,
|
|
242
|
+
local_webrtc_build_args,
|
|
243
|
+
local_sora_cpp_sdk_dir,
|
|
244
|
+
local_sora_cpp_sdk_args,
|
|
231
245
|
)
|
|
232
246
|
|
|
233
247
|
configuration = "Release"
|
|
234
|
-
if
|
|
248
|
+
if debug:
|
|
235
249
|
configuration = "Debug"
|
|
236
|
-
if
|
|
250
|
+
if relwithdebinfo:
|
|
237
251
|
configuration = "RelWithDebInfo"
|
|
238
252
|
|
|
239
253
|
webrtc_platform = get_webrtc_platform(platform)
|
|
240
|
-
webrtc_info = get_webrtc_info(
|
|
241
|
-
webrtc_platform, args.local_webrtc_build_dir, install_dir, args.debug
|
|
242
|
-
)
|
|
254
|
+
webrtc_info = get_webrtc_info(webrtc_platform, local_webrtc_build_dir, install_dir, debug)
|
|
243
255
|
|
|
244
|
-
sora_info = get_sora_info(
|
|
245
|
-
webrtc_platform, args.local_sora_cpp_sdk_dir, install_dir, args.debug
|
|
246
|
-
)
|
|
256
|
+
sora_info = get_sora_info(webrtc_platform, local_sora_cpp_sdk_dir, install_dir, debug)
|
|
247
257
|
|
|
248
258
|
cmake_args = []
|
|
249
259
|
cmake_args.append(f"-DCMAKE_BUILD_TYPE={configuration}")
|
|
@@ -373,5 +383,80 @@ def main():
|
|
|
373
383
|
)
|
|
374
384
|
|
|
375
385
|
|
|
386
|
+
def _format(
|
|
387
|
+
clang_format_path: Optional[str] = None,
|
|
388
|
+
skip_clang_format: bool = False,
|
|
389
|
+
skip_ruff: bool = False,
|
|
390
|
+
):
|
|
391
|
+
# C++ ファイルのフォーマット
|
|
392
|
+
if not skip_clang_format:
|
|
393
|
+
if clang_format_path is None:
|
|
394
|
+
clang_format_path = _find_clang_binary("clang-format")
|
|
395
|
+
if clang_format_path is None:
|
|
396
|
+
print("Warning: clang-format not found. Skipping C++ formatting.")
|
|
397
|
+
else:
|
|
398
|
+
patterns = [
|
|
399
|
+
"src/**/*.h",
|
|
400
|
+
"src/**/*.cpp",
|
|
401
|
+
]
|
|
402
|
+
target_files = []
|
|
403
|
+
for pattern in patterns:
|
|
404
|
+
files = glob.glob(pattern, recursive=True)
|
|
405
|
+
target_files.extend(files)
|
|
406
|
+
if target_files:
|
|
407
|
+
print(f"Formatting {len(target_files)} C++ files...")
|
|
408
|
+
cmd([clang_format_path, "-i"] + target_files)
|
|
409
|
+
|
|
410
|
+
# Python ファイルのフォーマット
|
|
411
|
+
if not skip_ruff:
|
|
412
|
+
print("Running Python formatting with ruff...")
|
|
413
|
+
try:
|
|
414
|
+
cmd(["uv", "run", "ruff", "format"])
|
|
415
|
+
except Exception as e:
|
|
416
|
+
print(f"Formatting failed: {e}")
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
def main():
|
|
420
|
+
parser = argparse.ArgumentParser()
|
|
421
|
+
sp = parser.add_subparsers(dest="command", required=True)
|
|
422
|
+
|
|
423
|
+
# build サブコマンド
|
|
424
|
+
bp = sp.add_parser("build")
|
|
425
|
+
bp.add_argument("target", choices=AVAILABLE_TARGETS)
|
|
426
|
+
bp.add_argument("--debug", action="store_true")
|
|
427
|
+
bp.add_argument("--relwithdebinfo", action="store_true")
|
|
428
|
+
bp.add_argument("--local-webrtc-build-dir", type=os.path.abspath)
|
|
429
|
+
bp.add_argument("--local-webrtc-build-args", default="", type=shlex.split)
|
|
430
|
+
bp.add_argument("--local-sora-cpp-sdk-dir", type=os.path.abspath)
|
|
431
|
+
bp.add_argument("--local-sora-cpp-sdk-args", default="", type=shlex.split)
|
|
432
|
+
|
|
433
|
+
# format サブコマンド
|
|
434
|
+
fp = sp.add_parser("format")
|
|
435
|
+
fp.add_argument("--clang-format-path", type=str, default=None)
|
|
436
|
+
fp.add_argument(
|
|
437
|
+
"--skip-clang-format", action="store_true", help="Skip C++ formatting with clang-format"
|
|
438
|
+
)
|
|
439
|
+
fp.add_argument("--skip-ruff", action="store_true", help="Skip Python formatting with ruff")
|
|
440
|
+
|
|
441
|
+
args = parser.parse_args()
|
|
442
|
+
|
|
443
|
+
if args.command == "build":
|
|
444
|
+
_build(
|
|
445
|
+
target=args.target,
|
|
446
|
+
debug=args.debug,
|
|
447
|
+
relwithdebinfo=args.relwithdebinfo,
|
|
448
|
+
local_webrtc_build_dir=args.local_webrtc_build_dir,
|
|
449
|
+
local_webrtc_build_args=args.local_webrtc_build_args,
|
|
450
|
+
local_sora_cpp_sdk_dir=args.local_sora_cpp_sdk_dir,
|
|
451
|
+
local_sora_cpp_sdk_args=args.local_sora_cpp_sdk_args,
|
|
452
|
+
)
|
|
453
|
+
elif args.command == "format":
|
|
454
|
+
_format(
|
|
455
|
+
clang_format_path=args.clang_format_path,
|
|
456
|
+
skip_clang_format=args.skip_clang_format,
|
|
457
|
+
skip_ruff=args.skip_ruff,
|
|
458
|
+
)
|
|
459
|
+
|
|
460
|
+
|
|
376
461
|
if __name__ == "__main__":
|
|
377
462
|
main()
|
|
@@ -4,12 +4,16 @@ from .sora_sdk_ext import * # noqa: F401,F403
|
|
|
4
4
|
# 開発環境の場合は VERSION ファイルから取得
|
|
5
5
|
try:
|
|
6
6
|
from importlib.metadata import version, PackageNotFoundError
|
|
7
|
+
|
|
7
8
|
try:
|
|
8
9
|
__version__ = version("sora_sdk")
|
|
9
10
|
except PackageNotFoundError:
|
|
10
11
|
# パッケージがインストールされていない場合(開発環境)
|
|
11
12
|
import os
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
_version_file = os.path.join(
|
|
15
|
+
os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "VERSION"
|
|
16
|
+
)
|
|
13
17
|
if os.path.exists(_version_file):
|
|
14
18
|
with open(_version_file, "r") as f:
|
|
15
19
|
__version__ = f.read().strip()
|