libdatachannel-py 2025.1.0.dev7__tar.gz → 2025.1.0.dev9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. {libdatachannel_py-2025.1.0.dev7/src/libdatachannel_py.egg-info → libdatachannel_py-2025.1.0.dev9}/PKG-INFO +2 -1
  2. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/README.md +1 -0
  3. libdatachannel_py-2025.1.0.dev9/VERSION +1 -0
  4. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/buildbase.py +123 -2
  5. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/pyproject.toml +10 -5
  6. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/run.py +79 -0
  7. libdatachannel_py-2025.1.0.dev9/src/libdatachannel/libdatachannel_ext.cpython-313-darwin.so +0 -0
  8. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/src/libdatachannel/libdatachannel_ext.pyi +2 -210
  9. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9/src/libdatachannel_py.egg-info}/PKG-INFO +2 -1
  10. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/src/libdatachannel_py.egg-info/SOURCES.txt +3 -0
  11. libdatachannel_py-2025.1.0.dev9/tests/test_audio_codec.py +126 -0
  12. libdatachannel_py-2025.1.0.dev9/tests/test_libyuv.py +200 -0
  13. libdatachannel_py-2025.1.0.dev9/tests/test_prop_audio_codec.py +97 -0
  14. libdatachannel_py-2025.1.0.dev9/tests/test_video_codec.py +513 -0
  15. libdatachannel_py-2025.1.0.dev7/VERSION +0 -1
  16. libdatachannel_py-2025.1.0.dev7/src/libdatachannel/libdatachannel_ext.cpython-313-darwin.so +0 -0
  17. libdatachannel_py-2025.1.0.dev7/tests/test_video_codec.py +0 -170
  18. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/LICENSE +0 -0
  19. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/MANIFEST.in +0 -0
  20. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/pypath.py +0 -0
  21. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/setup.cfg +0 -0
  22. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/setup.py +0 -0
  23. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/src/libdatachannel/__init__.py +0 -0
  24. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/src/libdatachannel/py.typed +0 -0
  25. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/src/libdatachannel_py.egg-info/dependency_links.txt +0 -0
  26. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/src/libdatachannel_py.egg-info/top_level.txt +0 -0
  27. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_candidate.py +0 -0
  28. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_configuration.py +0 -0
  29. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_description.py +0 -0
  30. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_frameinfo.py +0 -0
  31. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_h265nalunit.py +0 -0
  32. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_mediahandler.py +0 -0
  33. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_message.py +0 -0
  34. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_nalunit.py +0 -0
  35. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_packetizationconfig.py +0 -0
  36. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_peerconnection.py +0 -0
  37. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_reliability.py +0 -0
  38. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_rtppacketizer.py +0 -0
  39. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_websocket.py +0 -0
  40. {libdatachannel_py-2025.1.0.dev7 → libdatachannel_py-2025.1.0.dev9}/tests/test_websocketserver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: libdatachannel-py
3
- Version: 2025.1.0.dev7
3
+ Version: 2025.1.0.dev9
4
4
  Summary: libdatachannel-py is a Python binding for libdatachannel.
5
5
  Home-page: https://github.com/shiguredo/libdatachannel-py
6
6
  License-Expression: Apache-2.0
@@ -39,6 +39,7 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
39
39
 
40
40
  - [nanobind](https://github.com/wjakob/nanobind) を利用しています
41
41
  - [Opus](https://opus-codec.org/) を利用した Opus ソフトウェアエンコード/デコードに対応しています
42
+ - [libaom](https://aomedia.googlesource.com/aom/) を利用した AV1 ソフトウェアエンコード/デコードに対応しています
42
43
  - [OpenH264](https://www.openh264.org/) を利用した H.264 ソフトウェアエンコード/デコードに対応しています
43
44
  - [Apple Video Toolbox](https://developer.apple.com/documentation/videotoolbox) を利用した H.264/H.265 ハードウェアエンコード/デコードに対応しています
44
45
 
@@ -23,6 +23,7 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
23
23
 
24
24
  - [nanobind](https://github.com/wjakob/nanobind) を利用しています
25
25
  - [Opus](https://opus-codec.org/) を利用した Opus ソフトウェアエンコード/デコードに対応しています
26
+ - [libaom](https://aomedia.googlesource.com/aom/) を利用した AV1 ソフトウェアエンコード/デコードに対応しています
26
27
  - [OpenH264](https://www.openh264.org/) を利用した H.264 ソフトウェアエンコード/デコードに対応しています
27
28
  - [Apple Video Toolbox](https://developer.apple.com/documentation/videotoolbox) を利用した H.264/H.265 ハードウェアエンコード/デコードに対応しています
28
29
 
@@ -0,0 +1 @@
1
+ 2025.1.0.dev9
@@ -702,8 +702,8 @@ def build_and_install_boost(
702
702
  ):
703
703
  version_underscore = version.replace(".", "_")
704
704
  archive = download(
705
- # 公式サイトに負荷をかけないための時雨堂による R2 ミラー
706
- f"https://pub-31f2ce80536a4322af33196843feefc2.r2.dev/boost_{version_underscore}.tar.gz",
705
+ # 公式サイトに負荷をかけないための時雨堂によるミラー
706
+ f"https://oss-mirrors.shiguredo.jp/boost_{version_underscore}.tar.gz",
707
707
  # Boost 公式のミラー
708
708
  # f"https://archives.boost.io/release/{version}/source/boost_{version_underscore}.tar.gz",
709
709
  source_dir,
@@ -1748,6 +1748,7 @@ def install_opus(
1748
1748
  "cmake",
1749
1749
  f"-DCMAKE_INSTALL_PREFIX={cmake_path(opus_install_dir)}",
1750
1750
  f"-DCMAKE_BUILD_TYPE={configuration}",
1751
+ "-DCMAKE_POSITION_INDEPENDENT_CODE=ON",
1751
1752
  "-DOPUS_BUILD_SHARED_LIBRARY=OFF",
1752
1753
  "-DOPUS_BUILD_TESTING=OFF",
1753
1754
  "-DOPUS_BUILD_PROGRAMS=OFF",
@@ -1841,6 +1842,126 @@ def install_mbedtls(version, source_dir, build_dir, install_dir, debug, cmake_ar
1841
1842
  cmd(["cmake", "--install", os.path.join(build_dir, "mbedtls")])
1842
1843
 
1843
1844
 
1845
+ @versioned
1846
+ def install_libjpeg_turbo(version, source_dir, build_dir, install_dir, configuration, cmake_args):
1847
+ libjpeg_source_dir = os.path.join(source_dir, "libjpeg-turbo")
1848
+ libjpeg_build_dir = os.path.join(build_dir, "libjpeg-turbo")
1849
+ libjpeg_install_dir = os.path.join(install_dir, "libjpeg-turbo")
1850
+ rm_rf(libjpeg_source_dir)
1851
+ rm_rf(libjpeg_build_dir)
1852
+ rm_rf(libjpeg_install_dir)
1853
+ git_clone_shallow(
1854
+ "https://github.com/libjpeg-turbo/libjpeg-turbo.git",
1855
+ version,
1856
+ libjpeg_source_dir,
1857
+ )
1858
+ mkdir_p(libjpeg_build_dir)
1859
+ with cd(libjpeg_build_dir):
1860
+ cmd(
1861
+ [
1862
+ "cmake",
1863
+ libjpeg_source_dir,
1864
+ f"-DCMAKE_INSTALL_PREFIX={libjpeg_install_dir}",
1865
+ f"-DCMAKE_BUILD_TYPE={configuration}",
1866
+ "-DENABLE_SHARED=FALSE",
1867
+ "-DENABLE_STATIC=TRUE",
1868
+ "-DCMAKE_BUILD_TYPE=Release",
1869
+ "-DCMAKE_POSITION_INDEPENDENT_CODE=ON",
1870
+ ]
1871
+ + cmake_args
1872
+ )
1873
+ cmd(
1874
+ [
1875
+ "cmake",
1876
+ "--build",
1877
+ libjpeg_build_dir,
1878
+ f"-j{multiprocessing.cpu_count()}",
1879
+ "--config",
1880
+ "Release",
1881
+ ]
1882
+ )
1883
+ cmd(["cmake", "--install", libjpeg_build_dir])
1884
+
1885
+
1886
+ @versioned
1887
+ def install_libyuv(
1888
+ version, source_dir, build_dir, install_dir, libjpeg_turbo_dir, configuration, cmake_args
1889
+ ):
1890
+ libyuv_source_dir = os.path.join(source_dir, "libyuv")
1891
+ libyuv_build_dir = os.path.join(build_dir, "libyuv")
1892
+ libyuv_install_dir = os.path.join(install_dir, "libyuv")
1893
+ rm_rf(libyuv_source_dir)
1894
+ rm_rf(libyuv_build_dir)
1895
+ rm_rf(libyuv_install_dir)
1896
+ git_clone_shallow(
1897
+ "https://chromium.googlesource.com/libyuv/libyuv",
1898
+ version,
1899
+ libyuv_source_dir,
1900
+ )
1901
+ mkdir_p(libyuv_build_dir)
1902
+ with cd(libyuv_build_dir):
1903
+ cmd(
1904
+ [
1905
+ "cmake",
1906
+ libyuv_source_dir,
1907
+ f"-DCMAKE_INSTALL_PREFIX={cmake_path(libyuv_install_dir)}",
1908
+ f"-DCMAKE_BUILD_TYPE={configuration}",
1909
+ f"-DCMAKE_PREFIX_PATH={cmake_path(libjpeg_turbo_dir)}",
1910
+ *cmake_args,
1911
+ ]
1912
+ )
1913
+ cmd(
1914
+ [
1915
+ "cmake",
1916
+ "--build",
1917
+ libyuv_build_dir,
1918
+ f"-j{multiprocessing.cpu_count()}",
1919
+ "--config",
1920
+ "Release",
1921
+ ]
1922
+ )
1923
+ cmd(["cmake", "--install", libyuv_build_dir])
1924
+
1925
+
1926
+ @versioned
1927
+ def install_aom(version, source_dir, build_dir, install_dir, configuration, cmake_args):
1928
+ aom_source_dir = os.path.join(source_dir, "aom")
1929
+ aom_build_dir = os.path.join(build_dir, "aom")
1930
+ aom_install_dir = os.path.join(install_dir, "aom")
1931
+ rm_rf(aom_source_dir)
1932
+ rm_rf(aom_build_dir)
1933
+ rm_rf(aom_install_dir)
1934
+ git_clone_shallow(
1935
+ "https://aomedia.googlesource.com/aom",
1936
+ version,
1937
+ aom_source_dir,
1938
+ )
1939
+ with cd(aom_source_dir):
1940
+ cmd(
1941
+ [
1942
+ "cmake",
1943
+ "-B",
1944
+ aom_build_dir,
1945
+ f"-DCMAKE_INSTALL_PREFIX={cmake_path(aom_install_dir)}",
1946
+ f"-DCMAKE_BUILD_TYPE={configuration}",
1947
+ "-DENABLE_DOCS=OFF",
1948
+ "-DENABLE_TESTS=OFF",
1949
+ *cmake_args,
1950
+ ]
1951
+ )
1952
+ cmd(
1953
+ [
1954
+ "cmake",
1955
+ "--build",
1956
+ aom_build_dir,
1957
+ f"-j{multiprocessing.cpu_count()}",
1958
+ "--config",
1959
+ "Release",
1960
+ ]
1961
+ )
1962
+ cmd(["cmake", "--install", aom_build_dir])
1963
+
1964
+
1844
1965
  class PlatformTarget(object):
1845
1966
  def __init__(self, os, osver, arch, extra=None):
1846
1967
  self.os = os
@@ -18,19 +18,24 @@ Source = "https://github.com/shiguredo/libdatachannel-py"
18
18
  Discord = "https://discord.gg/shiguredo"
19
19
 
20
20
  [build-system]
21
- requires = ["setuptools==80.4", "wheel==0.45.1"]
21
+ requires = ["setuptools>=80.9", "wheel>=0.45.1"]
22
22
  build-backend = "setuptools.build_meta"
23
23
 
24
24
  [dependency-groups]
25
25
  dev = [
26
- "nanobind>=2.7.0",
27
- "pytest>=8.3.5",
28
- "setuptools>=80.4",
26
+ "nanobind>=2.7",
27
+ "pytest>=8",
28
+ "setuptools>=80.9",
29
29
  "build>=1.2.2.post1",
30
30
  "wheel>=0.45.1",
31
- "numpy>=2.2.5",
31
+ "numpy>=2.2",
32
+ "ty",
33
+ "hypothesis>=6.132.0",
32
34
  ]
33
35
 
36
+ [tool.uv.workspace]
37
+ members = ["examples"]
38
+
34
39
  [tool.ruff]
35
40
  target-version = "py313"
36
41
  line-length = 100
@@ -16,9 +16,13 @@ from buildbase import (
16
16
  get_macos_osver,
17
17
  get_windows_osver,
18
18
  git_clone_shallow,
19
+ install_aom,
19
20
  install_cmake,
21
+ install_libjpeg_turbo,
22
+ install_libyuv,
20
23
  install_mbedtls,
21
24
  install_openh264,
25
+ install_opus,
22
26
  mkdir_p,
23
27
  read_version_file,
24
28
  )
@@ -115,6 +119,55 @@ def install_deps(
115
119
  }
116
120
  install_openh264(**install_openh264_args)
117
121
 
122
+ # Opus
123
+ install_opus_args = {
124
+ "version": version["OPUS_VERSION"],
125
+ "version_file": os.path.join(install_dir, "opus.version"),
126
+ "source_dir": source_dir,
127
+ "build_dir": build_dir,
128
+ "install_dir": install_dir,
129
+ "configuration": "Debug" if debug else "Release",
130
+ "cmake_args": macos_cmake_args,
131
+ }
132
+ install_opus(**install_opus_args)
133
+
134
+ # libjpeg-turbo
135
+ install_libjpeg_turbo_args = {
136
+ "version": version["LIBJPEG_TURBO_VERSION"],
137
+ "version_file": os.path.join(install_dir, "libjpeg-turbo.version"),
138
+ "source_dir": source_dir,
139
+ "build_dir": build_dir,
140
+ "install_dir": install_dir,
141
+ "configuration": "Debug" if debug else "Release",
142
+ "cmake_args": macos_cmake_args,
143
+ }
144
+ install_libjpeg_turbo(**install_libjpeg_turbo_args)
145
+
146
+ # libyuv
147
+ install_libyuv_args = {
148
+ "version": version["LIBYUV_VERSION"],
149
+ "version_file": os.path.join(install_dir, "libyuv.version"),
150
+ "source_dir": source_dir,
151
+ "build_dir": build_dir,
152
+ "install_dir": install_dir,
153
+ "libjpeg_turbo_dir": os.path.join(install_dir, "libjpeg-turbo"),
154
+ "configuration": "Debug" if debug else "Release",
155
+ "cmake_args": macos_cmake_args,
156
+ }
157
+ install_libyuv(**install_libyuv_args)
158
+
159
+ # AOM
160
+ install_aom_args = {
161
+ "version": version["AOM_VERSION"],
162
+ "version_file": os.path.join(install_dir, "aom.version"),
163
+ "source_dir": source_dir,
164
+ "build_dir": build_dir,
165
+ "install_dir": install_dir,
166
+ "configuration": "Debug" if debug else "Release",
167
+ "cmake_args": macos_cmake_args,
168
+ }
169
+ install_aom(**install_aom_args)
170
+
118
171
 
119
172
  AVAILABLE_TARGETS = [
120
173
  "windows_x86_64",
@@ -199,6 +252,18 @@ def main():
199
252
  # OpenH264
200
253
  cmake_args.append(f"-DOPENH264_DIR={cmake_path(os.path.join(install_dir, 'openh264'))}")
201
254
 
255
+ # Opus
256
+ cmake_args.append(f"-DOPUS_DIR={cmake_path(os.path.join(install_dir, 'opus'))}")
257
+
258
+ # Libyuv
259
+ cmake_args.append(
260
+ f"-DLIBJPEG_TURBO_DIR={cmake_path(os.path.join(install_dir, 'libjpeg-turbo'))}"
261
+ )
262
+ cmake_args.append(f"-DLIBYUV_DIR={cmake_path(os.path.join(install_dir, 'libyuv'))}")
263
+
264
+ # AOM
265
+ cmake_args.append(f"-DAOM_DIR={cmake_path(os.path.join(install_dir, 'aom'))}")
266
+
202
267
  if platform.target.os == "macos":
203
268
  sysroot = cmdcap(["xcrun", "--sdk", "macosx", "--show-sdk-path"])
204
269
  cmake_args += [
@@ -261,6 +326,20 @@ def main():
261
326
  os.path.join(libdatachannelpy_src_dir, file),
262
327
  )
263
328
 
329
+ for file in os.listdir(os.path.join(libdatachannelpy_build_target_dir, "libyuv")):
330
+ if file in ("__init__.pyi",):
331
+ shutil.copyfile(
332
+ os.path.join(libdatachannelpy_build_target_dir, "libyuv", file),
333
+ os.path.join(libdatachannelpy_src_dir, "libyuv", file),
334
+ )
335
+
336
+ for file in os.listdir(os.path.join(libdatachannelpy_build_target_dir, "codec")):
337
+ if file in ("__init__.pyi",):
338
+ shutil.copyfile(
339
+ os.path.join(libdatachannelpy_build_target_dir, "codec", file),
340
+ os.path.join(libdatachannelpy_src_dir, "codec", file),
341
+ )
342
+
264
343
 
265
344
  if __name__ == "__main__":
266
345
  main()
@@ -1,9 +1,9 @@
1
1
  from collections.abc import Callable, Sequence
2
2
  import datetime
3
3
  import enum
4
- from typing import Annotated, overload
4
+ from typing import overload
5
5
 
6
- from numpy.typing import ArrayLike
6
+ from . import codec as codec, libyuv as libyuv
7
7
 
8
8
 
9
9
  class IceServer:
@@ -1667,211 +1667,3 @@ class WebSocketServer:
1667
1667
  def port(self) -> int: ...
1668
1668
 
1669
1669
  def on_client(self, callback: Callable[[WebSocket], None]) -> None: ...
1670
-
1671
- class VideoCodecType(enum.Enum):
1672
- H264 = 0
1673
-
1674
- H265 = 1
1675
-
1676
- VP8 = 2
1677
-
1678
- VP9 = 3
1679
-
1680
- AV1 = 4
1681
-
1682
- class ImageFormat(enum.Enum):
1683
- I420 = 0
1684
-
1685
- NV12 = 1
1686
-
1687
- BGR888 = 2
1688
-
1689
- class VideoFrameBufferI420:
1690
- @staticmethod
1691
- def create(arg0: int, arg1: int, /) -> VideoFrameBufferI420: ...
1692
-
1693
- @property
1694
- def y(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
1695
-
1696
- @y.setter
1697
- def y(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
1698
-
1699
- @property
1700
- def u(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
1701
-
1702
- @u.setter
1703
- def u(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
1704
-
1705
- @property
1706
- def v(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
1707
-
1708
- @v.setter
1709
- def v(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
1710
-
1711
- def width(self) -> int: ...
1712
-
1713
- def height(self) -> int: ...
1714
-
1715
- def stride_y(self) -> int: ...
1716
-
1717
- def stride_u(self) -> int: ...
1718
-
1719
- def stride_v(self) -> int: ...
1720
-
1721
- class VideoFrameBufferNV12:
1722
- @staticmethod
1723
- def create(arg0: int, arg1: int, /) -> VideoFrameBufferNV12: ...
1724
-
1725
- @property
1726
- def y(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
1727
-
1728
- @y.setter
1729
- def y(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
1730
-
1731
- @property
1732
- def uv(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')]: ...
1733
-
1734
- @uv.setter
1735
- def uv(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None), order='C')], /) -> None: ...
1736
-
1737
- def width(self) -> int: ...
1738
-
1739
- def height(self) -> int: ...
1740
-
1741
- def stride_y(self) -> int: ...
1742
-
1743
- def stride_uv(self) -> int: ...
1744
-
1745
- class VideoFrameBufferBGR888:
1746
- @staticmethod
1747
- def create(arg0: int, arg1: int, /) -> VideoFrameBufferBGR888: ...
1748
-
1749
- @property
1750
- def bgr(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None, 3), order='C')]: ...
1751
-
1752
- @bgr.setter
1753
- def bgr(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None, None, 3), order='C')], /) -> None: ...
1754
-
1755
- def width(self) -> int: ...
1756
-
1757
- def height(self) -> int: ...
1758
-
1759
- def stride(self) -> int: ...
1760
-
1761
- class VideoFrame:
1762
- def __init__(self) -> None: ...
1763
-
1764
- @property
1765
- def format(self) -> ImageFormat: ...
1766
-
1767
- @format.setter
1768
- def format(self, arg: ImageFormat, /) -> None: ...
1769
-
1770
- @property
1771
- def i420_buffer(self) -> VideoFrameBufferI420: ...
1772
-
1773
- @i420_buffer.setter
1774
- def i420_buffer(self, arg: VideoFrameBufferI420, /) -> None: ...
1775
-
1776
- @property
1777
- def nv12_buffer(self) -> VideoFrameBufferNV12: ...
1778
-
1779
- @nv12_buffer.setter
1780
- def nv12_buffer(self, arg: VideoFrameBufferNV12, /) -> None: ...
1781
-
1782
- @property
1783
- def bgr888_buffer(self) -> VideoFrameBufferBGR888: ...
1784
-
1785
- @bgr888_buffer.setter
1786
- def bgr888_buffer(self, arg: VideoFrameBufferBGR888, /) -> None: ...
1787
-
1788
- @property
1789
- def timestamp(self) -> datetime.timedelta: ...
1790
-
1791
- @timestamp.setter
1792
- def timestamp(self, arg: datetime.timedelta | float, /) -> None: ...
1793
-
1794
- @property
1795
- def rid(self) -> str | None: ...
1796
-
1797
- @rid.setter
1798
- def rid(self, arg: str, /) -> None: ...
1799
-
1800
- @property
1801
- def base_width(self) -> int: ...
1802
-
1803
- @base_width.setter
1804
- def base_width(self, arg: int, /) -> None: ...
1805
-
1806
- @property
1807
- def base_height(self) -> int: ...
1808
-
1809
- @base_height.setter
1810
- def base_height(self, arg: int, /) -> None: ...
1811
-
1812
- def width(self) -> int: ...
1813
-
1814
- def height(self) -> int: ...
1815
-
1816
- class EncodedImage:
1817
- def __init__(self) -> None: ...
1818
-
1819
- @property
1820
- def data(self) -> Annotated[ArrayLike, dict(dtype='uint8', shape=(None), order='C')]: ...
1821
-
1822
- @data.setter
1823
- def data(self, arg: Annotated[ArrayLike, dict(dtype='uint8', shape=(None), order='C')], /) -> None: ...
1824
-
1825
- @property
1826
- def timestamp(self) -> datetime.timedelta: ...
1827
-
1828
- @timestamp.setter
1829
- def timestamp(self, arg: datetime.timedelta | float, /) -> None: ...
1830
-
1831
- @property
1832
- def rid(self) -> str | None: ...
1833
-
1834
- @rid.setter
1835
- def rid(self, arg: str, /) -> None: ...
1836
-
1837
- class VideoEncoder:
1838
- def init(self, arg: VideoEncoder.Settings, /) -> bool: ...
1839
-
1840
- def release(self) -> None: ...
1841
-
1842
- def encode(self, arg: VideoFrame, /) -> None: ...
1843
-
1844
- def force_intra_next_frame(self) -> None: ...
1845
-
1846
- def set_on_encoded(self, arg: Callable[[EncodedImage], None], /) -> None: ...
1847
-
1848
- class Settings:
1849
- def __init__(self) -> None: ...
1850
-
1851
- @property
1852
- def codec_type(self) -> VideoCodecType: ...
1853
-
1854
- @codec_type.setter
1855
- def codec_type(self, arg: VideoCodecType, /) -> None: ...
1856
-
1857
- @property
1858
- def width(self) -> int: ...
1859
-
1860
- @width.setter
1861
- def width(self, arg: int, /) -> None: ...
1862
-
1863
- @property
1864
- def height(self) -> int: ...
1865
-
1866
- @height.setter
1867
- def height(self, arg: int, /) -> None: ...
1868
-
1869
- @property
1870
- def bitrate(self) -> int: ...
1871
-
1872
- @bitrate.setter
1873
- def bitrate(self, arg: int, /) -> None: ...
1874
-
1875
- def create_openh264_video_encoder(openh264: str) -> VideoEncoder: ...
1876
-
1877
- def create_videotoolbox_video_encoder() -> VideoEncoder: ...
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: libdatachannel-py
3
- Version: 2025.1.0.dev7
3
+ Version: 2025.1.0.dev9
4
4
  Summary: libdatachannel-py is a Python binding for libdatachannel.
5
5
  Home-page: https://github.com/shiguredo/libdatachannel-py
6
6
  License-Expression: Apache-2.0
@@ -39,6 +39,7 @@ Please read <https://github.com/shiguredo/oss/blob/master/README.en.md> before u
39
39
 
40
40
  - [nanobind](https://github.com/wjakob/nanobind) を利用しています
41
41
  - [Opus](https://opus-codec.org/) を利用した Opus ソフトウェアエンコード/デコードに対応しています
42
+ - [libaom](https://aomedia.googlesource.com/aom/) を利用した AV1 ソフトウェアエンコード/デコードに対応しています
42
43
  - [OpenH264](https://www.openh264.org/) を利用した H.264 ソフトウェアエンコード/デコードに対応しています
43
44
  - [Apple Video Toolbox](https://developer.apple.com/documentation/videotoolbox) を利用した H.264/H.265 ハードウェアエンコード/デコードに対応しています
44
45
 
@@ -15,16 +15,19 @@ src/libdatachannel_py.egg-info/PKG-INFO
15
15
  src/libdatachannel_py.egg-info/SOURCES.txt
16
16
  src/libdatachannel_py.egg-info/dependency_links.txt
17
17
  src/libdatachannel_py.egg-info/top_level.txt
18
+ tests/test_audio_codec.py
18
19
  tests/test_candidate.py
19
20
  tests/test_configuration.py
20
21
  tests/test_description.py
21
22
  tests/test_frameinfo.py
22
23
  tests/test_h265nalunit.py
24
+ tests/test_libyuv.py
23
25
  tests/test_mediahandler.py
24
26
  tests/test_message.py
25
27
  tests/test_nalunit.py
26
28
  tests/test_packetizationconfig.py
27
29
  tests/test_peerconnection.py
30
+ tests/test_prop_audio_codec.py
28
31
  tests/test_reliability.py
29
32
  tests/test_rtppacketizer.py
30
33
  tests/test_video_codec.py