前言:

  公司的产品是一款基于社交的内容聊天软件,需要集成语音通讯功能,在写iOS原生项目时,用到的就是Agora SDK,现在写React Native也直接采用了Agora的库。

 集成iOS、Android的步骤:

  请参考链接:https://github.com/syanbo/react-native-agora

  提示:因为Agora的库有两个版本,必须采用最新版,以免有些功能不支持(笔者在集成时,当时没有注意,有不少折腾呢)

 使用记录:

  不知道怎么开头写的时候,参考官方Demo : https://github.com/agoraio-community/agora-rn-quickstart

  1、主要功能代码:

configureAgora(){
var that = this;
const config = {
appid: "17423c8***********5cd46f89e",
channelProfile: this.props.channelProfile,
clientRole: this.props.clientRole,
audioProfile: AudioProfileMusicHighQuality,
audioScenario: AudioScenarioChatRoomGaming,
} console.log("[CONFIG]", JSON.stringify(config));
console.log("[CONFIG.encoderConfig", config.videoEncoderConfig);
RtcEngine.on('videoSizeChanged', (data) => {
console.log("[RtcEngine] videoSizeChanged ", data)
})
RtcEngine.on('remoteVideoStateChanged', (data) => {
console.log('[RtcEngine] `remoteVideoStateChanged`', data);
})
RtcEngine.on('userJoined', (data) => { //用户加入 })
RtcEngine.on('userOffline', (data) => {//用户下线 })
RtcEngine.on('audioVolumeIndication', (data) => {
console.log(data);
})
RtcEngine.on('clientRoleChanged', (data) => {
console.log("[RtcEngine] onClientRoleChanged", data);
})
RtcEngine.on('joinChannelSuccess', (data) => {
console.log('[RtcEngine] onJoinChannelSuccess', data);
// console.log(RtcEngine.options);
RtcEngine.startPreview().then(data => {
// this.setState({
// joinSucceed: true,
// animating: false
// }) })
// RtcEngine.setEnableSpeakerphone(true)
// RtcEngine.setDefaultMuteAllRemoteAudioStreams(true) global.channel = data.channel
global.voiceStatus = 'join'; }) RtcEngine.init(config);
RtcEngine.enableAudio()
}

  2、加入频道

RtcEngine.joinChannel(this.props.childTribeId,Parse.User.current().attributes.uid,"","")
.then(result => { });

  3、退出频道

RtcEngine.leaveChannel((status)=>{
console.log(status) })

  4、当有人加入或退出时,播放提示音

  提示:

  1、在以下代码中filepath:为绝对路径或url,不能使用相对路径

  2、soundid是正确的,如果直接粘贴demo,会出错误(Demo中是:soundId)

RtcEngine.on('userJoined', (data) => { //用户加入
console.log('[RtcEngine] onUserJoined', data);
let playEffectOption = {
soundid: 1,
filepath:'https://oops-*****.cos.ap-shanghai.myqcloud.com/in.mp3',
loopcount: 0,
pitch: 1,
pan: 0,
gain: 40,
publish: false,
};
RtcEngine.playEffect(playEffectOption)
// const {peerIds} = this.state;
// if (peerIds.indexOf(data.uid) === -1) {
// this.setState({
// peerIds: [...peerIds, data.uid]
// })
// }
})
RtcEngine.on('userOffline', (data) => {//用户下线
console.log('[RtcEngine] onUserOffline', data);
let playEffectOption = {
soundid: 2,
filepath:'https://oops-*****.cos.ap-shanghai.myqcloud.com/in.mp3',
loopcount: 0,
pitch: 1,
pan: 0,
gain: 40,
publish: false,
}; RtcEngine.playEffect(playEffectOption)
})

【React Native】集成声网Agora语音通讯的更多相关文章

  1. 将React Native集成至Android原生应用

    将React Native集成至Android原生应用 Android Studio 2.1 Preview 4生成的空项目 react-native 环境 0.22.2 初次编译后apk有1.1M, ...

  2. Angular团队公布路线图,并演示怎样与React Native集成

    本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/angular-2-react-native-roadmap 前不久在旧 ...

  3. 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结

    将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...

  4. React Native集成Redux框架讲解与应用

    学过React Native的都知道,RN的UI是根据相应组件的state进行render的,而页面又是由大大小小的组件构成,导致每个组件都必须维护自身的一套状态,因此当页面复杂化的时候,管理stat ...

  5. react native 集成react navigation报错

    集成后出现:“Invalid escape sequence at line 1 column 29 path $[0].name”的错误. 解决办法:

  6. 基于React Native的58 APP开发实践

    React Native在iOS界早就炒的火热了,随着2015年底Android端推出后,一套代码能运行于双平台上,真正拥有了Hybrid框架的所有优势.再加上Native的优秀性能,让越来越多的公司 ...

  7. 移动应用跨平台框架江湖将现终结者?速来参拜来自Facebook的React Native

    React Native使用初探 February 06 2015 Facebook让所有React Conf的参与人员都可以初尝React Native的源码---一个编写原生移动应用的方法.该方法 ...

  8. 在Mac上搭建React Native开发环境

    概述 前面我们介绍过在window环境下开发React Native项目,今天说说怎么在mac上搭建一个RN的开发环境. 配置mac开发环境 基本环境安装 1.先安装Homebrew:用于安装Node ...

  9. React Native (0.57)开发环境搭建(注意:Node不要随便更新到最新版,更新完后莫名其妙的问题一大堆)

    搭建开发环境 一.安装依赖 必须安装的依赖有:Node.Watchman 和 React Native 命令行工具以及 Xcode. 1.首先安装 Homebrew 2.安装 Node, Watchm ...

随机推荐

  1. 20190728三人开黑517codingACM模拟赛

    三人组队开黑ACM膜你赛 果然我最蔡 我就写了ACF所以就写这些吧awa Problem A 人话:给你一个w×h的矩形蛋糕,然后告诉你两个蜡烛的坐标,两个蜡烛都在网格点上且不在蛋糕边缘,问如何切一刀 ...

  2. Docker(三):利用Kubernetes实现容器的弹性伸缩

    一.前言 前两章有的介绍docker与Kubernetes.docker是项目运行的容器,Kubernetes则是随着微服务架构的演变docker容器增多而进行其编排的重要工具.Kubernetes不 ...

  3. 学习记录(安装spark)

    根据林子雨老师提供的教程安装spark,用的是网盘里下载的课程软件 将文件通过ftp传到ubantu中 根据教程修改配置文件,并成功安装spark 在修改配置文件的时候出现了疏忽,导致找不到该文件,最 ...

  4. openstack 架构

    openstack 概念架构: openstack逻辑架构 常见的架构:

  5. 十五 awk文本处理

    Awk 语法和基础命令 以行为处理单位 对数据进行逐行处理 处理完当前行,把当前行的处理结果输出后自动对下一行进行处理 直到文件中所有行处理完为止 创造者:Aho.Weinberger.Kernigh ...

  6. python环境安装及配置

    一.下载python,可选择python2.x或python 3.0 下载地址:[官网],选择系统 ---选择对应版本 注意自己电脑是32位(X86)还是64位(x86-64) 下载文件包,点击点击安 ...

  7. 【原创】(二)Linux进程调度器-CPU负载

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  8. D语言-随机数游戏

    由于不会D语言的随机数,干脆core.stdc.stdlib调用stdlib.h 这里mark一下,类型转换是cast(D语言类型) NULL不能用,要用null import std.stdio; ...

  9. SSL公钥证书传递进行隐匿传输数据

    title: 使用X.509公钥证书传递进行隐匿传输数据 date: 2018-02-11 17:47:50 tags: --- 使用X.509公钥证书传递进行隐匿传输数据 看到国外一篇有关于在ssl ...

  10. Redis中RDB和AOF持久化区别和联系

    RDB和AOF持久化   ​RDB持久化 RDB是什么? 原理是redis会单独创建(fork) 一个与当前进程一模一 样的子进程来进行持久化,这个子进程的所有数据(变量.环境变量,程序程序计数器等) ...