Function use_media

Source
pub fn use_media<'hook>(
    node: NodeRef,
    src: String,
) -> impl 'hook + Hook<Output = UseMediaHandle>
Expand description

This hook plays video or audio and exposes its controls.

§Example

use yew_hooks::prelude::*;

#[function_component(UseMedia)]
fn media() -> Html {
    let node_video = use_node_ref();

    let video = use_media(
        node_video.clone(),
        "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4".to_string(),
    );

    let onplay = {
        let video = video.clone();
        Callback::from(move |_| video.play())
    };

    let onpause = {
        let video = video.clone();
        Callback::from(move |_| video.pause())
    };

    let onmute = {
        let video = video.clone();
        Callback::from(move |_| video.mute())
    };

    let onunmute = {
        let video = video.clone();
        Callback::from(move |_| video.unmute())
    };

    let onvol = {
        let video = video.clone();
        Callback::from(move |_| video.set_volume(0.5))
    };
    let onseek = {
        let video = video.clone();
        Callback::from(move |_| video.seek(*video.time + 5.0))
    };

    html! {
        <>
            <p><video ref={node_video} width="640" height="360" /></p>
            <p>
                { " Duration: " } { *video.duration }
                { " Time: " } { *video.time }
                { " Volume: " } { *video.volume }
            </p>
            <p>
                <button onclick={onplay} disabled={*video.playing}>{ "Play" }</button>
                <button onclick={onpause} disabled={*video.paused}>{ "Pause" }</button>
                <button onclick={onmute} disabled={*video.muted}>{ "Mute" }</button>
                <button onclick={onunmute} disabled={!*video.muted}>{ "Unmute" }</button>
                <button onclick={onvol}>{ "Volume: 50%" }</button>
                <button onclick={onseek}>{ "Seek: +5 secs" }</button>
            </p>
        </>
    }
}

§Note

When used in function components and hooks, this hook is equivalent to:

pub fn use_media(node: NodeRef, src: String) -> UseMediaHandle {
    /* implementation omitted */
}