mirror of
https://github.com/pyscript/pyscript.git
synced 2025-12-19 18:27:29 -05:00
* add media module * add Device class to media * add camera test example * add snap, download and other convenience methods * load devices automagically * add draw method to canvas * add docstring for download * add docstrings to draw method * add docstrings to snap * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * load devices as soon as the page loads * solve conflict * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * remove display calls listing devices in camera example * fix typos and other small errors * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix typo in docstring * fix error message typo * replace setAttribute on JS properties with accessors * remove debug statement * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add docstrings * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add docstrings to camera example * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
33 lines
887 B
Python
33 lines
887 B
Python
from pyodide.ffi import create_proxy
|
|
from pyscript import display, document, when, window
|
|
from pyweb import media, pydom
|
|
|
|
devicesSelect = pydom["#devices"][0]
|
|
video = pydom["video"][0]
|
|
devices = {}
|
|
|
|
|
|
async def list_media_devices(event=None):
|
|
"""List the available media devices."""
|
|
global devices
|
|
for i, device in enumerate(await media.list_devices()):
|
|
devices[device.id] = device
|
|
label = f"{i} - ({device.kind}) {device.label} [{device.id}]"
|
|
devicesSelect.options.add(value=device.id, html=label)
|
|
|
|
|
|
@when("click", "#pick-device")
|
|
async def connect_to_device(e):
|
|
"""Connect to the selected device."""
|
|
device = devices[devicesSelect.value]
|
|
video._js.srcObject = await device.get_stream()
|
|
|
|
|
|
@when("click", "#snap")
|
|
async def camera_click(e):
|
|
"""Take a picture and download it."""
|
|
video.snap().download()
|
|
|
|
|
|
await list_media_devices()
|