前言html
React Native 是 Facebook 于2015年4月开源的跨平台移动应用开发框架,支持iOS和安卓两大平台。React Native 着力于提升多平台开发的开发效率 —— Learn once, write anywhere。背靠着巨人的肩膀出生,React Native 一路风光无限,经受住了重重考验。至今,它仍然是移动端跨平台开发的热门框架之一。react
拍乐云Pano 是专业的实时通讯PaaS云服务提供商,开发者经过集成 Pano SDK 便可在应用里快速实现高清、稳定、易用、低时延的实时音视频和互动白板等。当 React Native 与 Pano SDK 相碰撞,会迸发出怎样绚烂的火花呢?android
因而,Pano React Native SDK 来了!npm
Pano React Native SDK 是基于 Pano SDK 封装的npm静态库。若是你也在使用 React Native 开发应用而且想要接入音视频通话和互动白板,那么本篇技术分享可能会对你有所帮助。react-native
使用开发者帐户登录Pano控制台,建立应用,获取 App ID 和临时 Token,后面将会用到。(建立应用获取临时Token请参考文档:建立第一个应用)markdown
###在应用中集成panortc-react-native-sdkapp
在工程根目录下执行如下命令添加panortc-react-native-sdk
依赖:框架
yarn add @pano.video/panortc-react-native-sdk
复制代码
或者async
npm i --save @pano.video/panortc-react-native-sdk
复制代码
import RtcEngineKit, {
RtcEngineConfig,
RtcChannelConfig,
ChannelMode,
ChannelService,
ResultCode
} from '@pano.video/panortc-react-native-sdk';
...
_initEngine = async () => {
let engineConfig = new RtcEngineConfig('YOUR APPID');
this._engine = await RtcEngineKit.create(engineConfig);
};
复制代码
_joinChannel = async () => {
let serviceFlags = new Set([
ChannelService.Media,
ChannelService.Whiteboard
]);
let channelConfig = new RtcChannelConfig(
ChannelMode.Meeting,
serviceFlags,
true,
'USER NAME'
);
await this._engine?.joinChannel(
'YOUR TOKEN',
'CHANNEL ID',
'123456', //number转成的字符串
channelConfig
);
};
复制代码
在收到joinChannel
成功的回调后,调用RtcEngineKit
的startAudio
,startVideo
方法开启音视频:ide
//localViewRef用来显示本地视频画面
private localViewRef = React.createRef<RtcSurfaceView>();
...
this._engine?.addListener('onChannelJoinConfirm', (result) => {
console.info('onChannelJoinConfirm', result);
if (result == ResultCode.OK) {
this._engine?.startAudio();
this._engine?.startVideo(this.localViewRef)
}
});
复制代码
在收到其余用户加会的回调后,开启订阅:
//remoteViewRef用来显示订阅视频画面
private remoteViewRef = React.createRef<RtcSurfaceView>();
...
this._engine?.addListener('onUserJoinIndication', (userId, userName) => {
this._engine?.subscribeAudio(userId);
this._engine?.subscribeVideo(userId, this.remoteViewRef);
});
复制代码
在收到joinChannel
成功的回调后,调用RtcEngineKit
的whiteboardEngine
方法获取白板Engine实例,而后就能够经过白板Engine实例打开白板并进行后续一些列白板相关操做:
//whiteboardView用来显示白板区域
private whiteboardView = React.createRef<RtcWhiteboardSurfaceView>();
...
this._engine?.addListener('onChannelJoinConfirm', (result) => {
if (result == ResultCode.OK) {
//获取白板Engine实例
this._engine?.whiteboardEngine().then((whiteboardEngine) => {
//打开白板
whiteboardEngine?.open(this.whiteboardView).then((result) => {
if (result == ResultCode.OK) {
//设置白板工具类型为Path,设置成功后就能够在白板上绘制路径
whiteboardEngine?.setToolType(WBToolType.Path)
}
});
});
}
});
复制代码
###离开Channel 调用RtcEngineKit
的leaveChannel
方法便可离开当前Channel:
this._engine?.leaveChannel();
复制代码
若是再也不须要使用RtcEngineKit
,请调用destroy
方法释放资源:
this._engine?.destroy();
复制代码
##注意事项
开启音视频通话须要申请麦克风
和相机
权限。
在 AndroidManifest.xml
添加如下必要权限,部分权限在Android6.0之后须要动态申请。
<manifest>
...
<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.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-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
...
</manifest>
复制代码
打开 info.plist
文件而且添加:
Privacy - Microphone Usage Description
,而且在 Value
列中添加描述。Privacy - Camera Usage Description
, 而且在 Value
列中添加描述。应用能够在后台运行音视频通话,前提是您开启了后台模式。在 Xcode 中选择您的 app target,点击 Capabilities 标签,开启 Background Modes,而且勾选 Voice over IP。
React Native SDK 目前已开源,你可直接在Pano官网下载和体验。
React Native SDK 相关连接:www.pano.video/download.ht…
关注 拍乐云Pano,咱们将为你们分享更多关于 RN 的开发经验,以及基于 Pano RN SDK 开发的详细教程。