【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 ...
随机推荐
- Web 开发工具类(3): JsonUtils
JsonUtils 整合了一些对Json的相关操作: package com.evan.common.utils; import java.util.List; import com.fasterxm ...
- c++产生非常量引用的初始值必须是左值
出现这种情况是因为调用函数的形参类型是 T&(T为某一类型),该类型与调用参数值传入不一致,比如函数中形参是int型,而传入实参是double,存在隐式类型转化,系统会自动产生临时变量tem ...
- 《 Java 编程思想》CH02 一切都是对象
用引用操纵对象 尽管Java中一切都看作为对象,但是操纵的标识符实际上对象的一个"引用". String s; // 这里只是创建了一个引用,而不是一个对象 String s = ...
- 为什么建议使用Guid结构体做为数据库及排序时的主键
在.net2.0中,Guid结构体表示一个全局唯一标识符,是一个在生成时就可以肯定为全世界唯一的16字节值.Guid在数据库中通常可以作为各种排序的主键.比如 public class Company ...
- Codeforces_714_B
http://codeforces.com/problemset/problem/714/B 当不同大小整数有1.2个时,肯定成立,3个时,需要判断,大于等于4个,则肯定不成立. #include & ...
- MongoDB、Redis和Memcached介绍
MongoDB MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非 ...
- Elasticsearch原理学习--为什么Elasticsearch/Lucene检索可以比MySQL快?
转载于:http://vlambda.com/wz_wvS2uI5VRn.html 同样都可以对数据构建索引并通过索引查询数据,为什么Lucene或基于Lucene的Elasticsearch会比关系 ...
- 文件图片上传目录 禁止执行php
apache配置上传目录禁止运行php的方法 导读: 禁止上传目录运行php等可执行文件可以从一定程度上增加网站的安全性, 禁止上传目录运行php的方法可以用.htaccess文件, 也可以直接在ap ...
- spark sql 查询hive表并写入到PG中
import java.sql.DriverManager import java.util.Properties import com.zhaopin.tools.{DateUtils, TextU ...
- 对CAN signal 的一点理解
首先每个 ECU是一个网络节点,每个网络节点可收发一些 Message,每个Message 由CAN signals构成.每个 CAN signal利用一个或多个连续的2进制位来表示承载的信息.下 ...