已集成SDK,具体步骤参见 快速集成SDK。
在开启 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);
调用 setLocalVideoCanvas 设置视图,用于显示本地摄像头视频预览画面。
ThunderVideoCanvas canvas = new ThunderVideoCanvas(ThunderPreviewView view, scaleMode, uid);
ThunderEngine.setLocalVideoCanvas(canvas);
调用 startVideoPreview 开启本地摄像头视频预览。
ThunderEngine.startVideoPreview();
调用 setVideoEncoderConfig 设置开播视频编码参数。
ThunderEngine.setVideoEncoderConfig(ThunderVideoEncoderConfiguration yyVideoConfig);
调用 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);
调用 stopVideoPreview 停止本地预览。
ThunderEngine.stopVideoPreview();
调用 setLocalVideoCanvas 关闭预览视图。
ThunderVideoCanvas canvas = new ThunderVideoCanvas(null, int renderMode, String uid);
ThunderEngine.setRemoteVideoCanvas(cavas);
当需要结束通话、关闭 App 或 切换 App 至后台时,可以调用 leaveRoom 接口离开当前房间。
当调用 joinRoom 方法后,必须调用 leaveRoom 结束通话,否则无法开始下一次通话。
int ret = mThunderEngine.leaveRoom();