音视频引擎SDK 引擎SDK中有两个子文件夹:lib、include,下面依次介绍下这两个子文件夹。
include
:SDK的头文件。
详细介绍下inlude,所有接口都在这个文件夹中。
IYouMeVoiceEngine.h
封装了语音SDK的全部功能接口,集成方可通过IYouMeVoiceEngine::getInstance ()->…来调用语音SDK接口。IYouMeEventCallback.h
包含语音SDK的所有回调事件接口,例如初始化结果,频道加入成功等,都将通过此接口通知集成方。IYouMeVideoCallback.h
包含语音SDK的视频相关回调事件接口。YouMeConstDefine.h
包含语音SDK的所有枚举类型定义,如错误码等。lib
:库文件,分为Android平台和iOS平台。Android平台下包括ARMv5、ARMv7和X86三种CPU架构下的libyoume_voice_engine.so文件,还包括youme_voice_engine.jar。iOS平台下包含libyoume_voice_engine.a文件。Classes
:对应cocos-js里的frameworks\runtime-src\Classes目录,包括一些封装过的c++文件以及c++转js的文件。src
:对应cocos-js里的src目录,里面的YoumeSDK.js/constdef.js就是提供给游戏使用的js文件。引擎SDK集成
Cocos2d-js开发环境生成的目录结构如下图所示,将引擎SDK目录更名为youme_voice_engine(内含“include”和“lib”两个子文件夹),并复制到cocos-js项目的frameworks\runtime-src目录下,这个目录下包含了Android和iOS两个平台所需的所有C++头文件和库文件。
js SDK集成 把js相关sdk的Classes目录放入cocos-js项目的frameworks\runtime-src\Classes目录,将src目录放入cocos-js项目的src目录,并加入项目。
#include "jsb/jsb_youmetalk.hpp"
。AppDelegate::applicationDidFinishLaunching()
方法内的sc->start();
之前,加上:sc->addRegisterCallback(register_all_youmetalk);
。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/external)
$(call import-add-path,$(LOCAL_PATH)/../../cocos2d/cocos)
#======Youme 添加=========
LOCAL_MODULE := youme_voice_engine
LOCAL_SRC_FILES := ../$(LOCAL_PATH)/../../../../youme_voice_engine/lib/android/$(TARGET_ARCH_ABI)/libyoume_voice_engine.so
include $(PREBUILT_SHARED_LIBRARY)
#======结束 Youme 添加=======
LOCAL_MODULE := cocos2dcpp_shared
LOCAL_MODULE_FILENAME := libcocos2dcpp
LOCAL_SRC_FILES := hellojavascript/main.cpp \
../../../Classes/AppDelegate.cpp \
#========Youme修改,不要拷贝这一行=========
../../../Classes/YMRenderTexture.cpp \
../../../Classes/YoumeTalk.cpp \
../../../Classes/jsb/jsb_youmetalk.cpp
#======结束 Youme 修改=======
#========Youme修改=========
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../../../youme_voice_engine/include
#======结束 Youme 修改=======
# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END
LOCAL_STATIC_LIBRARIES := cocos2dx_static
#======Youme 添加=========
LOCAL_SHARED_LIBRARIES := youme_voice_engine
#======结束 Youme 添加=======
# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END
include $(BUILD_SHARED_LIBRARY)
$(call import-module,.)
# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END
#======修改===========
APP_ABI := armeabi-v7a
#======结束修改=========
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic
ifeq ($(NDK_DEBUG),1)
APP_CPPFLAGS += -DCOCOS2D_DEBUG=1
APP_OPTIM := debug
else
APP_CPPFLAGS += -DNDEBUG
APP_OPTIM := release
endif
复制youme_voice_engine/lib/android/youme_voice_engine.jar到proj.android-studio/app/libs/youme_voice_engine.jar。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- video -->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
import com.youme.voiceengine.mgr.YouMeManager;
import com.youme.voiceengine.*;
然后在onCreate
方法里添加如下代码(没有此方法的话需要自己补上):
@Override
public void onCreate(Bundle savedInstanceState)
{
//以下两个函数调用顺序不能错
YouMeManager.Init(this);
super.onCreate(savedInstanceState);
}
Build Settings
-> Search Paths
-> Header Search Paths
中添加:
../../../youme_voice_engine/include
(建议直接将此include文件夹拖到xcode需要填入的位置,然后路径会自动生成)../../cocos2d-x/cocos/scripting/js-bindings/manual
。Build Settings
-> Search Paths
-> Library Search Paths
中添加../../../youme_voice_engine/lib/ios/Release-universal
(建议直接将此Release-universal文件夹拖到xcode需要填入的位置,然后路径会自动生成)。Build Phases
-> Link Binary With Libraries
下添加:libsqlite3.0.tbd
libyoume_voice_engine.a
libz.dylib
libz.1.2.5.tbd
libresolv.9.tbd
SystemConfiguration.framework
CoreTelephony.framework
AVFoundation.framework
AudioToolBox.framework
CFNetwork.framework
YOUME_EVENT_JOIN_OK
事件后,api.SetVideoCallback();
api.StartCapturer();
api.StopCapturer();
YOUME_EVENT_OTHERS_VIDEO_ON
事件,在该事件里绑定视频流和渲染组件
VideoRenderer.getInstance().addRender(String userId, SurfaceViewRenderer view);
。api.maskVideoByUserId()
api.SwitchCamera();
VideoRenderer.getInstance().deleteRender();
YouMeErrorCode init(
const char* strAppKey,
const char* strAPPSecret,
YOUME_RTC_SERVER_REGION serverRegionId,
const char* strExtServerRegionName);
功能
初始化语音引擎,做APP验证和资源初始化。
参数说明
strAPPKey
:从游密申请到的 app key, 这个你们应用程序的唯一标识。
strAPPSecret
:对应 strAPPKey 的私钥, 这个需要妥善保存,不要暴露给其他人。
serverRegionId
:设置首选连接服务器的区域码,如果在初始化时不能确定区域,可以填RTC_DEFAULT_SERVER,后面确定时通过 SetServerRegion 设置。如果YOUME_RTC_SERVER_REGION定义的区域码不能满足要求,可以把这个参数设为 RTC_EXT_SERVER,然后通过后面的参数strExtServerRegionName 设置一个自定的区域值(如中国用 "cn" 或者 “ch"表示),然后把这个自定义的区域值同步给游密,我们将通过后台配置映射到最佳区域的服务器。
strExtServerRegionName
:自定义的扩展的服务器区域名。不能为null,可为空字符串“”。只有前一个参数serverRegionId设为RTC_EXT_SERVER时,此参数才有效(否则都将当空字符串“”处理)。
返回值
返回YOUME_SUCCESS才会有异步回调通知。其它返回值请参考YouMeErrorCode类型定义。
//涉及到的主要回调事件有:
// YOUME_EVENT_INIT_OK - 表明初始化成功
// YOUME_EVENT_INIT_FAILED - 表明初始化失败,最常见的失败原因是网络错误或者 AppKey-AppSecret 错误
void onEvent (const char* strParam);
YouMeErrorCode joinChannelSingleMode (const char* strUserID, const char* strChannelID, int userRole);
功能
加入语音频道(单频道模式,每个时刻只能在一个语音频道里面)。
参数说明
strUserID
:全局唯一的用户标识,全局指在当前应用程序的范围内。
strChannelID
:全局唯一的频道标识,全局指在当前应用程序的范围内。
userRole
:用户在语音频道里面的角色,见YouMeUserRole定义。
返回值
返回YOUME_SUCCESS才会有异步回调通知。其它返回值请参考YouMeErrorCode类型定义。
//涉及到的主要回调事件有:
//YOUME_EVENT_JOIN_OK - 成功进入语音频道
//YOUME_EVENT_JOIN_FAILED - 进入语音频道失败,可能原因是网络或服务器有问题
void onEvent (const char* strParam);
具体方法参见demo
int createRender(const char * userId);
功能
根据用户ID创建渲染ID。
参数说明
userId
:用户ID。
YouMeErrorCode startCapture();
功能
捕获本机摄像头数据,以便发送给房间内其他人。