友情提示:最近发现腾讯GVoice有另一个官网,叫做腾讯游戏服务,经过对比发现这个网站才是最新的,下面我介绍的那个估计是已经废弃的,但不知道为啥老的网站没有直接链接到新网址而是仍然保留了。不过新官网的文档更加详细,SDK也有所更新,所以建议去新官网下载SDK和Demo,接入流程基本没有啥大变化。

简述

我们项目中用到了实时语音功能,在最初语音 SDK 技术选型的时候测试过融云、声网和腾讯的 GVoice 。融云和声网我都在我们项目中使用过,但是效果都不如王者荣耀游戏中的实时语音效果,这两天好好研究了一下腾讯的 GVoice,终于成功集成。由于腾讯 GVoice 官网的接入流程并不是很详细,如果只懂 Unity3D 不懂 Android 基础知识的朋友,可能接入过程不会一帆风顺。我虽了解一点点 Android 基础,但仍趟过了好几个坑,下面我就分享一下我在 Android 平台接入 GVoice 的过程。

资源准备

进入腾讯GVoice官网下载 GVoice SDK 和 Unity3D Demo。如下图:

接入流程

1. 导入SDK

先创建一个空的 Unity 项目 GVoiceDemo,按照官网的接入流程,我们直接将下载的SDK压缩包解压后将其中的 Plugins 和 Scripts 两个文件夹都拷贝到 Unity 项目中。

2. 创建 Jar 包

将Unity项目导出成安卓项目,导出路径选择某个指定的文件夹,我这里在桌面新建了一个叫 unity_gvoicedemo 的文件夹,将项目导出到该文件夹中,操作如下图:


导出成功后会生成 GCloudVoice 和 GVoiceDemo 两个文件夹,用 eclipse 将这两个项目一起导入,如下图

导入成功后,在 UnityPlayerActivity 项目下新建一个 MainActivity 类,继承自 UnityPlayerActivity,详细代码如下:

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 按钮, 接下来操作如下图:

最后,生成一个 GVoiceDemo.jar 文件。

3. 导入其他文件

将下载的 unity_demo.zip 压缩包解压后将其中的 unity_demo\Assets\Plugins\Android 目录下的 AndroidManifest.xml 和 android-support-v4.jar 两个文件拷贝到项目的 Plugins\Android 目录下。注意还有个GCloudVoiceDemo.jar 文件我们没有拷贝,这里我们使用上一步创建的 GVoiceDemo.jar 文件来替代。注意 jar 包中的包名必须与 AndroidManifest.xml 文件和 Unity 编辑器中PlayerSettings的 Bundle Identifier 包名保持一致。所以,要把 AndroidManifest.xml 文件中的 package="com.example.gcloudu3ddemo" 这一句代码修改成 package="com.shehweiwei.gvoicedemo"

**注意:**AndroidManifest.xml 文件中的入口 Activity 的名字必须和创建的 Jar 包中的新建的 Activity 名字保持一致。这里的入口 Activity 叫 MainActivity,所以 AndroidManifest.xml 文件中的代码为android:name=".MainActivity",当然也可以写成 android:name="com.example.gcloudu3ddemo.MainActivity"

4. 构建Unity场景

这里我用uGUI搭建了一个简单的界面,有六个按钮分别调用 GVoice SDK 的六个 API ,然后一个 Text 用来显示回调结果。界面效果如下图:

然后新建一个 GVoiceDemo 的 C# 脚本,脚本代码如下:

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换成用户唯一IDm_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);}
}

将 GVoiceDemo 脚本添加到Canvas对象上,然后将脚本中对应的方法注册到对应的按钮的OnClick事件上,保存场景,然后运行到手机上,使用两个手机就可以语音聊天了,效果如下图:

其他事项

按照上面的流程集成完的项目并不能在PC上运行,如果要在PC上运行不报错,可以将下载的 unity_demo.zip 文件解压后的 unity_demo\Assets\Plugins 目录下的 X86 和 x86_64 两个文件夹拷贝到项目的 Plugins 文件夹下,这样PC上运行就不会报错。因为我这里没有麦克风设备,不知道在PC上能不能使用语音聊天,有条件的朋友可以试试,有结果了可以反馈给我,先谢过了!

项目源码

我把项目的源码托管在了Github上了, 有需要的朋友自取。项目链接点这里


本文作者: Sheh伟伟
本文链接: http://davidsheh.github.io/2017/05/27/Unity3D集成腾讯语音GVoiceSDK/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!

Unity3D集成腾讯语音GVoice SDK相关推荐

  1. Unity3D集成腾讯语音GVoiceSDK

    友情提示:最近发现腾讯GVoice有另一个官网,叫做腾讯游戏服务,经过对比发现这个网站才是最新的,下面我介绍的那个估计是已经废弃的,但不知道为啥老的网站没有直接链接到新网址而是仍然保留了.不过新官网的 ...

  2. unity接入腾讯语音Gvoice

    腾讯语音插件gvoice,基于unity 至于导入插件什么的就不多说,多的是教程,但是详细的使用教程少的可怜,也是踩了好多坑,才算调试通. 新建一个语音模块管理器 GVoiceManager,做成单例 ...

  3. 微信小程序集成腾讯云 IM SDK

    1.背景 因业务功能需求需要接入IM(即时聊天)功能,一开始想到的是使用 WebSocket 来实现这个功能,然天意捉弄(哈哈)服务器版本太低不支持 wx 协议(也就不支持 WebSocket了)不得 ...

  4. Android语音直播SDK

    本文讲述如何在Android环境下集成即构语音直播SDK,实现同一房间内的成员进行语音直播,有需要时也可进行实时语音通话. 请从 ZegoAudioRoom iOS 下载 SDK.如果要实现播放本地音 ...

  5. uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字、表情、语音、图片、视频

    uniapp集成腾讯即时通信IM,实现一对一聊天,支持文字.表情.语音.图片.视频 原则 拿来即用,节省开发时间 介绍 腾讯的给的例子内容比较乱,我花了好长时间才集成出来,然后对聊天页面做了UI美化. ...

  6. Unity3D : 腾讯云语音(GCloudVoice)的语音转文字功能

    前言: 关于GCloudVoice的Unity3D接入,可以参考其他文章,不在本文的讨论 范围之内.这篇只针对在正常接入的前提下,如果实现语音转文字的相关功能: 正文: 1.初始化: 在最开始初始化的 ...

  7. cocosCreator - GVoice(腾讯语音接入)

    文章目录 Android 层 1.引入SDK 2.代码引入 3.AppActivity.java 中初始化 iOS层 引入SDK(③) 引入脚本(①.②) 添加库 AppController中调用 前 ...

  8. iOS 集成腾讯云聊天 最新sdk使用方法

    一.创建应用 参照腾讯云官方文档 https://cloud.tencent.com/document/product/269/32674 二. 下载Demo源码https://github.com/ ...

  9. iOS语音通话SDK集成指引(实时语音通话一)

    语音通话是通过语音并借助传输媒介的沟通方式.本系列文章将会介绍如何从零开始用即构科技音视频SDK实现双人至百万人语音通话.第一篇讲述iOS语音通话SDK集成指引. 1.准备环境 请确保开发环境满足以下 ...

最新文章

  1. Debian/Ubuntu 对gpg和apt-key使用代理--报错解决:gpg: keyserver receive failed: Connection timed out
  2. 从古希腊神话说起,讲讲英语里的偏旁部首
  3. 做java技术天花板在哪里?我突然发现影响你晋升的竟然不是技术!
  4. docker 部署springboot容器日志处理
  5. Codeforces Round #461 (Div. 2)B-Magic Forest+位运算或优雅的暴力
  6. npm 安装 git linux,如何直接从GitHub安装NPM软件包?
  7. 安卓逆向 | 某新闻类APP urlSign
  8. nero如何刻录光盘
  9. cocoa touch框架
  10. 360儿童手表显示服务器错误,360儿童卫士刷机常见问题与解决方法
  11. PyTorch Python API:FX || Intro
  12. python 文件夹下所有文件_使用Python遍历文件夹下所有文件(包所有含子文件夹)...
  13. 给虚拟机添加虚拟磁盘时出现uuid already exists解决办法
  14. nohup命令及其输出文件 linux nohup命令详解
  15. ROM制作图文教程(详细)
  16. Rstudio的界面如何恢复成四个界面
  17. Office计算机心得,2020计算机实训心得体会-范例
  18. GT工具中用到的英文词解释
  19. php微信消息管理接口_PHP微信接口 公共平台消息回复类库
  20. 付宇泽20190919-4 单元测试,结对

热门文章

  1. 华为校招 java 面试题
  2. 华为2020校招软件开发岗全流程,已签约
  3. 英国电信反悔华为是唯一真正的5G供应商
  4. 经典幽默的计算机名人名言
  5. 【python爬虫教程】用python抓取肯德基某地的门店列表实例代码(支持分页)
  6. 智能手机的发展演变,智能手机对人类带来的影响
  7. 【2020-09-21】 JS逆向之data返回数据加密破解--python爬虫之药智网
  8. Qt问题:QDilog按下回车键竟然关闭了,想屏蔽Return键结果和Enter键弄反了,最后还接收不到Return的键盘事件了,气人不
  9. windows系统文件名详解
  10. 好几天忘记笑了~2012年9月10日