volcengine sdk for react native
| 端 | 最低版本 |
| - | - |
| Android | 6.0 (API 23) |
| iOS | 13.4 |
shell
npm install @volcengine/react-native-rtc
`
`shell
yarn add @volcengine/react-native-rtc
`基础示例
$3
@/core/index.ts`typescript
import {
RTCManager, IEngine, IRoom, RTCVideoEventHandler, RTCRoomEventHandler, IJoinRoomProps, ICreateRTCEngineOptions,
} from '@volcengine/react-native-rtc';class RTCClient {
manager?: RTCManager;
engine?: IEngine | null;
room?: IRoom | null;
constructor() {
this.manager = new RTCManager();
}
/* 引擎相关 /
async createEngine({ appID }: ICreateRTCEngineOptions) {
this.engine = await this.manager!.createRTCEngine({ appID });
}
setRTCVideoEventHandler(handlers: RTCVideoEventHandler) {
this.engine?.setRtcVideoEventHandler(handlers);
}
setRTCRoomEventHandler(handlers: RTCRoomEventHandler) {
this.room?.setRTCRoomEventHandler(handlers);
}
startAudioCapture() {
return this.engine?.startAudioCapture();
}
startVideoCapture() {
return this.engine?.startVideoCapture();
}
destroyEngine() {
this.leaveRoom();
this.room?.destroy();
this.room = null;
this.manager!.destroyRTCEngine();
this.engine = null;
}
/* 房间相关 /
joinRoom(params: IJoinRoomProps) {
return this.room?.joinRoom({
token: 'Your token',
...params,
});
}
leaveRoom() {
this.effectPlayerUnloadAll();
this.stopScreenCapture();
this.room?.leaveRoom();
}
createRoom(roomId: string) {
this.room = this.engine?.createRTCRoom(roomId);
return this.room;
}
}
export default new RTCClient();
`$3
@/page/login.tsx
主要关注
NativeViewComponent 的使用方式, 须注意组件注册完成后,在 onLoad 中调用 setLocalVideoCanvas 设置本地渲染视图,远端用户同理。
`typescript
import { Platform } from 'react-native';
import { request, PERMISSIONS } from 'react-native-permissions';
import { NativeViewComponent, StreamIndex, RenderMode } from '@volcengine/react-native-rtc';
import RTCClient from '@/core';const viewId = 'my-view';
const Login = () => {
const requestDevicePermission = async () => {
if (Platform.OS === 'ios') {
await request(PERMISSIONS.IOS.CAMERA);
await request(PERMISSIONS.IOS.MICROPHONE);
} else {
await request(PERMISSIONS.ANDROID.CAMERA);
await request(PERMISSIONS.ANDROID.RECORD_AUDIO);
}
};
const handleViewLoad = async () => {
/* 获取权限 /
await requestDevicePermission();
/* 初始化引擎 /
await RTCClient.createEngine({
appID: 'Your appId',
});
/* 设置相关回调函数 /
RTCClient.setRTCVideoEventHandler(...Your custom events);
/* 设置本地渲染视图 /
RTCClient.setLocalVideoCanvas(
StreamIndex.STREAM_INDEX_MAIN,
{
viewId,
renderMode: RenderMode.ByteRTCRenderModeFit,
},
);
/* 创建房间实例 /
RTCClient.createRoom(roomId!);
/* 设置相关回调函数 /
RTCClient.setRTCRoomEventHandler(roomEventListeners);
/* 加入房间 /
RTCClient.joinRoom({
userId: localUser.userId,
extras: {
source_language: room.language,
},
});
/* 采集本地流 /
RTCClient.startVideoCapture();
RTCClient.startAudioCapture();
}
return (
behavior={Platform.OS === "ios" ? "padding" : "height"}
>
viewId={viewId}
onLoad={handleViewLoad}
kind={
Platform.select({
android: 'TextureView',
ios: 'UIView',
})!
}
/>
);
};
export default Login;
``