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

Unity接入GVoice腾讯实时语音

Unity接入GVoice腾讯实时语音

  • 一、介绍
  • 二、注册GVoice创建项目语音服务
    • 1.创建项目
    • 2.申请语音权限
    • 3.项目管理查看SDK初始化的一些参数和基本信息
    • 4.GVoice检测
  • 三、SDK下载
    • SDK是分为两种类型:
      • 独立版
      • 集成板
    • SDK放入Unity工程中
  • 四、语音代码写法
  • 五、GVoice踩坑
    • 语音权限问题
    • 打包问题
  • 六、总结

一、介绍

最近在做一个实时竞技类游戏,类似于王者荣耀类型的MOBA类实时联网游戏。针对战斗和组队界面需要加入语音的方便大家进行交流,看了几家语音价格也都是参差不齐最后选择的是腾讯的GVoice(价格很低折合费用下来一人一天0.012元),这个也是我们目前用的最合适的。后面我会把完整流程写下来并且把我踩的坑也讲一下,感谢大家的支持。

二、注册GVoice创建项目语音服务

GVoice官网
先进行账号注册,这里我就不过多提示了,直接进入开启服务的申请和创建项目。

进入控制台是这个样子的,右上角是创建新项目
在这里插入图片描述

1.创建项目

根据下属图进行对应的创建即可
在这里插入图片描述
创建之后进入创建项目的控制台如下图
在这里插入图片描述

2.申请语音权限

在这里插入图片描述
点击进入之后进行申请
在这里插入图片描述
申请之后可以找客服对接一下,让他帮你快速通过

3.项目管理查看SDK初始化的一些参数和基本信息

项目管理会弹出来界面有你需要的一些信息
在这里插入图片描述

4.GVoice检测

开通这个语音服务之后可以查看这个语音的检测在这里插入图片描述
在这里插入图片描述

三、SDK下载

GVoice的独立版官方文档,文档中有一些常规的错误和一些解决方案,当然这不是全部的坑都在里面,所有的API和调用方法是可以看的,踩的坑还是五花八门的,后面在继续说坑的问题。
GVoice的集成板官方文档
在这里插入图片描述

SDK是分为两种类型:

独立版

独立版是需要自己下载SDK拖到Unity项目中,这也是我尝试的方法,推荐这个方法。这里我也是主要讲一下独立版SDK的接入。

集成板

集成板则是需要在UnityStore中去关注下载这个sdk,在Unity中用PackageManager进行安装SDK,这里的安装方法我就不仔细说了,在Store中搜索GVoice找到腾讯加的插件下载安装到项目中即可。

SDK放入Unity工程中

SDK分为海外版和国内版,SDK连接下载。
打开网页下载自己对应的版本如下图
在这里插入图片描述
下载解压完成之后如下图
在这里插入图片描述
将上面两个文件夹放入到Unity中
在这里插入图片描述

四、语音代码写法

这里可以参考我上面的官方独立版API,里面写的更全面一些,这里我只接入了小队语音,还有一些高级的玩法我们没有用到就没有接入。

这是我创建的测试工程UI和使用到的一些API如下图
在这里插入图片描述
代码如下我就不过多解释了备注都加了差不多应该都能看明白,SDK的appId和appKey在自己创建的项目中的控制台中找一下,然后下面可以参考我写的一些小队语音的常规操作API,如果想要接入其他的API功能可以在官方的API中在查找一下

using gcloud_voice;
using System;
using UnityEngine;
using static gcloud_voice.IGCloudVoice;public class SDKInit : MonoBehaviour
{IGCloudVoice sVoiceEngine;// Start is called before the first frame updatevoid Start(){sVoiceEngine = GCloudVoice.GetEngine();//接入时请将"AppID"替换为开通业务时从管理控制台获取的 AppIDstring appID = "**********";//接入时请将"AppKey"替换为开通业务时从管理控制台获取的 AppKeystring appkey = "*******************************";// 接入时替换为玩家唯一标识符//string openID = "970001";string openID = DateTime.Now.ToString();int AppInfoID = sVoiceEngine.SetAppInfo(appID, appkey, openID);Debug.LogError("AppInfoID = " + AppInfoID);int InitId = sVoiceEngine.Init();Debug.LogError("InitId = " + InitId);sVoiceEngine.OnJoinRoomComplete += JoinRoomCompleteHandler;}// Update is called once per framevoid Update(){if (sVoiceEngine != null){sVoiceEngine.Poll();}if (Input.GetKeyDown(KeyCode.Space)) {GetRoomNumber();}}public void GetRoomNumber() {string roomName = "abc";int memNum = 8;RoomMembers[] memberlist = new RoomMembers[memNum];sVoiceEngine.GetRoomMembers(roomName, memberlist, memNum);Debug.LogError("memberlist.Length = " + memberlist.Length);Debug.LogError("memberlist[0].memberid = " + memberlist[0].memberid);}public void StartTeamRoom() {sVoiceEngine.SetMode(GCloudVoiceMode.RealTime);string mRoomName = "abc";int mTimeOut = 10000;sVoiceEngine.JoinTeamRoom(mRoomName, mTimeOut);}void JoinRoomCompleteHandler(GCloudVoiceCompleteCode code, string roomName, int memberID) {Debug.LogError("code = " + code);Debug.LogError("roomName = " + roomName);Debug.LogError("memberID = " + memberID);}/// <summary>/// 暂停语音/// </summary>public void VoiceEnginePause() {sVoiceEngine.Pause();   }/// <summary>/// 继续语音/// </summary>public void VoiceEngineResume(){sVoiceEngine.Resume();}/// <summary>/// 打开麦克风/// </summary>public void VoiceOpenMic() {sVoiceEngine.OpenMic();}/// <summary>/// 关闭麦克风/// </summary>public void VoiceCloseMic() {sVoiceEngine.CloseMic();}/// <summary>/// 打开扬声器/// </summary>public void VoiceOpenSpeaker() {sVoiceEngine.OpenSpeaker();}/// <summary>/// 关闭扬声器/// </summary>public void VoiceCloseSpeaker() {sVoiceEngine.CloseSpeaker();}
}

注意这个测试只能在Window编辑器下去跑,在Android编辑器模式下是跑不了的,需要修改一下他原来GCloudVoice的代码如下图所示,将原来的宏定义修改如下(不会影响原来打包之后的安卓手机运行)
在这里插入图片描述

五、GVoice踩坑

语音权限问题

这里我开始测试的时候是用的编辑器做的测试,这种情况下就需要电脑的麦的权限是开启的,开始我的电脑麦的权限是关闭的情况下运行的发现没有声音以为是插件接入的有问题,在开启语音的过程中在开启麦的权限也是不行的(这里只针对编辑器和电脑端),这里测试的环境必须是先确保麦的权限是开启的在运行Unity去初始化SDK。
这里还有一点是如果你退出的时候没有自己退出房间和关闭麦他是不会自己退出的,等于说你在取消Unity的运行也会有声音,除非你把Unity关闭这样才能退出这个语音房间,不然只能你手动退出。

打包问题

如果是2020以上的Unity需要将Plugin下的含有.jar的父级文件夹加上后缀.androidlib如下图(加入之后才能识别.jar的文件,打包到手机平台才能没有问题 官方文档标记)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
如果没有加后缀上面打包出现的手机端运行报错如下
4111官方文档解释是SDK初始化为成功
请添加图片描述

六、总结

上述是我在接入GVoiceSDK时遇到的一些问题和完整流程的整理,有误区的地方希望指正,感谢大家的支持和关注。

相关文章:

Unity接入GVoice腾讯实时语音

Unity接入GVoice腾讯实时语音 一、介绍二、注册GVoice创建项目语音服务1.创建项目2.申请语音权限3.项目管理查看SDK初始化的一些参数和基本信息4.GVoice检测 三、SDK下载SDK是分为两种类型&#xff1a;独立版集成板 SDK放入Unity工程中 四、语音代码写法五、GVoice踩坑语音权限…...

【Spring基础】从0开始学习Spring(2)

前言 在上篇文章&#xff0c;我已经讲了Spring中最核心的知识点&#xff1a;IoC&#xff08;控制反转&#xff09;以及DI&#xff08;依赖注入&#xff09;。这篇文章&#xff0c;我将讲一下关于Spring框架中的其它比较琐碎但是又还是挺重要的知识点&#xff0c;因此&#xff…...

cesium mapboxgl+threebox glb 朝向问题

一、3Dbuilder打开glb 二、cesium在pitch和heading都为0的情况下&#xff0c;不设置模型的朝向 三、mapboxglthreebox在pitch和bearing都为0的情况下&#xff0c;不设置模型的朝向 四、对于地图默认视角&#xff0c;cesium设置pitch-90、heading0的时候和mapboxglthreebox设置p…...

LeetCode 打家劫舍

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…...

单片机的50个电路

单片机 电源 声音模块 收音机 485 蓝牙 光耦 can 光敏电阻 单片机 矩阵 单片机电路 时钟 ADC 接口电路 红外发射 显示模块 红外接收 蜂鸣器驱动 流水灯 usb供电 烧录电路 数码管 EEPROM LCD1602电路 数码管 max485 红外开关 译码器 移位寄存器 步进电机控制 复位电路 下载电路 …...

JVM 性能调优- 五种内存溢出(5)

在介绍之前先简单介绍下 直接内存(Direct Memory)和堆内存(Heap Memory): 关系: 直接内存并不是Java虚拟机的一部分,它是通过Java的NIO库中的ByteBuffer来分配和管理的。直接内存通常由操作系统的本地内存(Native Memory)提供支持。堆内存是Java虚拟机的一部分,用于存…...

【SQL高频基础】1141.查询近30天活跃用户数

题目&#xff1a; 表&#xff1a;Activity ------------------------ | Column Name | Type | ------------------------ | user_id | int | | session_id | int | | activity_date | date | | activity_type | enum | ------------------------…...

基于spring cloud alibaba的微服务平台架构规划

平台基础能力规划&#xff08;继续完善更新…&#xff09; 一、统一网关服务&#xff08;独立服务&#xff09; 二、统一登录鉴权系统管理&#xff08;独立服务&#xff09; 1.统一登录 2.统一鉴权 3.身份管理 用户管理 角色管理 业务系统和菜单管理 部门管理 岗位管理 字典管…...

leetcode(滑动窗口)3.无重复字符的最长字串(C++详细题解)DAY2

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示…...

Android13 系统源码适配安装可卸载的三方apk应用

Android13 系统源码适配安装可卸载的三方apk应用 文章目录 Android13 系统源码适配安装可卸载的三方apk应用一、前言二、Android 系统运行后默认安装三方apk实现1、Android 系统默认安装三方apk实现主要思路2、Android 系统默认安装三方apk具体实现&#xff08;1&#xff09;准…...

flutter使用qr_code_scanner扫描二维码

qr_code_scanner仓库地址&#xff1a;qr_code_scanner | Flutter Package 需要添加android和ios的相机权限和本地相册权限&#xff1a; android中添加权限: 在android\app\build.gradle中修改&#xff1a;minSdkVersion 20 并且在android/app/src/main/AndroidManifest.xml中…...

黑马Java——集合进阶(List、Set、泛型、树)

一、集合的体系结构 1、单列集合&#xff08;Collection&#xff09; 二、Collection集合 1、Collection常见方法 1.1代码实现&#xff1a; import java.util.ArrayList; import java.util.Collection;public class A01_CollectionDemo1 {public static void main(String[] a…...

TS项目实战二:网页计算器

使用ts实现网页计算器工具&#xff0c;实现计算器相关功能&#xff0c;使用tsify进行项目编译&#xff0c;引入Browserify实现web界面中直接使用模块加载服务。   源码下载&#xff1a;点击下载 讲解视频 TS实战项目四&#xff1a;计算器项目创建 TS实战项目五&#xff1a;B…...

MySQL的ACID、死锁、MVCC问题

1 ACID ACID代表原子性&#xff08;atomicity&#xff09;、一致性&#xff08;consistency&#xff09;、隔离性&#xff08;isolation&#xff09;和持久性&#xff08;durability&#xff09;。一个确保数据安全的事务处理系统&#xff0c;必须满足这些密切相关的标准。 原…...

Docker 可视化工具

1、Portainer 概念介绍 Portainer是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 Portainer分为开源社区版&#xff08;CE版&#xff09;和商用版&#xff08;BE版/EE版&#xff09;。 Porta…...

【C++】友元:友元函数与友元类

一、友元 友元&#xff08;friend&#xff09;是C中的一种特殊关系&#xff0c;用于在类之间共享访问权限。通过将一个函数或类声明为另一个类的友元&#xff0c;我们可以允许友元访问声明类的非公有成员。 二、友元函数 问题&#xff1a;现在尝试去重载operator<<&am…...

linux之wsl2安装远程桌面

0. 安装后的效果 1. wsl中打开terminal并安装库 sudo apt-get purge xrdp sudo apt install -y xrdp sudo apt install -y xfce4 sudo apt install -y xfce4-goodies 2.优化显示 sudo sed -i s/max_bpp32/#max_bpp32\nmax_bpp128/g /etc/xrdp/xrdp.ini sudo sed -i s/xserverbp…...

如何以管理员身份删除node_modules文件

今天拉项目&#xff0c;然后需要安装依赖&#xff0c;但是一直报错&#xff0c;如下&#xff1a; 去搜这个问题会让把node_modules文件先删掉 再去安装依赖。我在删除的过程中会说请以管理员身份来删除。 那么windows如何以管理员身份删除node_modules文件呢&#xff1f; wi…...

【Linux】环境基础开发工具的使用之gdb详解(三)

前言&#xff1a;上一篇文章中我们讲解了Linux下的gcc与g的使用&#xff0c;今天我们将进一步的学习gdb与makefile来帮我们更好的理解与使用基础开发工具。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的深度刨析 &#x1f448; …...

SpringBoot源码解读与原理分析(二十四)IOC容器的刷新(五)

文章目录 7.11 初始化所有剩下的单实例bean对象7.11.1 beanFactory.preInstantiateSingletons7.11.2 getBean7.11.2.1 别名的解析处理7.11.2.2 判断是否已注册过7.11.2.3 创建前的检查7.11.2.4 标记准备创建的bean对象7.11.2.5 合并BeanDefinition7.11.2.6 bean对象的创建7.11.…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

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

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

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

Selenium常用函数介绍

目录 一&#xff0c;元素定位 1.1 cssSeector 1.2 xpath 二&#xff0c;操作测试对象 三&#xff0c;窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四&#xff0c;弹窗 五&#xff0c;等待 六&#xff0c;导航 七&#xff0c;文件上传 …...