当前位置: 首页 > news >正文

Java对接腾讯多人音视频房间回调接口示例

在前面我们已经对接好了腾讯多人音视频房间相关内容:Java对接腾讯多人音视频房间示例
为了完善业务逻辑,我们还需要对接它的一些回调接口 官方文档地址
主要就下面这些

在这里插入图片描述

这里因为比较简单直接上代码
里面有些工具类和上一章一样这里就没贴,需要的看下我上一章Java对接腾讯多人音视频房间示例


import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;/*** @Description: 腾讯会议回调* @Author: Sakura* @Date: 2023/12/18 14:43*/
@Log
@RestController
@RequestMapping("/txcloud/callback")
public class TxCallbackController {@Value("${tencent.roomctl.SDKAppId}")private Long SDKAppId;@AutowiredTxCallbackService txCallbackService;@AutowiredCallbackListenerStrategyContext callbackListenerStrategyContext;//    // 实例参数
//    {
//        "address": "https://www.zscloud.work:29000/api/txcloud/callback/listener",
//        "actions": ["createRoom", "destroyRoom", "updateRoomInfo", "enterRoom", "exitRoom", "updateUserRole", "takeSeat", "leaveSeat"]
//    }/*** @Description: 配置回调地址* @Author: Sakura* @Date: 2023/12/18 14:52*/@PostMapping("/create")public Result createCallback(@RequestBody CreateCallbackRequest createCallbackRequest) {return txCallbackService.createCallback(createCallbackRequest);}/** * @Description: 修改回调地址配置* @Author: Sakura* @Date: 2023/12/19 15:55*/@PostMapping("/update")public Result updateCallback(@RequestBody CreateCallbackRequest createCallbackRequest) {return txCallbackService.updateCallback(createCallbackRequest);}/*** @Description: 回调监听* @Author: Sakura* @Date: 2023/12/19 11:00*/@PostMapping("/listener")public CallbackResponse callbackListener(@RequestParam Long sdkappid, @RequestParam String command,@RequestParam String contenttype, @RequestParam String clientip,@RequestParam String optplatform,@RequestBody CallbackRoomInfoRequest callbackRoomInfoRequest) {log.info("回调监听:" + "sdkappid:" + sdkappid + "  command:" + command + "  " + callbackRoomInfoRequest.toString());// 目前只能校验SDKAppId是否一致if (!SDKAppId.equals(sdkappid)) {return CallbackResponse.ERROR();}return callbackListenerStrategyContext.callbackListener(command, callbackRoomInfoRequest);}}

/** * @Description: 多人视频管理* @Author: Sakura* @Date: 2023/12/14 17:46
*/
public interface TxCallbackService {Result createCallback(CreateCallbackRequest createCallbackRequest);Result updateCallback(CreateCallbackRequest createCallbackRequest);}

import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;/** * @Description: 回调管理* @Author: Sakura* @Date: 2023/12/18 14:52
*/
@Log
@Service
public class TxCallbackServiceImpl implements TxCallbackService {@AutowiredRoomctlUtil roomctlUtil;/*** @Description: 预约会议* @Author: Sakura* @Date: 2023/12/14 17:46*/@Override@Transactionalpublic Result createCallback(CreateCallbackRequest createCallbackRequest) {String result = roomctlUtil.createCallback(createCallbackRequest.getAddress(), createCallbackRequest.getActions());if (!"ok".equals(result)) {return Result.ERROR(result);}return Result.SUCCESS();}@Override@Transactionalpublic Result updateCallback(CreateCallbackRequest createCallbackRequest) {String result = roomctlUtil.updateCallback(createCallbackRequest.getAddress(), createCallbackRequest.getActions());if (!"ok".equals(result)) {return Result.ERROR(result);}return Result.SUCCESS();}}

下面是请求参数的封装类


import lombok.Data;
import lombok.EqualsAndHashCode;import java.util.List;/** * @Description: 创建回调参数* @Author: Sakura* @Date: 2023/12/18 14:50
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CreateCallbackRequest extends PageRequest {private static final long serialVersionUID = 1L;// 回调的地址,需要以 http/https 开头,建议使用更为安全的 httpsprivate String address;// 需要触发回调的情景,列表请参考 回调命令字private List<String> actions;}

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;/** * @Description: 回调房间详细信息 * @Author: Sakura* @Date: 2023/12/19 13:43
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CallbackRoomInfoRequest implements Serializable {private static final long serialVersionUID = 1L;// 操作的用户 ID@JsonProperty("UserId")private String UserId;// 角色类型:0为房主,1为管理员,2为普通成员@JsonProperty("UserRole")private Integer UserRole;// 操作的房间 ID@JsonProperty("RoomId")private String RoomId;// 当前房间成员数量@JsonProperty("MemberCount")private Integer MemberCount;// 用户退出的原因@JsonProperty("ExitReason")private String ExitReason;// 当前的麦位数量@JsonProperty("SeatCount")private Integer SeatCount;// 房间详情@JsonProperty("RoomInfo")private RoomInfoRequest RoomInfo;// 事件触发时间戳@JsonProperty("EventTime")private Long EventTime;
}

import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;/*** @Description: 回调房间信息* @Author: Sakura* @Date: 2023/12/19 13:41*/
@Data
@EqualsAndHashCode(callSuper = false)
public class RoomInfoRequest implements Serializable {private static final long serialVersionUID = 1L;// 最大麦位数量,默认为套餐包上限,(直播最大16个 默认16)@JsonProperty("MaxSeatCount")private Integer MaxSeatCount;// 房间名称。默认为房间 ID@JsonProperty("RoomName")private String RoomName;// 房间类型:1为会议,2为直播\n 默认为:会议1@JsonProperty("RoomType")private Integer RoomType;// 麦控模式:1为自由发言模式,2为举手发言模式,3为就座后发言(抢麦位)\n默认为:自由发言模式1@JsonProperty("SpeechMode")private Integer SpeechMode;// 全体禁画 默认 false@JsonProperty("DisableVideo")private Boolean DisableVideo;// 全体静音 默认 false@JsonProperty("DisableAudio")private Boolean DisableAudio;// 禁止所有成员发送文本消息 默认 false@JsonProperty("DisableMessage")private Boolean DisableMessage;}

再就是回调这块,因为回调的都是一个方法,通过command来区分,所以这里用策略模式来处理


import lombok.SneakyThrows;
import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;/*** @author Sakura* @date 2023/12/19 11:16*/
@Service
public class CallbackListenerStrategyContext {// 策略采用lambda的方法存储Map<String, Function<CallbackRoomInfoRequest, CallbackResponse>> strategyContextMap = new HashMap<>();@ResourceCallbackListenerService callbackListenerService;@PostConstruct@SneakyThrowspublic void setStrategyMap() {// 配置回调方法strategyContextMap.put("createRoom",(callbackRoomInfoRequest)-> callbackListenerService.createRoom(callbackRoomInfoRequest));strategyContextMap.put("destroyRoom",(callbackRoomInfoRequest)-> callbackListenerService.destroyRoom(callbackRoomInfoRequest));strategyContextMap.put("updateRoomInfo",(callbackRoomInfoRequest)-> callbackListenerService.updateRoomInfo(callbackRoomInfoRequest));strategyContextMap.put("enterRoom",(callbackRoomInfoRequest)-> callbackListenerService.enterRoom(callbackRoomInfoRequest));strategyContextMap.put("exitRoom",(callbackRoomInfoRequest)-> callbackListenerService.exitRoom(callbackRoomInfoRequest));strategyContextMap.put("takeSeat",(callbackRoomInfoRequest)-> callbackListenerService.takeSeat(callbackRoomInfoRequest));strategyContextMap.put("leaveSeat",(callbackRoomInfoRequest)-> callbackListenerService.leaveSeat(callbackRoomInfoRequest));}public CallbackResponse callbackListener(String command, CallbackRoomInfoRequest callbackRoomInfoRequest){// 根据command获取对应的方法返回策略Function<CallbackRoomInfoRequest, CallbackResponse> callbackListenerFunc = strategyContextMap.get(command);return callbackListenerFunc.apply(callbackRoomInfoRequest);}
}

import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author Sakura* @date 2023/12/19 11:42*/
@Service
@Log
public class CallbackListenerService {// 此处用来统一处理多人视频房间回调++++++++++++++++++++++++++++++++++++++++++++// 创建房间回调public CallbackResponse createRoom(CallbackRoomInfoRequest callbackRoomInfoRequest){log.info("创建房间回调" + callbackRoomInfoRequest.toString());return CallbackResponse.success();}// 销毁房间回调public CallbackResponse destroyRoom(CallbackRoomInfoRequest callbackRoomInfoRequest){log.info("销毁房间回调" + callbackRoomInfoRequest.toString());return CallbackResponse.success();}// 更新房间回调public CallbackResponse updateRoomInfo(CallbackRoomInfoRequest callbackRoomInfoRequest){log.info("更新房间回调" + callbackRoomInfoRequest.toString());return CallbackResponse.success();}// 用户进房回调public CallbackResponse enterRoom(CallbackRoomInfoRequest callbackRoomInfoRequest){log.info("用户进房回调" + callbackRoomInfoRequest.toString());return CallbackResponse.success();}// 用户退房回调public CallbackResponse exitRoom(CallbackRoomInfoRequest callbackRoomInfoRequest){log.info("用户退房回调" + callbackRoomInfoRequest.toString());return CallbackResponse.success();}// 用户上麦回调public CallbackResponse takeSeat(CallbackRoomInfoRequest callbackRoomInfoRequest){log.info("用户上麦回调" + callbackRoomInfoRequest.toString());return CallbackResponse.success();}// 用户下麦回调public CallbackResponse leaveSeat(CallbackRoomInfoRequest callbackRoomInfoRequest){log.info("用户下麦回调" + callbackRoomInfoRequest.toString());return CallbackResponse.success();}
}

返回对象


import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;/** * @Description: 回调返回信息* @Author: Sakura* @Date: 2023/12/19 13:41
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class CallbackResponse implements Serializable {private static final long serialVersionUID = 1L;// 当前房间成员数量private Integer ErrorCode;// 操作的房间 IDprivate String ErrorMessage;public static CallbackResponse success() {CallbackResponse callbackResponse = new CallbackResponse();callbackResponse.setErrorCode(0);callbackResponse.setErrorMessage("Success");return callbackResponse;}public static CallbackResponse ERROR() {CallbackResponse callbackResponse = new CallbackResponse();callbackResponse.setErrorCode(1);callbackResponse.setErrorMessage("Fail");return callbackResponse;}}

我们需要先调用配置回调地址的接口把我们的接口配置上去

{"address": "https://www.sakura.com/txcloud/callback/listener","actions": ["createRoom", "destroyRoom", "updateRoomInfo", "enterRoom", "exitRoom", "updateUserRole", "takeSeat", "leaveSeat"]
}

在这里插入图片描述

注意address换成自己的域名,actions可以照着写

这样就能收到回调信息了

相关文章:

Java对接腾讯多人音视频房间回调接口示例

在前面我们已经对接好了腾讯多人音视频房间相关内容&#xff1a;Java对接腾讯多人音视频房间示例 为了完善业务逻辑&#xff0c;我们还需要对接它的一些回调接口 官方文档地址 主要就下面这些 这里因为比较简单直接上代码 里面有些工具类和上一章一样这里就没贴&#xff0c;需要…...

vp与vs联合开发-通过FrameGrabber连接相机

添加控件 1.CogRecordDisplay 控件 用于显示图像 初始化相机对象方法 //启动窗体时 调用初始化相机方法 //封装相机关闭方法 //窗体关闭时 调用相机关闭方法 拍照 设置采图事件 // 保存图像 设置曝光按钮事件 1.可变参数...

音视频直播核心技术介绍

直播流程 采集&#xff1a; 是视频直播开始的第一个环节&#xff0c;用户可以通过不同的终端采集视频&#xff0c;比如 iOS、Android、Mac、Windows 等。 前处理&#xff1a;主要就是美颜美型技术&#xff0c;以及还有加水印、模糊、去噪、滤镜等图像处理技术等等。 编码&#…...

JNDI注入Log4jFastJson白盒审计不回显处理

目录 0x00 前言 0x01 Maven 仓库及配置 0x02 JNDI 注入简介 0x03 Java-第三方组件-Log4J&JNDI 0x04 Java-第三方组件-FastJson&反射 0x05 白盒审计 - FastJson 0x06 白盒审计 - Log4j 0x07 不回显的处理方法 0x00 前言 希望和各位大佬一起学习&#xff0c;如果…...

FPGA实现腐蚀和膨胀算法verilog设计及仿真 加报告

要在FPGA上实现腐蚀和膨胀算法,你可以按照以下步骤进行: 图像存储:首先,你需要设计一个图像存储器来存储待处理的图像数据。这可以采用FPGA内部存储器或外部存储器。 读取图像数据:使用适当的接口从图像存储器中读取图像数据,并将其加载到FPGA的计算单元中。 结构元素定义…...

核和值域的关系:什么是矩阵的秩?

核和值域的关系&#xff1a;什么是矩阵的秩&#xff1f; 这篇博客将介绍一个任意矩阵的核和值域的关系&#xff0c;并由此说明矩阵秩的意义、子空间维数、子空间正交。 1、矩阵的核&#xff1a;N(A) A ∈ C m n A\in C^{m\times n} A∈Cmn&#xff0c;矩阵的核&#xff0c;记…...

【MyBatis Plus】Service Mapper内置接口讲解

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《MyBatis-Plus》。&#x1f3af;&#x1f3af; &am…...

制作一个简单 的maven plugin

流程 首先&#xff0c; 你需要创建一个Maven项目&#xff0c;推荐用idea 创建项目 会自动配置插件 pom.xml文件中添加以下配置&#xff1a; <project> <!-- 项目的基本信息 --> <groupId>com.example</groupId> <artifactId>my-maven-plugi…...

基于linux系统的Tomcat+Mysql+Jdk环境搭建(三)centos7 安装Tomcat

Tomcat下载官网&#xff1a; Apache Tomcat - Which Version Do I Want? JDK下载官网&#xff1a; Java Downloads | Oracle 中国 如果不知道Tomcat的哪个版本应该对应哪个版本的JDK可以打开官网&#xff0c;点击Whitch Version 下滑&#xff0c;有低版本的&#xff0c;如…...

Ubuntu环境下SomeIP/CommonAPI环境搭建详细步骤

环境搭建 1.Boost安装 下载Boost源码 &#xff1a; https://www.boost.org/users/download/ 编译安装 首先安装编译所需依赖 sudo apt-get install build-essential g sudo apt-get install installpython-dev autotools-dev sudo apt-get install installlibicu-dev buil…...

maven 项目导入异常问题

问题如下 一、 tomcat正再运行的包是哪一个 不同构建、打包情况下分别运行 out\artifacts下 当直接去Project Structure下去构建artifacts 后&#xff0c;运行tomcat 则会在out下target下 reimport项目后,则会在artifacts自动生成部署包。删除tomcat之前deployment 下的包(同…...

在 VMware 虚拟机上安装黑苹果(Hackintosh):免费 macOS ISO 镜像下载及安装教程

在 VMware 虚拟机上安装黑苹果(Hackintosh)&#xff1a;免费 macOS ISO 镜像下载及安装教程 VMware 虚拟机解锁 macOS 安装选项使用 macOS iso 系统镜像安装使用 OpenCore 做引导程序安装 在 VMware 虚拟机上安装黑苹果(Hackintosh)&#xff1a;免费 macOS ISO 镜像下载及安装…...

国产ToolLLM的课代表---OpenBMB机构(清华NLP)旗下ToolBench的安装部署与运行(附各种填坑说明)

ToolBench项目可以理解为一个能直接提供训练ToolLLM的平台&#xff0c;该平台同时构建了ToolLLM的一个开源训练指令集。&#xff0c;该项目是OpenBMB机构&#xff08;面壁智能与清华NLP联合成立&#xff09;旗下的一款产品&#xff0c;OpenBMB机构名下还同时拥有另外一款明星产…...

串口通信(5)-C#串口通信数据接收不完整解决方案

本文讲解C#串口通信数据接收不完整解决方案。 目录 一、概述 二、Modbus RTU介绍 三、解决思路 四、实例 一、概述 串口处理接收数据是串口程序编写的关键...

大数据分析岗是干什么的?

大数据分析岗主要负责从大规模数据集中提取、整理、分析和解释有关业务、市场或其他相关领域的信息的职位。 主要的职责和工作内容如下&#xff1a; 1. 数据收集和整理 收集各种数据源&#xff08;包括结构化、非结构化和半结构化数据&#xff09;&#xff0c;并将其整理成可…...

hadoop运行jar遇到的一个报错

报错信息&#xff1a; 2023-12-19 14:28:25,893 INFO mapreduce.Job: Job job_1702967272525_0001 failed with state FAILED due to: Application application_1702967272525_0001 failed 2 times due to AM Container for appattempt_1702967272525_0001_000002 exited with…...

长短期记忆(LSTM)神经网络-多输入分类

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…...

开启创意之旅:免费、开源的噪波贴图(noise texture)生成网站——noisecreater.com详细介绍

在当今数字创意领域&#xff0c;噪波贴图&#xff08;Noise Texture&#xff09;是游戏渲染、游戏开发、美术设计以及影视制作等行业不可或缺的艺术素材之一。为了满足广大创作者的需求&#xff0c;noisecreater.com应运而生&#xff0c;成为一款免费、开源的噪波贴图生成工具。…...

Android Studio问题解决:Gradle Download 下载超时 Connect reset

文章目录 一、遇到问题二、解决办法 一、遇到问题 Gradle Download下载超时Sync了很多次&#xff0c;一直失败 二、解决办法 手动通过gradle网站下载 https://gradle.org/releases/可能也会出现超时&#xff0c;最好开个VPN软件会比较快。 下载好的软件&#xff0c;放到本机的…...

【Python百宝箱】云上翱翔:Python编程者的AWS奇妙之旅

雲端箴言&#xff1a;用Python主持AWS管理交響樂 前言 随着云计算的普及&#xff0c;AWS&#xff08;Amazon Web Services&#xff09;成为了许多组织和开发者首选的云服务提供商。作为Python工程师&#xff0c;深入了解AWS管理工具和库对于高效利用云资源至关重要。本文将引…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...