前端播放器使用(含画中画效果)

使用:
<VideoPlayer src={domainUrl + preViewItem.videoUrl} autoplay={true} controls={true} />



源代码:
import React, {memo, useEffect, useState, forwardRef, useImperativeHandle} from 'react';
import videojs from 'video.js';
import 'video.js/dist/video-js.css';

const VideoPlayer = (props, ref) => {
    const {videoRef, loop, controls, preload, autoplay, muted, onMouseOver, onMouseLeave, poster} = props;
    const [videoPlayerId] = useState(`videoPlayer${_.random(0, 1000000)}`);
    const [src, setSrc] = useState(props.src);
    const [videoPlayer, setVideoPlayer] = useState();

    useImperativeHandle(ref, () => ({
        updateCurrentTime
    }));

    useEffect(() => {
        setSrc(props.src);
        videoPlayer && videoPlayer.src([{src: props.src}, {src: props.src, type: 'application/x-mpegURL'}]);
    }, [props.src]);

    const crateVideoPlayer = () => {
        const options = {
            loop,
            controls,
            preload,
            autoplay,
            muted,
            poster,
            loadingSpinner: {},
            playbackRates: [0.5, 1, 1.5, 2]
        };
        return videojs(videoPlayerId, options);
    };

    useEffect(() => {
        videoPlayer && videoPlayer.poster(poster);
    }, [poster]);

    const destroyVideoPlayer = player => {
        player && player.pause();
        player && player.dispose();
        // 退出画中画模式
        if (document.pictureInPictureElement) {
            document.exitPictureInPicture().catch(error => {
                console.error('Failed to exit picture-in-picture mode:', error);
            });
        } else if (document.webkitPictureInPictureElement) {
            document.webkitExitPictureInPicture().catch(error => {
                console.error('Failed to exit picture-in-picture mode:', error);
            });
        }
    };

    useEffect(() => {
        const player = crateVideoPlayer();
        setVideoPlayer(player);
        return () => {
            destroyVideoPlayer(player);
            player && player.dispose();
        };
    }, []);

    const handleMouseOver = () => {
        onMouseOver && onMouseOver();
    };

    const handleMouseLeave = () => {
        onMouseLeave && onMouseLeave();
        // showPoster();
    };

    const updateCurrentTime = currentTime => {
        if (videoPlayer) {
            videoPlayer.currentTime(0);
            // const currentPoster = videoPlayer.poster();
            // videoPlayer.poster(currentPoster);
            videoPlayer.pause();
        }
    };

    const showPoster = () => {
        const vjsPosters = document.getElementById(videoPlayerId)?.getElementsByClassName('vjs-poster');
        _.forEach(vjsPosters, vjsPoster => {
            vjsPoster.style.display = 'block';
        });
    };

    const hidePoster = () => {
        const vjsPosters = document.getElementById(videoPlayerId)?.getElementsByClassName('vjs-poster');
        _.forEach(vjsPosters, vjsPoster => {
            vjsPoster.style.display = 'none';
        });
    };

    // const handleMouseEnter = () => {
    //  videoPlayer && videoPlayer.userActive(true);
    // };

    return (
        <div ref={ref} onMouseOver={handleMouseOver} onMouseLeave={handleMouseLeave}>
            <video ref={videoRef} id={videoPlayerId} className="video-js vjs-default-skin">
                <source id="source" src={src} />
                <source id="source" src={src} type="application/x-mpegURL" />
            </video>
        </div>
    );
};
export default forwardRef(VideoPlayer);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端使用播放器插件webplugin.exe主要用于在网页中播放音频或视频内容。该插件通常为网页开发人员提供了一种简单的方式来嵌入多种格式的音视频文件,并实现播放、暂停、停止、调节音量和全屏等基本功能。 首先,在使用webplugin.exe之前,需要确保已经在网页的代码中导入相应的插件文件。插件文件通常以.webplugin或.plugin的扩展名保存,并与网页的HTML代码相互连接。 一般来说,插件的使用方法包括以下几个步骤: 1. 在网页中的合适位置创建一个<embed>标签或<object>标签,用来嵌入插件。 2. 在标签中设置插件的属性,如宽度、高度、地址、类型等。例如,可以设置src属性来指定要播放的音频或视频文件的路径。 3. 在标签中设置其他必要的属性,如自动播放、循环播放、控制按钮的显示等。 4. 刷新网页,即可在指定的位置看到嵌入的播放器插件。 使用webplugin.exe的另一个重要要点是与其他JS或CSS文件的交互。开发人员可以通过调用插件提供的JavaScript函数或通过使用对应的CSS样式来控制播放器的外观和行为。 总结起来,前端使用播放器插件webplugin.exe可以实现方便的音视频播放功能,无论是播放本地文件还是在线音视频流,都可以通过嵌入相关的HTML标签和设置相应的属性来实现。但是需要注意兼容性问题,因为不同的浏览器对插件的支持情况有所不同,所以需要针对不同浏览器做相应的兼容性处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值