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

本文主要是介绍腾讯云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),

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

这篇关于腾讯云TRTC无UI集成——分享屏幕主流、辅流(Vue2+JS+TRTC无UI集成)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123936

相关文章

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/