游密音视频SDK(Video SDK)是游密科技公司旗下的一款专注于为开发者提供实时语音技术和服务的云产品。我们的研发团队来自腾讯,其中不少是拥有10年以上音视频经验的专家,专业专注;我们的服务端节点部署遍布全球,为用户提供高效稳定的实时云服务,且弹性可扩展。通过Video SDK,能够让您的应用轻松拥有多人实时视频通话的能力,可广泛应用于社交、游戏、在线教育、视频会议等场景。支持一对一、多人实时视频互动,打破屏幕阻隔,还原最纯粹的面对面聊天场景。
在游密官网注册游密账号。
Appkey
在控制台添加应用,添加成功后 在网页左边的游戏栏会增加一个对应的应用,点击进去就可以获得接入需要的Appkey、Appsecret。
根据游戏使用的游戏引擎与开发语言,在下载入口下载对应的SDK包体。
defaultConfig{
//添加如下设置支持到so库架构
ndk{
abiFilters 'arm64-v8a','armeabi-v7a' //架构可选对应项目需要的
}
}
在 “dependencies” 节点引入 “libs” 下所有的 jar。
dependencies {
implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: [])
}
AndroidManifest.xml配置,添加录音录像和网络等相关权限。
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
-keep class com.youme.**{*;}
-keepattributes Signature
初始化Video SDK:其中appKey和appSecret为在游密后台申请的App Key和App Secret。serverZone:IM服务器区域,一般使用0表示中国,其余设置值可查看官网文档-服务器部署地区定义。
mRtcEngine = YouMeLiveVideoEngine.initSDK(appKey, appSecret, serverZone, "", getApplicationContext());
设置回调监听
// 设置消息回调监听
mRtcEngine.setCallback(this);
消息回调接口实现
@Override
public void onEvent(int eventType, int iErrorCode, String roomId, Object param) {
if (eventType == YouMeConst.YouMeEvent.YOUME_EVENT_INIT_OK) {
Log.i(TAG, "-----初始化引擎成功");
}
else if (eventType == YouMeConst.YouMeEvent.YOUME_EVENT_INIT_FAILED) {
Log.i(TAG, "-----初始化引擎失败");
}
}
@Override
public void onJoinChannelSuccess(String channel, String userId) {
Log.i(TAG, "-----本端已加入频道");
}
@Override
public void onLeaveChannel() {
Log.i(TAG, "-----本端已离开频道");
}
@Override
public void onUserJoined(String userId) {
Log.i(TAG, "-----远端发布流:" + userId);
}
@Override
public void onUserOffline(String userId) {
Log.i(TAG, "-----远端取消发布流:" + userId);
}
@Override
public void onUserMuteAudio(String userId, boolean muted) {
Log.i(TAG, "-----远端音频操作:" + userId + ",is muted=" + muted);
}
@Override
public void onUserMuteVideo(String userId, boolean muted) {
Log.i(TAG, "-----远端视频操作:" + userId + ",is muted=" + muted);
}
onEvent收到初始化成功消息YouMeEvent.YOUME_EVENT_INIT_OK后: 设置传输视频分辨率、视频帧率:其中fps为帧率(3-30),默认15帧,width为宽,height为高。
VideoEncoderConfiguration config = new VideoEncoderConfiguration(width, height, fps, 0);
mRtcEngine.setVideoEncoderConfiguration(config);
加入频道: 其中userID:用户标识,channelID:频道标识, autoRecv:是否自动接收频道内其他有人的视频,true表示自动接收,如果为false,需要调用setUsersVideoInfo指定接收流后才会收到对方视频。
mRtcEngine.joinChannel(userID, channelID, autoRecv);
加入频道成功后,发布流前先切换角色到主播YOUME_USER_HOST。
//发布流前先切换角色到主播
mRtcEngine.setClientRole(YouMeConst.YouMeUserRole.YOUME_USER_HOST);
userRole:用户在语音频道里面的角色,主要分为YOUME_USER_HOST(可以随时讲话和播放战歌等)、YOUME_USER_LISTENER(只听不讲)、YOUME_USER_TALKER_FREE(自由讲话者)等,详情见YouMeUserRole定义。
SurfaceViewRenderer videoView = mRtcEngine.CreateRendererView(getBaseContext(), RendererCommon.ScalingType.SCALE_ASPECT_FIT, false);
mRtcEngine.setupLocalVideo(userId, videoView);
mRtcEngine.muteLocalAudioStream(false);
mRtcEngine.muteLocalVideoStream(false);
mRtcEngine.setClientRole(YouMeConst.YouMeUserRole.YOUME_USER_LISTENER);
mRtcEngine.muteLocalAudioStream(true);
mRtcEngine.muteLocalVideoStream(true);
mRtcEngine.deleteLocalVideo(mUserId);
回调onUserJoined
触发时,即收到其他用户发布音视频流的回调事件,将该用户的视频流与远端视频渲染视图绑定,其中userId为远端用户的userID。
SurfaceViewRenderer videoView = mRtcEngine.CreateRendererView(getBaseContext(), RendererCommon.ScalingType.SCALE_ASPECT_FIT, false);
mRtcEngine.setupRemoteVideo(userId, videoView);
回调onUserOffline
触发时,即收到其他用户取消发布音视频流的回调事件,解绑该用户视频流与视频渲染视图,参数为远端加入频道时的userID。
mRtcEngine.deleteRemoteVideo(userId);
离开频道。
[self.youmeEngine leaveChannel];
销毁引擎。
[self.youmeEngine destory];