【React Native】集成声网Agora语音通讯
前言:
公司的产品是一款基于社交的内容聊天软件,需要集成语音通讯功能,在写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语音通讯的更多相关文章
- 将React Native集成至Android原生应用
将React Native集成至Android原生应用 Android Studio 2.1 Preview 4生成的空项目 react-native 环境 0.22.2 初次编译后apk有1.1M, ...
- Angular团队公布路线图,并演示怎样与React Native集成
本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/angular-2-react-native-roadmap 前不久在旧 ...
- 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结
将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...
- React Native集成Redux框架讲解与应用
学过React Native的都知道,RN的UI是根据相应组件的state进行render的,而页面又是由大大小小的组件构成,导致每个组件都必须维护自身的一套状态,因此当页面复杂化的时候,管理stat ...
- react native 集成react navigation报错
集成后出现:“Invalid escape sequence at line 1 column 29 path $[0].name”的错误. 解决办法:
- 基于React Native的58 APP开发实践
React Native在iOS界早就炒的火热了,随着2015年底Android端推出后,一套代码能运行于双平台上,真正拥有了Hybrid框架的所有优势.再加上Native的优秀性能,让越来越多的公司 ...
- 移动应用跨平台框架江湖将现终结者?速来参拜来自Facebook的React Native
React Native使用初探 February 06 2015 Facebook让所有React Conf的参与人员都可以初尝React Native的源码---一个编写原生移动应用的方法.该方法 ...
- 在Mac上搭建React Native开发环境
概述 前面我们介绍过在window环境下开发React Native项目,今天说说怎么在mac上搭建一个RN的开发环境. 配置mac开发环境 基本环境安装 1.先安装Homebrew:用于安装Node ...
- React Native (0.57)开发环境搭建(注意:Node不要随便更新到最新版,更新完后莫名其妙的问题一大堆)
搭建开发环境 一.安装依赖 必须安装的依赖有:Node.Watchman 和 React Native 命令行工具以及 Xcode. 1.首先安装 Homebrew 2.安装 Node, Watchm ...
随机推荐
- .net core 认证与授权(一)
前言 .net core web并不是一个非常新的架构,很多文章提及到认证与授权这个过程,但是一般都会提及到里面的方法怎么用的,而不是模拟一个怎样的过程,所以我打算记录自己的理解. 什么是认证?我们大 ...
- pycharm 固定模板使用者和日期
如上图修改就可以正常修改模板了修改后每创建一个python文件就会是这种效果
- 安装Eclipse activity插件 报异常 Cannot complete the install because one or more required items could not be
下载插件:Activiti Designer 5.17 2)安装过程中错误处理 a.错误: Cannot complete the install because one or more requir ...
- git看这一篇就够用了
前言 本文是参考廖雪峰老师的Git资料再加上我自己对Git的理解,记录我的Git学习历程. Git是什么 官方话:Git是一个免费的开源分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有事务 ...
- 暑假第六周总结(对HBASE进行编程实践并且安装Redis)
本周主要是根据教程对HBASE进行了编程实践,对于hadoop的编程来说需要用到很多的.jar 包,在进行编程实践的时候需要参照相关的教程将jar包添加至程序当中去.教程上给的代码还是比较详细的,加上 ...
- Python学习--内置函数isinstance()
内置函数isinstance() isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type(). isinstance() 与 type() 区别: type() 不会认为子类 ...
- gRPC初识
RPC算是近些年比较火热的概念了,随着微服务架构的兴起,RPC的应用越来越广泛.本文介绍了RPC和gRPC的相关概念,并且通过详细的代码示例介绍了gRPC的基本使用. RPC是什么 在分布式计算,远程 ...
- HDU_1495_模拟
http://acm.split.hdu.edu.cn/showproblem.php?pid=1495 自己用模拟写的,先除以三个数的最大公约数,弱可乐为奇数,则无解,然后开始模拟. 利用大杯子和小 ...
- Golang-执行go get私有库提示”410 Gone“ 解决办法
之前没有使用过私有库,今天正好碰到,把解决方法整理一下 错误记录 如果你在用go get 私有库碰到如下类似错误: 解决方法 $ export GO111MODULE=on $ export GOPR ...
- GPU 版 TensorFlow failed to create cublas handle: CUBLAS_STATUS_ALLOC_FAILED
原因: 使用 GPU 版 TensorFlow ,并且在显卡高占用率的情况下(比如玩游戏)训练模型,要注意在初始化 Session 的时候为其分配固定数量的显存,否则可能会在开始训练的时候直接报错退出 ...