vue video重复视频 设置 srcObject 视频流不占用资源 减少资源浪费

// 直接设置srcObject减少获取视频流:通过 captureStream() 方法从下方视频元素获取视频流。

// 设置 srcObject:将获取到的视频流设置为上方视频的 srcObject 减少资源浪费

javascript 复制代码
// 获取到需要复制到的dom元素   
const firstVideoElement = proxy.$refs.firstVideo;
// 获取需要复制的视频流元素
const activeVideoElement = proxy.$refs[`videoRefs${index}`][0];
// 赋值给需要显示的dom
firstVideoElement.srcObject = activeVideoElement.captureStream();
javascript 复制代码
onMounted(async () => {
    try {
        const { data } = await getCameraInfo(props.id);
        if (!data) return;
        // console.log("视频监控", data);
        streams.value = data;
        if (streams.value && streams.value.length > 0) {
            await nextTick();
            streams.value.forEach((stream, index) => {
                let videoElement = proxy.$refs["videoRefs" + index][0]; // 通过 ref 获取视频元素
                const webRtcServer = new WebRtcStreamer(videoElement, url);
                webRtcServer.connect(stream.rtspVideoUrl);
                webRtcServers.value.push(webRtcServer); // 存储 WebRtcStreamer 实例
            });
            // 监听 loadedmetadata 事件
            proxy.$refs["videoRefs0"][0].addEventListener('loadedmetadata', () => {
                const firstVideoElement = proxy.$refs.firstVideo;
                const activeVideoElement = proxy.$refs[`videoRefs0`][playNum.value];
                firstVideoElement.srcObject = activeVideoElement.captureStream();
            });
            // nextTick(() => {
            //     // 默认加载第一个视频
            //     const firstVideoElement = proxy.$refs.firstVideo;
            //     // const firstWebRtcServer = new WebRtcStreamer(firstVideoElement, url);
            //     // firstWebRtcServer.connect(streams.value[playNum.value].rtspVideoUrl);
            //     // webRtcServers.value.push(firstWebRtcServer);
            //     const activeVideoElement = proxy.$refs[`videoRefs${index}`][0];
            //     firstVideoElement.srcObject = activeVideoElement.captureStream();
            // });
        }
    } catch (error) {
        console.error('Failed to fetch camera info:', error);
    }
});

原视频流加载完成后,再复制流

相关推荐
海鸥两三几秒前
基于 Vue 3 + 高德地图的网格规划系统实战(有源码)
前端·javascript·vue.js
逸A5 分钟前
某里v2反混淆 codec 化路上踩到的两个隐蔽坑:被清零的 salt 与 opaque loop bound
javascript·人工智能·目标跟踪
丷丩9 分钟前
MapLibre GL JS第11课:获取鼠标指针坐标
前端·javascript·gis·地图·mapbox·maplibre gl js
代码AI弗森17 分钟前
前端周刊第 467 期[特殊字符] 本期精选目录
前端
随便的名字17 分钟前
前端路由的底层逻辑:URL 中 # 和 ? 的区别与关系详解
前端
kongba00719 分钟前
ttyd Web终端安装指南(OpenCloudOS 9)
linux·前端
zhoumeina9920 分钟前
前端串行合成流程 + 每张图上传接口
前端·状态模式
风骏时光牛马21 分钟前
Swift 基于MVVM架构实现完整列表数据展示与交互功能实战案例
前端
就叫_这个吧30 分钟前
JavaScript基础数据类型、运算符、数组、函数的定义及DOM方式应用
开发语言·前端·javascript
作业逆流成河37 分钟前
别再一次性重构枚举了:如何把一个真实后台项目的状态字典,渐进式迁移到enum-plus?
前端·javascript·开源