Video SDK for Android 快速接入

概述

游密实时语音SDK(Video SDK)是游密科技公司旗下的一款专注于为开发者提供实时语音技术和服务的云产品。我们的研发团队来自腾讯,其中不少是拥有10年以上音视频经验的专家,专业专注;我们的服务端节点部署遍布全球,为用户提供高效稳定的实时云服务,且弹性可扩展。通过Video SDK,能够让您的应用轻松拥有多人实时视频通话的能力,可广泛应用于社交、游戏、在线教育、视频会议等场景。支持一对一、多人实时视频互动,打破屏幕阻隔,还原最纯粹的面对面聊天场景。

四步集成

Step1:注册账号

游密官网注册游密账号。

Step2:添加应用,获取Appkey

在控制台添加应用,添加成功后 在网页左边的游戏栏会增加一个对应的应用,点击进去就可以获得接入需要的AppkeyAppsecret

Step3:下载Video SDK包体

根据游戏使用的游戏引擎与开发语言,在下载入口下载对应的SDK包体。

Step4:开发环境配置

开发环境配置

快速接入

Android Studio开发环境集成

  1. 将SDK内的lib文件夹的所有文件移至Android工程libs文件夹下(可视实际情况自行放置),如下图所示:

  2. AndroidManifest.xml配置 添加录音和网络相关权限

    <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" />
  3. 反混淆配置 YOUMESDK不需要混淆,如果你的工程有混淆 请在proguard.cfg文件中添加如下代码:

    -keep class com.youme.**{*;}
    -keepattributes Signature
  4. 设置加载so库以及启动相关服务 在入口Activity类先导入package:
    import android.content.Intent;
    import android.os.Bundle;
    import com.youme.voiceengine.mgr.YouMeManager;

    然后在onCreate方法里添加YouMeManager.InitYouMeManager.Init要在super.onCreate之前调用,解决某些设备兼容性问题,代码如下:

    YouMeManager.Init(this);
    super.onCreate(savedInstanceState);

视频关键接口流程

  1. API的调用主要使用“com.youme.voiceengine.api”来直接操作(部分接口在com.youme.voiceengine.NativeEngine),接口使用的基本流程为初始化->收到初始化成功回调通知->加入房间->收到加入房间成功回调通知->使用其它接口->离开房间->反初始化,要确保严格按照上述的顺序使用接口。

  2. 调用初始化接口:api.init

  3. 在收到初始化成功YouMeConst.YouMeEvent.YOUME_EVENT_INIT_OK事件后, 设置视频帧率:api.setVideoFps(fps); 设置视频本地预览分辨率:api.setVideoLocalResolution(videoWidth, videoHeight); 设置视频编码分辨率:api.setVideoNetResolution(videoWidth, videoHeight); 调用加入房间接口api.joinChannelSingleMode

  4. 在收到YouMeConst.YouMeEvent.YOUME_EVENT_JOIN_OK事件后, 注册视频回调:api.SetVideoCallback(); 控制自己的摄像头打开:api.StartCapturer(); 控制自己的摄像头关闭:api.StopCapturer(); 打开麦克风:api.setMicrophoneMute(false); 关闭麦克风:api.setMicrophoneMute(true); 绑定自己视频流和渲染组件:VideoRenderer.getInstance().setLocalUserId(local_user_id);,VideoRenderer.getInstance().addRender(String userId, SurfaceViewRenderer view);

  5. 使用其他接口和接收回调事件: 是否屏蔽他人视频: api.maskVideoByUserId() 切换摄像头:api.SwitchCamera(); 删除渲染绑定:VideoRenderer.getInstance().deleteRender(); 如果远端有视频流过来,会通知 YOUME_EVENT_OTHERS_VIDEO_ON 事件,在该事件里绑定视频流和渲染组件VideoRenderer.getInstance().addRender(String userId, SurfaceViewRenderer view);

  6. 离开房间:api.leaveChannelAll();

  7. 反初始化:api.unInit();

回调实现

使用类需要implements接口YouMeCallBackInterface,并实现该接口下的所有回调函数。回调都在子线程中执行,不能用于更新UI等耗时操作。

  1. 首先要导入相关的包:

    import com.youme.voiceengine.MemberChange;
    import com.youme.voiceengine.YouMeCallBackInterface;
  2. 实现YouMeCallBackInterface接口方法:

    public interface YouMeCallBackInterface {
    public  void onEvent (int event, int error, String room, Object param);
    public  void onRequestRestAPI(int requestID , int iErrorCode , String strQuery, String strResult);
    public  void onMemberChange(String channelID, MemberChange[] arrChanges , boolean isUpdate);
    public  void onBroadcast(int bc , String room, String param1, String param2, String content);
    public  void onAVStatistic( int avType,  String userID, int value );
    public  void onTranslateTextComplete( int errorcode, int requestID, String text, int srcLangCode, int destLangCode );
    }

    具体实现回调方法:

    @Override
    public void onEvent(int eventType, int iErrorCode, String roomid, Object param){
        //操作结果和运行状态相关回调,eventType 参见 《Video SDK for Android-状态码》的 `YouMeEvent`说明
    }
    @Override
    public void onRequestRestAPI(int requestID, int iErrorCode, String strQuery, String strResult){
         //RestAPI请求结果回调,参见 《Video SDK for Android-接口手册》的 `requestRestApi` 接口说明
    }
    @Override
    public void onMemberChange(String channelID, MemberChange[] arrChanges, boolean isUpdate){
        //频道内成员进出通知
    }
    @Override
    public  void onBroadcast(int bc , String room, String param1, String param2, String content){
        //SDK内置连麦抢麦结果通知
    }
    @Override
    public  void onAVStatistic( int avType,  String userID, int value ){
        //SDK通过质量相关事件通知,avType 参见 《Video SDK for Android-状态码》的 `YouMeAVStatisticType`说明
    }
    @Override
    public  void onTranslateTextComplete( int errorcode, int requestID, String text, int srcLangCode, int destLangCode ){
        //翻译结果返回 参见 《Video SDK for Android-接口手册》的 `translateText` 接口说明
    }
    }