实现视频互动

前提条件

已集成SDK,具体步骤参见 快速集成SDK

API调用流程

实现方法

配置App权限

在开启 Activity 时, SDK需要获取 Android 设备的摄像头和麦克风等使用权限。

private static final String[] REQUEST_PERMISSIONS = new String[]{
        Manifest.permission.CAMERA,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.INTERNET,
        Manifest.permission.ACCESS_NETWORK_STATE,
        Manifest.permission.RECORD_AUDIO,
        Manifest.permission.MODIFY_AUDIO_SETTINGS,
        Manifest.permission.BLUETOOTH,
        Manifest.permission.BLUETOOTH_ADMIN
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video_chat_view);


    if (checkSelfPermission(REQUESTED_PERMISSIONS[0], PERMISSION_REQ_ID) &&
        checkSelfPermission(REQUESTED_PERMISSIONS[1], PERMISSION_REQ_ID) &&
        checkSelfPermission(REQUESTED_PERMISSIONS[2], PERMISSION_REQ_ID)) {
      
      // 获取权限后,初始化 SDK,并加入频道。
    }
}

private boolean checkSelfPermission(String permission, int requestCode) {
    if (ContextCompat.checkSelfPermission(this, permission) !=
            PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, REQUESTED_PERMISSIONS, requestCode);
        return false;
    }

    return true;
}

创建引擎

调用 createEngine 创建并初始化 ThunderEngine 对象。

public static synchronized ThunderEngine createEngine(ThunderEngineConfig config)
public class ThunderEngineConfig {
  public Context context = null;              // Android Application 的上下文
  public String appId = "";                   // 为应用程序签发的 AppId
  public long sceneId = 0;                    // 开发者自定义场景 Id,用以细分业务场景;如果不需要,可以填 0
  public int areaType = 0;                    // 指定区域,默认为中国大陆,详见 ThunderRtcConstant.AreaType
  public int serverDomain = 0;                // 预留参数
  public ThunderEventHandler handler = null;  // 事件回调缺省抽象类

  public ThunderEngineConfig() {
  }
}

根据场景设置 handler 属性来注册 ThunderEventHandler 类事件回调,以监听相关事件和错误码。常用事件回调如下:

加入房间

设置 Token 调用 joinRoom 加入房间,收到 onJoinRoomSuccess 表示加入房间成功。

ThunderEngine.joinRoom(byte[] token, String roomName, String uid);

开启本地预览

  1. 调用 setLocalVideoCanvas 设置视图,用于显示本地摄像头视频预览画面。

    ThunderVideoCanvas canvas = new ThunderVideoCanvas(ThunderPreviewView view, scaleMode, uid);
    ThunderEngine.setLocalVideoCanvas(canvas);
    
  2. 调用 startVideoPreview 开启本地摄像头视频预览。

    ThunderEngine.startVideoPreview();
    

开播本地视频

  1. 调用 setVideoEncoderConfig 设置开播视频编码参数。

    ThunderEngine.setVideoEncoderConfig(ThunderVideoEncoderConfiguration yyVideoConfig);
    
  2. 调用 stopLocalVideoStream 开播,开始推送本地视频流。

    ThunderEngine.stopLocalVideoStream(false);
    

停播本地视频

调用 stopLocalVideoStream 停播,停止推送本地视频流。

ThunderEngine.stopLocalVideoStream(true);

开/关远端视图

当收到 onRemoteVideoStopped 回调事件时,表示房间内有远端用户开播或停播行为。

/**
 * @param uid 远端开播或停播用户 uid
 * @param stop false - 房间内有远端用户开播; true - 房间内有远端用户停播
 */
public void onRemoteVideoStopped(String uid, boolean stop) {}

此时,调用 setRemoteVideoCanvas 设置画布来开启或关闭远端视图。

  • 开启远端视图

    // stop 取值为 false 时调用
    ThunderVideoCanvas canvas = new ThunderVideoCanvas(ThunderPlayerView view, int renderMode, String uid);
    ThunderEngine.setRemoteVideoCanvas(canvas);
    
  • 关闭远端视图

    // stop 取值为 true 时调用
    ThunderVideoCanvas canvas = new ThunderVideoCanvas(null, int renderMode, String uid);
    ThunderEngine.setRemoteVideoCanvas(cavas);
    

关闭本地预览

  1. 调用 stopVideoPreview 停止本地预览。

    ThunderEngine.stopVideoPreview();
    
  2. 调用 setLocalVideoCanvas 关闭预览视图。

    ThunderVideoCanvas canvas = new ThunderVideoCanvas(null, int renderMode, String uid);
    ThunderEngine.setRemoteVideoCanvas(cavas);
    

离开房间

当需要结束通话、关闭 App 或 切换 App 至后台时,可以调用 leaveRoom 接口离开当前房间。

当调用 joinRoom 方法后,必须调用 leaveRoom 结束通话,否则无法开始下一次通话。

int ret = mThunderEngine.leaveRoom();

文档是否有解决您的问题?

有帮助 没帮助
提交成功,非常感谢您的反馈!

反馈

TOP