腾讯云TRTC无UI集成——分享屏幕主流、辅流(Vue2+JS+TRTC无UI集成)

先阐述一下问题,在项目中用到腾讯云的TRTC,A端发布A1、A2两个视频源,在B端订阅A1、A2使用两个view进行播放渲染

问题主流视频源和辅流视频源渲染在同一view上,控制台报错

// 播放远端视频 TRTCService.js;
setRemoteVideo(view) {this.trtcSdk.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, (event) => {if (event.streamType === TRTC.TYPE.STREAM_TYPE_MAIN) {console.log("开启主流视频源", view);this.trtcSdk.startRemoteVideo({userId: event.userId,streamType: event.streamType,view,});} else if (event.streamType === TRTC.TYPE.STREAM_TYPE_SUB) {console.log("开启辅流视频源", view);this.trtcSdk.startRemoteVideo({userId: event.userId,streamType: event.streamType,view,});}});
}// vue组件中调用
this.setRemoteVideo(this.el_scan),
this.setRemoteVideo(this.el_other),

监听订阅远端视频事件里判断主流和辅流传不同的view实例,运行结果是主流和辅流视频渲染在同一个view上,控制台报错如下:
在这里插入图片描述
问题原因:

每次触发 REMOTE_VIDEO_AVAILABLE 事件时都会调用 startRemoteVideo 方法,但由于 on
事件监听器是全局的,每次调用 setRemoteVideo(view)
方法时,都会为同一事件添加一个新的监听器。因此,当触发该事件时,多个监听器会被执行,导致视频源被渲染在多个视图上

解决这个问题的步骤如下:

在 setRemoteVideo(view) 中移除旧的监听器: 每次调用 setRemoteVideo(view)时,先移除之前可能存在的监听器,防止重复监听
在事件监听器中判断 view 参数: 在触发事件时,根据传入的 view参数来区分主流视频源和辅流视频源,确保它们渲染到正确的视图上

代码如下:

setRemoteVideo(view) {// 移除之前的监听器,防止重复监听this.trtcSdk.off(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE);this.trtcSdk.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, (event) => {if (view === this.el_scan && event.streamType === TRTC.TYPE.STREAM_TYPE_MAIN) {console.log("开启主流视频源");this.trtcSdk.startRemoteVideo({userId: event.userId,streamType: event.streamType,view,});} else if (view === this.el_other && event.streamType === TRTC.TYPE.STREAM_TYPE_SUB) {console.log("开启辅流视频源");this.trtcSdk.startRemoteVideo({userId: event.userId,streamType: event.streamType,view,});}});
}

运行结果:
在这里插入图片描述

控制台正常输出,但是主流视频源和辅流视频源还是渲染在同一个view上

继续分析:

由于两次调用 setRemoteVideo(view) 时,view 参数在 TRTC SDK内部没有正确区分,导致最后一次调用覆盖了前一次调用的效果。因此,尽管控制台只输出一次,但实际上两个视频流都渲染在了同一个 view 上

继续尝试:

确保每个视频流都有独立的渲染逻辑: 将主流和辅流的处理逻辑分开,避免它们在同一个 view 上覆盖
使用不同的事件监听器或参数区分: 可以通过将主流和辅流的视频渲染逻辑完全分离,在不同的监听器中处理它们,确保每个流都使用独立的 view

代码如下:

setRemoteVideoMain(viewMain) {this.trtcSdk.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, (event) => {if (event.streamType === TRTC.TYPE.STREAM_TYPE_MAIN) {console.log("开启主流视频源");this.trtcSdk.startRemoteVideo({userId: event.userId,streamType: event.streamType,view: viewMain,});}});
}
setRemoteVideoSub(viewSub) {this.trtcSdk.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, (event) => {if (event.streamType === TRTC.TYPE.STREAM_TYPE_SUB) {console.log("开启辅流视频源");this.trtcSdk.startRemoteVideo({userId: event.userId,streamType: event.streamType,view: viewSub,});}});
}// 组件中调用
this.setRemoteVideoSub(this.el_scan),
this.setRemoteVideoMain(this.el_other),

完美解决问题,主流和辅流视频源渲染在指定的位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523339.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构入门】排序算法之插入排序与选择排序

目录 前言 一、排序的概念及运用 1.排序的概念 2.排序的运用 3.常见排序算法 二、插入排序与选择排序 2.1插入排序 2.1.1直接插入排序 1)基本思想 2)具体步骤 3)算法特性 4)算法实现 2.1.2希尔排序 1) 基本思想 2&…

草原灭火车的功能与性能_鼎跃安全

在内蒙古的草原火灾中,水陆两栖全地形草原灭火车曾多次用于紧急救援。其强大的越野能力和高速反应,使其在广袤的草原上能够迅速到达火场,并使用集成的多功能灭火设备进行灭火作业,有效防止了火灾的进一步蔓延。 水陆两栖全地形草原…

React学习-hooks

官方文档:https://zh-hans.react.dev/reference/react/useActionState 1.useEffect(setup, dependencies?) 1.1 基础使用 //hooks import { useEffect } from "react"; import "./App.css";function App(){useEffect(()>{console.log(us…

redis的共享session应用

项目背景: 该项目背景就是黑马的黑马点评项目。 一:基于Session实现验证码登录流程 基本的登录流程我们做了很多了。这个是短信登录流程 其实和普通的登录流程就多了一个生成验证码,并将验证码保存在session中,并且呢&#xf…

vue3中使用supermap icilent3d for cesium

记录从头开始学习supermap icilent3d fro cesium 1.新建vue3项目 npm create vitelatest 添加这个,自动打开浏览器 2.使用supermap icilent3d for Cesium 复制这个Cesium,放到pulibc目录下面 然后分别引入css和js 然后就可以使用了,但是会…

Oracle 客户端 PL/SQL Developer 15.0.4 安装与使用

目录 官网下载与安装 切换中文与注册 连接Oracle数据库 tnsnames.ora 文件使用 Oracle 客户端 PL/SQL Developer 12.0.7 安装、数据导出、Oracle 执行/解释计划、for update。 官网下载与安装 1、官网:https://www.allroundautomations.com/products/pl-sql-d…

【STM32】通用定时器TIM(输出比较)

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 前言 输出比较简介 PWM简介 输出比较配置 初始化IO口 输出比较初始化 输出比较代码 PWM.h PWM.c main.c 应用案例 前言 建议先阅读这篇博客,理解时基单元的配置 【…

CDGA|数据治理:构建高效数据管理体系的实践路径

在当今数字化时代,数据已成为企业最宝贵的资产之一,其质量、安全性和有效利用率直接影响着企业的决策能力、运营效率和市场竞争力。因此,数据治理作为确保数据质量、促进数据价值最大化的关键环节,其重要性日益凸显。本文将从几个…

机械学习—零基础学习日志(概率论总笔记1)

概率论的起源 在历史上有明确记载的最早研究随机性的数学家是帕斯卡和费马。帕斯卡就是最早发明机械计算机的那位数学家,他并不是赌徒,但是他有些赌徒朋友,那些人常常玩一种掷骰子游戏,游戏规则是由玩家连续掷4次骰子&#xff0c…

【王树森】Vision Transformer (ViT) 用于图片分类(个人向笔记)

图片分类任务 给定一张图片,现在要求神经网络能够输出它对这个图片的分类结果。下图表示神经网络有40%的信心认定这个图片是狗 ResNet(CNN)曾经是是图像分类的最好模型在有足够大数据做预训练的情况下,ViT要强于ResNetViT 就是Tr…

(十五)SpringCloudAlibaba-Sentinel持久化到Nacos

前言 在前面我们已经将Sentinel配置的规则持久化到系统的文件中。本章节我们将Sentinel持久化到Nacos中; 传送门(Sentinel数据持久化到文件)https://blog.csdn.net/weixin_45876411/article/details/140742963 默认情况下 Sentinel 只能接收到 Nacos 推送的消息,但…

火情监测识别摄像机

火情监测识别摄像机 是一种用于监测和识别火灾风险的设备,通常用于森林、草原以及其他火灾易发区域。这种摄像机能够实时监测周围的环境,并使用图像识别技术来识别火灾的迹象。 这些摄像机通常配备红外热成像技术和视频分析算法,可以在白天和…

程序二义性举例

// 程序二义性.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> using namespace std; void f(int x) {cout << "---" << x << endl;} void f(int x,int y10) {cout << "" &l…

客流预测 | 基于Transformer下车站点客流推断研究(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于Transformer的车站客流推断研究是指利用Transformer模型来预测车站的客流情况。Transformer是一种强大的深度学习模型&#xff0c;特别擅长处理序列数据。研究可以为城市交通管理提供重要决策支持&#xff0c;帮…

【系统分析师】-面向对象方法

目录 1、基本概念 2、UML 2.1、基本结构 2.1.1.构造块 2.1.1.1、事物 2.1.1.2、关系 2.1.1.3、图形 2.1.2.规则 2.1.3.公共机制 2.2、41视图 3、面向对象分析OOA 3.1、用例模型 3.2、分析模型 4、面向对象设计OOD 4.1、细分 4.2、设计原则 5、面向对象的程序设…

传统CV算法——基于harris检测算法实现角点检测

角点 角点是图像中的一个特征点&#xff0c;指的是两条边缘交叉的点&#xff0c;这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中&#xff0c;角点是重要的特征&#xff0c;因为它们通常是图像中信息丰富的区域&#xff0c;可以用于图像分析、对象识别、3D…

大模型(LLM)和知识库的基础介绍

文章目录 概要整体架构流程结合LLM与RAP的优势小结 概要 随着自然语言处理技术的发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经成为了人工智能领域中的一个重要组成部分。这些模型通常具有数亿到数千亿个参数&#xff0c;能够理解和生成自然语言&#xff0c;从…

LabVIEW程序员错误排查思路

当LabVIEW程序员在开发过程中遇到难以解决的错误且网上搜不到答案时&#xff0c;需要采取系统性的方法进行排查和解决。这包括回顾代码逻辑、深入理解LabVIEW的底层机制、参考专业文献和求助社区等方式。下面将从多角度详细解读专业程序员在面对这种困境时的应对策略&#xff0…

网络安全等级保护:等级保护工作、分级保护工作、密码管理工作三者之间的关系

上次我整理了一篇文字叫《等级保护、等级保护测评、分级保护测评、密码保护测评之间的区别与联系》&#xff0c;后来发现这种措辞还是存在问题&#xff0c;今天在此重新做个探讨&#xff0c;同时进行更正。我们很多从事信息安全行业的人&#xff0c;交流时常常会提及“等保”“…

【淘宝采集项目经验分享】商品评论采集 |商品详情采集 |关键词搜索商品信息采集

商品评论采集 1、输入商品ID 2、筛选要抓取评论类型 3、填写要抓取的页数 4、立刻提交-启动测试 5、等爬虫结束后就可以到“爬取结果”里面下载数据 商品详情采集 1、输入商品ID 2、立刻提交-启动爬虫 3、等爬虫结束后就可以到“爬取结果”里面下载数据 taobao.item_…