QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

如何在 React Native 中实现视频通话(上)

  • 2019-11-30
  • 本文字数:1564 字

    阅读完需:约 5 分钟

如何在 React Native 中实现视频通话(上)

对于 Web、iOS、Android 开发者来讲,React Native 给跨平台开发工作带来了很大的帮助。仅用 JavaScript 就可以创建运行于移动端的应用。同时,你也可以将 React Native 代码与 Native 代码结合,不论你是用 Objective C、Java 还是用 Swift 开发。


有一位 Agora 开发者,同时也是 React Native 爱好者(Github:syanbo)采用 Agora SDK 写了一个 React Native 封装模块,可实现直播、多人语音或视频会议,当然,同时支持 Android、iOS 平台。


Github 地址:https://github.com/syanbo/react-native-agora


当他在 Agora 的交流群里发出来时,我们也是稍感意外。感谢开发者们对我们的支持。如果你也默默地做了什么新鲜尝试,并用到了 Agora SDK,欢迎私信告诉我们,我们也很乐意帮你分享给更多开发者。


另一方面,现在声网 Agora SDK 已经支持 React Native,能帮助你利用 React Native 为应用增加实时音视频功能。我们之前也开源了一个 Demo,点击「阅读原文」可以查看详细代码,实现了基本的视频通话功能,与 @syanbo 的有些差别。为了方便大家开发,我们简单介绍一下,做一个 React Native 实时视频通话应用的接口调用逻辑,如果你也正在做 React Native 开发,会对你有帮助:

开发环境

首先需要你注册一个 Agora 开发者账号,并准备好 Node.js 6.9.1+开发环境。


Android 开发者还需要:


  • Android Studio 2.0+

  • 编辑器,如 Sublime Text

  • Android 设备(不支持模拟器)


iOS 开发者则需要:


  • Xcode 8.0+

  • iPhone 或 iPad(不支持模拟器)

快速开始

下面我们来为应用创建 Agora React Native wrapper

注册账号,并获取一个 App ID

在 Agora.io 注册一个开发者账号,每个账号每个月有 10000 分钟的免费通话,可以满足大家日常开发与测试


进入 Dashboard ,选择左侧边栏的项目->项目列表


复制页面中的 App ID

更新并运行 Sample App

打开 App.js 文件。在 render() 中,将里面的 App ID 更新为你刚刚复制的 App ID。


1render() {2    AgoraRtcEngine.createEngine('YOUR APP ID');3}
复制代码


使用终端或 Command Prompt,cd 进入你的项目目录,然后输入 npm install,生成项目文件。


添加适当的 SDK,连接设备,然后按如下所述步骤运行项目:


Android:


下载 Agora Video SDK。


解压缩下载的 SDK 包并将 libs/agora-rtc-sdk.jar 文件复制到该 android/app/libs 文件夹中。


然后将 libs/arm64-v8a/x86/armeabi-v7a 文件夹复制到该 android/app/src/main/jniLibs 文件夹中。


在 Android Studio 中,打开 Android 项目文件夹并连接 Android 设备。


同步并运行项目。


iOS:


下载 Agora Video SDK。


解压缩下载的 SDK 包并将 libs/AograRtcEngineKit.framework 文件复制到该 ios/RNapi 文件夹中。


打开 RNapi.xcodeproj 并连接 iPhone 或 iPad 设备。


应用有效的配置文件并运行该项目。

为已有 React Native 应用添加视频通话

以下要介绍的接口主要实现:


  • 渲染视图

  • 加入频道

  • 离开频道

  • 切换摄像头

  • 切换 Audio Route

  • 添加事件监听器


文件中的 App 类扩展 App.js 包含 React Native Android/iOS 示例应用程序的相关 Agora SDK 代码。


1export default class App extends Component {2    ...3}
复制代码

渲染视图

该 render()方法在其 return 中生成 UI 元素。在 return 之前的代码中,根据需要来配置 Agora engine。


1render(){ 2  ... 3  return(4    ... 5  ); 6}
复制代码


在渲染之前,我们需要先创建 RTC Engine。在如下代码中填写你的 App ID。


1AgoraRtcEngine.createEngine('YOUR APP ID');
复制代码


创建完成之后,启用视频与音频


1AgoraRtcEngine.enableVideo();2AgoraRtcEngine.enableAudio();
复制代码


设置视频和频道配置文件。如下述代码中,视频被设定为宽度 360、高度 640,帧率为 15,比特率为 300:


1AgoraRtcEngine.setVideoProfileDetail(360,640,15,300); 2    AgoraRtcEngine.setChannelProfile(AgoraRtcEngine.AgoraChannelProfileCommunication);
复制代码


2019-11-30 22:071607

评论

发布
暂无评论
发现更多内容

备受资本市场关注的Zebec,正在构建“新DeFi”生态

西柚子

C++继承中的对象模型与继承中构造和析构顺序

CtrlX

c c++ 面向对象 继承 8月月更

【源码解析】MyBatis工作原理源码深度解析

小明Java问道之路

深度解析 mybatis 源码解析 源码解读 8月月更

less的基本语法

Java学术趴

8月月更

【云原生】Docker 进阶 -- 构建自定义镜像实战

Bug终结者

Docker 阿里云 服务器 8月月更

每日一R「07」类型系统(一)

Samson

8月月更 ​Rust

ICMPv6协议详解

穿过生命散发芬芳

8月月更 ICMPv6

头脑风暴:零钱兑换3

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

Kubernetes API Schema

CTO技术共享

开源 签约计划第三季 8月月更

Kubernetes Cilium Cluster Mesh

CTO技术共享

开源 签约计划第三季 8月月更

《MySQL入门很轻松》第4章:数据表中存放的数据类型

乌龟哥哥

8月月更

“新DeFi”生态的构建,流支付协议Zebec或厚积薄发

鳄鱼视界

RabbitMQ高可用架构总结

知识浅谈

RabbitMQ 8月月更

《亲密关系》:如何保持良好的亲密关系?

郭明

读书笔记

转转价格系统DDD实践

转转技术团队

领域驱动设计 DDD

如何提高性能测试效能

老张

性能测试 测试效能

部署Spark2.2集群(on Yarn模式)

程序员欣宸

大数据 spark 8月月更

SSM框架整合(Spring+SpringMVC+Mybatis)

开源 SSM框架 8月月更

浅述微服务安全管理机制

阿泽🧸

8月月更 微服务安全

Kubernetes list和watch详解

CTO技术共享

开源 签约计划第三季 8月月更

[极致用户体验] 一行简单的样式,让网页有「高级感」

HullQin

CSS JavaScript html 前端 8月月更

STM32入门开发 制作红外线遥控器(智能居家-万能遥控器)

DS小龙哥

8月月更

一对一直播系统源码——多人语音聊天室

开源直播系统源码

直播系统源码 语音直播系统 一对一直播视频源码 一对一语音直播

中台订单分库分表测试总结

转转技术团队

测试方案 后端测试

【源码解析】MyBatis整体架构与源码解析

小明Java问道之路

mybatis mybatis源码 源码解读 8月月更 架构解析

备受资本市场关注的Zebec,正在构建“新DeFi”生态

股市老人

聊聊客户档案模型的设计与管理

Java 架构 CRM CDP

Flutter 动画组件那么多,记不住不会用怎么办?我都给你整理好了,收藏吧!

岛上码农

flutter 前端 安卓 移动端开发 8月月更

云原生(十八) | Kubernetes篇之Kubernetes(k8s)工作负载

Lansonli

云原生 k8s 8月月更

如果让我设计一套,TPS百万级API网关!

小傅哥

Java 微服务 小傅哥 分布式架构 网关

如何在 React Native 中实现视频通话(上)_文化 & 方法_声网_InfoQ精选文章