声网RTC接入记录| React Native

423 阅读2分钟

1.在已有项目接入RTC(ts)(0.63.2)

npx react-native init MyApp --template react-native-template-typescript

插件地址

github.com/AgoraIO-Com…

API文档说明

agoraio-community.github.io/react-nativ…

yarn add react-native-agora

android:

iOS:npx pod-install (需要在项目的info文件检查是否有麦克风和摄像头的权限说明)

没有的话增加两行

Privacy - Microphone Usage Description (key值)  Microphone(value值)
Privacy - Camera Usage Description(key值)        Camera(value值)

2.代码

初始化

定义初始变量
const [info, setInfo] = useState<any>({
    appId: '23f75a64593a412d90da30b6e9986990', //声网开发者后台获取
    channelName: 'channel-x',//频道name,
    joinSucceed: false,
    peerIds: [],//同一频道下的用户的id集合
    isMute: false,//是否静音
  });
  //创建engine 对象
  const engine = useRef<any>(null);
  engine.current = await RtcEngine.create(appId);
  //开启视频功能以及加入"channel-x"频道
 await engine.current.enableVideo();
 await engine?.current?.joinChannel(null, info.channelName, null, 0);
  //通过一系列的回调可获取频道,用户的一些状态
  engine.current.addListener('UserJoined', (uid: any, elapsed: any) => {
      const {peerIds} = info;
      if (peerIds.indexOf(uid) === -1) {//频道内新进成员
        setInfo((pre: any) => ({
          ...pre,
          peerIds: [...peerIds, uid],
        }));
      }
    });
    engine.current.addListener('UserOffline', (uid: any, reason: any) => {
      //成员离开频道
      const {peerIds} = info;
      setInfo((pre: any) => ({
        ...pre,
        peerIds: peerIds.filter((id: any) => id !== uid),
      }));
    });
    engine.current.addListener(
      'JoinChannelSuccess',
      (channel: any, uid: any, elapsed: any) => {
      成员成功加入频道(可获取到加入的频道,加入的用户,elapsed?)
        setInfo((pre: any) => ({
          ...pre,
          joinSucceed: true,
        }));
      },
    );

实例方法

  //进入频道(本地视图开启)
  engine?.current?.joinChannel(null, info.channelName, null, 0);
  //离开频道(关闭视频通话)
  engine?.current?.leaveChannel();
  //开启/关闭所有远程用户的音频流()
  engine?.current?.muteAllRemoteAudioStreams(info?.isMute);
  setInfo((pre: any) => ({...pre, isMute: !info?.isMute}));
  //切换摄像头
  engine?.current?.switchCamera();
  
  //android 10 需要代码获取相应权限
   PermissionsAndroid.requestMultiple([
      PermissionsAndroid.PERMISSIONS.CAMERA,
      PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
    ]);

3.结果

4.todo

1.鉴权方式修改 2.channelName 做成从后台获取,只关联两个用户

3.如何实现发起视频通话请求

docs.agora.io/cn/faq/call…

5.more

关于官方例子:github.com/AgoraIO-Com… 的几点说明:

1.声网注册应用,获取APPID,形如: 23f75a645.......990的一个字符串,修改demo的app.tsx文件中state的状态 变量appId

2.跑安卓的时候出现

慢的话可尝试,用迅雷下载到本地,然后修改安卓配置文件里关于grade的引用 3.跑ios 的时候项目的team 切换到自己的账号,运行后在设备上信任下证书,也就运行成功了

4.如上就是我全部的操作

两端运行,即可实现视频通话。

遇到过错误码104,查看文档得知,是没有网络。(有文档就是好) 纠错文档地址:docs.agora.io/cn/Interact…