ipywebrtc
¶
ipywebrtc stellt WebRTC- und die MediaStream-API in Jupyter Notebooks zur Verfügung. Damit lassen sich z.B. Screenshots aus einem MediaStream erstellen und mit skimage weiter analysieren. Ihr könnt mit ipywebrtc
jedoch nicht nur Video-, Bild-, Audio- und Widget-Daten lesen sondern auch Stream-Objekte aufzeichnen. Es
stellt sogar eine einfache Chat-Funktion zur Verfügung.
Installation¶
ipywebrtc
wird sowohl im Kernel- wie auch im Jupyter-Environment installiert mit
$ pipenv install ipywebrtc
Beispiele¶
Beispiel VideoStream
¶
[1]:
from ipywebrtc import VideoStream, VideoRecorder
[2]:
!cd ../../../../data/
!dvc import-url https://github.com/maartenbreddels/ipywebrtc/raw/master/docs/source/Big.Buck.Bunny.mp4
Importing 'https://github.com/maartenbreddels/ipywebrtc/raw/master/docs/source/Big.Buck.Bunny.mp4' -> 'Big.Buck.Bunny.mp4'
Saving information to 'Big.Buck.Bunny.mp4.dvc'.
To track the changes with git, run:
git add Big.Buck.Bunny.mp4.dvc
[3]:
video = VideoStream.from_url("../../../../data/Big.Buck.Bunny.mp4")
video
Aufnehmen¶
Eine Aufnahmetaste lässt sich mit MediaRecorder.record
erstellen, für Videos mit:
[4]:
recorder = VideoRecorder(stream=video)
recorder
Speichern¶
Der Stream kann entweder über die Download-Taste erfolgen oder programmatisch, z.B. mit:
[5]:
recorder.save("../../../../data/example.webm")
Beispiel WidgetStream
¶
Ein WidgetStream erstellt einen MediaStream aus einem beliebigen Widget.
[6]:
from ipywebrtc import VideoStream, WidgetStream
[7]:
from pythreejs import (
AmbientLight,
DirectionalLight,
Mesh,
MeshLambertMaterial,
OrbitControls,
PerspectiveCamera,
Renderer,
Scene,
SphereGeometry,
)
ball = Mesh(
geometry=SphereGeometry(radius=1),
material=MeshLambertMaterial(color="red"),
position=[2, 1, 0],
)
c = PerspectiveCamera(
position=[0, 5, 5],
up=[0, 1, 0],
children=[
DirectionalLight(color="white", position=[3, 5, 1], intensity=0.5)
],
)
scene = Scene(children=[ball, c, AmbientLight(color="#777777")])
renderer = Renderer(
camera=c,
scene=scene,
controls=[OrbitControls(controlling=c)]
)
renderer
Der folgende webgl_stream
wird aktualisiert, nachdem sich in der obigen Szene etwas ändert. Dies könnt ihr erreichen indem ihr den Ball mit der Maus verschiebt.
[8]:
webgl_stream = WidgetStream(widget=renderer)
webgl_stream
Alternativ könnt ihr auch einen Slider verwenden:
[9]:
from ipywidgets import FloatSlider
slider = FloatSlider(
value=7.5,
step=0.1,
description="Test:",
disabled=False,
continuous_update=False,
orientation="horizontal",
readout=True,
readout_format=".1f",
)
slider