Unity3D集成腾讯语音GVoiceSDK
友情提示:最近发现腾讯GVoice有另一个官网,叫做腾讯游戏服务,经过对比发现这个网站才是最新的,下面我介绍的那个估计是已经废弃的,但不知道为啥老的网站没有直接链接到新网址而是仍然保留了。不过新官网的文档更加详细,SDK也有所更新,所以建议去新官网下载SDK和Demo,接入流程基本没有啥大变化。
简述
资源准备
接入流程 1. 导入SDK
2. 创建 Jar 包
导出成功后会生成 GCloudVoice 和 GVoiceDemo 两个文件夹,用 eclipse 将这两个项目一起导入,如下图:
导入成功后,在 UnityPlayerActivity 项目下新建一个 MainActivity 类,继承自 UnityPlayerActivity,详细代码如下:
01
02
03
04
05
06
07
08
09
10
11
12
|
package com.shehweiwei.gvoicedemo;
import android.os.Bundle;
import com.tencent.gcloud.voice.GCloudVoiceEngine;
// 注意:下面这句代码必须有,如果没有可能会导致闪退
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity
{
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
GCloudVoiceEngine.getInstance().init(getApplicationContext(), this );
}
}
|
注意:代码中一定要引入com.unity3d.player.UnityPlayerActivity这个包,如果没有引入则进入应用就闪退,这里是个大坑,我好不容易才爬出来。
然后,选中 MainActivity.java 文件,右键选择 Export -> Java -> JAR file, 然后点击 Next 按钮, 接下来操作如下图:
3. 导入其他文件
4. 构建Unity场景
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
using UnityEngine;
using gcloud_voice;
using UnityEngine.UI;
using System;
public class GVoiceDemo : MonoBehaviour
{
// 用来显示调用API返回的结果
public Text result;
private IGCloudVoice m_voiceengine = null ;
// TODO: 这里的appId和appKey使用的是官方提供的测试值,正式项目中可使用申请的值
private const string appId = "932849489" ;
private const string appKey = "d94749efe9fce61333121de84123ef9b" ;
// TODO: 这里使用的是测试账号,所以房间名使用默认的100,正式项目中可根据实际情况赋值
private string roomName = "100" ;
void Start()
{
if (m_voiceengine == null )
{
m_voiceengine = GCloudVoice.GetEngine();
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
string strTime = System.Convert.ToInt64(ts.TotalSeconds).ToString();
// TODO: 这里用时间模拟了一个openId,在正式项目中应该把这里的strTime换成用户唯一ID
m_voiceengine.SetAppInfo(appId, appKey, strTime);
m_voiceengine.Init();
// 注册SDK常用回调监听
m_voiceengine.OnJoinRoomComplete += OnJoinRoom;
m_voiceengine.OnQuitRoomComplete += OnExitRoom;
m_voiceengine.OnMemberVoice += OnMemberVoice;
}
}
void Update()
{
if (m_voiceengine != null )
{
// 不断检测GVoice引擎回调
m_voiceengine.Poll();
}
}
void OnApplicationPause( bool pauseStatus)
{
if (m_voiceengine == null )
{
return ;
}
// 应用暂停时GVoice引擎也暂停,应用重新开始时引擎继续
if (pauseStatus)
{
m_voiceengine.Pause();
}
else
{
m_voiceengine.Resume();
}
}
/// <summary>
/// 加入房间,BtnJoin按钮点击调用
/// </summary>
public void JoinRoom()
{
m_voiceengine.SetMode(GCloudVoiceMode.RealTime);
int ret = m_voiceengine.JoinTeamRoom(roomName, 15000);
result.text += "\nJoinRoom:" + ret;
}
/// <summary>
/// 退出房间,BtnExit按钮点击调用
/// </summary>
public void ExitRoom()
{
int ret = m_voiceengine.QuitRoom(roomName, 6000);
result.text += "\nExitRoom:" + ret;
}
/// <summary>
/// 打开麦克风,BtnOpenMic按钮点击调用
/// </summary>
public void OpenMic()
{
int ret = m_voiceengine.OpenMic();
result.text += "\nOpenMic:" + ret;
}
/// <summary>
/// 关闭麦克风,BtnCloseMic按钮点击调用
/// </summary>
public void CloseMic()
{
int ret = m_voiceengine.CloseMic();
result.text += "\nCloseMic:" + ret;
}
/// <summary>
/// 打开扬声器,BtnOpenSpeaker按钮点击调用
/// </summary>
public void OpenSpeaker()
{
int ret = m_voiceengine.OpenSpeaker();
result.text += "\nOpenSpeaker:" + ret;
}
/// <summary>
/// 关闭扬声器,BtnCloseSpeaker按钮点击调用
/// </summary>
public void CloseSpeaker()
{
int ret = m_voiceengine.CloseSpeaker();
result.text += "\nCloseSpeaker:" + ret;
}
/// <summary>
/// 加入房间回调
/// </summary>
/// <param name="code"></param>
/// <param name="roomName"></param>
/// <param name="memberID"></param>
private void OnJoinRoom(IGCloudVoice.GCloudVoiceCompleteCode code, string roomName, int memberID)
{
result.text += string .Format( "\nOnJoinRoom ---> code: {0}, roomName: {1}, memberID: {2}" , code, roomName, memberID);
}
/// <summary>
/// 退出房间回调
/// </summary>
/// <param name="code"></param>
/// <param name="roomName"></param>
/// <param name="memberID"></param>
private void OnExitRoom(IGCloudVoice.GCloudVoiceCompleteCode code, string roomName, int memberID)
{
result.text += string .Format( "\nOnExitRoom ---> code: {0}, roomName: {1}, memberID: {2}" , code, roomName, memberID);
m_voiceengine.OnJoinRoomComplete -= OnJoinRoom;
m_voiceengine.OnQuitRoomComplete -= OnExitRoom;
m_voiceengine.OnMemberVoice -= OnMemberVoice;
}
/// <summary>
/// 有成员说话时回调
/// </summary>
/// <param name="members"></param>
/// <param name="count"></param>
private void OnMemberVoice( int [] members, int count)
{
result.text += string .Format( "\nOnMemberVoice ---> count: {0}, roomName: {1}, memberID: {2}" , count);
}
}
|
其他事项
Unity3D集成腾讯语音GVoiceSDK相关推荐
- Unity3D集成腾讯语音GVoice SDK
友情提示:最近发现腾讯GVoice有另一个官网,叫做腾讯游戏服务,经过对比发现这个网站才是最新的,下面我介绍的那个估计是已经废弃的,但不知道为啥老的网站没有直接链接到新网址而是仍然保留了.不过新官网的 ...
- uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、表情、语音、图片、视频
uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字.表情.语音.图片.视频 原则 拿来即用,节省开发时间 介绍 腾讯的给的例子内容比较乱,我花了好长时间才集成出来,然后对聊天页面做了UI美化. ...
- 微信小程序 -- 原生JS集成腾讯IM实时聊天/实时音视频(踩坑及心得)
原生JS集成腾讯IM实时聊天/实时音视频对话功能 一.腾讯IM集成 前期准备 实例创建及初始化 IM登录 收发消息 二.腾讯音视频实时互动 跑通demo 三.同时集成即时通讯IM 和 音视频直播的 坑 ...
- 微信小程序集成腾讯IM,实现实时音视频通话,1V1聊天
相关文章: 1.小程序聊天群,发送语音,文字,图片. 2.微信小程序集成腾讯IM,实现实时音视频通话,1V1聊天 3.云开发微信小程序聊天群 4.接入网易云信IM即时通讯的微信小程序聊天室 5.微信小 ...
- Java集成腾讯云音视频录制功能
Java集成腾讯云音视频录制功能 为什么要实现音视频录制功能 因为我们做的是一个医院的项目,医生和患者可能进行视频通话和语音通话,为了保证通话的质量以及后续的问题, 我们就需要进行音视频录制,以便后续 ...
- Unity3D 集成 Face++ FacePlusPlus httpClient http协议 byte数组转string
//開始由于要实现跨平台.考虑过用curl封装c++的dll(android *.so)的方式,在c#Dllimport实现 //后来发现Unity3D本身支持http协议.且face++的api都是 ...
- Android 项目集成腾讯X5浏览器内核
1.为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因. ...
- 使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题
使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 参考文章: (1)使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题 (2)https://www.cnblog ...
- 注意!腾讯语音助手也已抵达战场(内部不止这一个)
李根 发自 凹非寺 量子位 报道 | 公众号 QbitAI 腾讯叮当还不是一个特别广为人知的名字. 相比百度DuerOS,阿里天猫精灵的AliGenie,Rokid背后的若琪,以及给小米.小雅提供语 ...
最新文章
- 雷林鹏分享:jQuery EasyUI 数据网格 - 条件设置行背景颜色
- 反思不可佛系:刺激身体 刺激神经 目标反馈 定量奖惩 注重氛围
- android 监听安装来源_Flutter插件开发之APK自动安装
- java rsa算法_求RSA算法JAVA实现源代码(带界面的)
- homebrew php70,OSX下安装PHP7教程详解
- 你一直在用的Beam Search,是否真的有效?
- 分治回溯-分治的应用-全排列问题
- H+ Hplus html解决contabs.js未加载完毕时 点击会跳转至菜单框架外的bug
- Java项目:SSM高校教职工差旅报销管理系统
- quartus ii 虚拟管脚设定
- Mybatis+Servlet+jsp
- 在imitate中遇到的问题
- 20款常用的商业智能(BI)工具分享(最新)
- 阿里飞冰的介绍以及使用
- postgresql整理
- DVB信道编解码与调制解调
- 离开华为三年,我才真正认同狼性文化
- 使用pyechart生成节点关系图
- 堆的c语言实现以及简单应用
- [面试] lcy - 箴言
热门文章
- FasterTransformer 005 初始化:如何将参数传给模型?
- 硬件学习笔记(器件篇)—— 电感(五)
- 软件需求与软件需求规约
- 敏捷开发修炼之道 (一)高效软件开发之道、态度决定一切
- Python中for语句的使用方法
- 计算机专业技能测试为什么考美术,河北工艺美术职业学院2019年单独招生考试职业适应性测试(计算机基础知识和实践技能)考试大纲...
- jsbridge实现及原理_jsBridge原理解析
- amd(超微半导体公司(英语:Advanced Micro Devices, Inc.,缩写:AMD))
- 设置多个div横向排列
- 线程的生命周期?线程有几种状态