WidgetStream

A WidgetStream creates a MediaStream out of any widget.

[1]:
from ipywebrtc import WidgetStream, VideoStream

Example with pythreejs: streaming of a webgl canvas

[2]:
from pythreejs import Mesh, SphereGeometry, MeshLambertMaterial, PerspectiveCamera, DirectionalLight, Scene, AmbientLight, Renderer, OrbitControls
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
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-68a83e58efcb> in <module>
----> 1 from pythreejs import Mesh, SphereGeometry, MeshLambertMaterial, PerspectiveCamera, DirectionalLight, Scene, AmbientLight, Renderer, OrbitControls
      2 ball = Mesh(
      3     geometry=SphereGeometry(radius=1),
      4     material=MeshLambertMaterial(color='red'),
      5     position=[2, 1, 0]

ModuleNotFoundError: No module named 'pythreejs'
[3]:
# the webgl_stream will be updated after the scene has changed (so drag the above ball around if nothing happens)
webgl_stream = WidgetStream(widget=renderer)
webgl_stream
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-cefdf25c17ba> in <module>
      1 # the webgl_stream will be updated after the scene has changed (so drag the above ball around if nothing happens)
----> 2 webgl_stream = WidgetStream(widget=renderer)
      3 webgl_stream

NameError: name 'renderer' is not defined
[4]:
# You can limit the fps
webgl_stream2 = WidgetStream(widget=renderer, max_fps=5)
webgl_stream2
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-ddf1e6b2bf7d> in <module>
      1 # You can limit the fps
----> 2 webgl_stream2 = WidgetStream(widget=renderer, max_fps=5)
      3 webgl_stream2

NameError: name 'renderer' is not defined

Example with ipywidgets: streaming of a slider widget

[5]:
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
[6]:
widget_stream = WidgetStream(widget=slider, max_fps=1)
widget_stream
[7]:
# Close the stream
widget_stream.close()

Example with ipyleaflet: streaming of a map widget

[8]:
from ipyleaflet import Map
m = Map(center=(46, 14), zoom=5)
m
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-ff582678bacf> in <module>
----> 1 from ipyleaflet import Map
      2 m = Map(center=(46, 14), zoom=5)
      3 m

ModuleNotFoundError: No module named 'ipyleaflet'
[9]:
map_stream = WidgetStream(widget=m, max_fps=1)
map_stream
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-fe4837077166> in <module>
----> 1 map_stream = WidgetStream(widget=m, max_fps=1)
      2 map_stream

NameError: name 'm' is not defined
[10]:
map_stream.close()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-40e8f44f56da> in <module>
----> 1 map_stream.close()

NameError: name 'map_stream' is not defined
[ ]: