Git Product home page Git Product logo

react-native-opentok's Introduction

react-native-opentok

All Contributors

OpenTok

React Native OpenTok is wrapper over native TokBox OpenTok SDK. The OpenTok platform, developed by TokBox, makes it easy to embed high-quality interactive video, voice, messaging, and screen sharing into web and mobile apps. OpenTok uses WebRTC for audio-video communications πŸ‘€πŸŽ§. For more info on how OpenTok works, check out OpenTok Basics.

Requirements:

  • react-native >=0.49.3

Supported OpenTok SDK version:

  • OpenTok SDK 2.12.+

Table of contents

Installation

React native OpenTok SDK depends on native OpenTok SDK implementations. You need to integrate OpenTok SDK into your existing application. Following steps needs to be done in order to have library working correctly:

Add library using yarn πŸ“¦ (or npm):

yarn add react-native-opentok

iOS

  1. Install CocoaPods on your computer.
  2. Within you application ios/ directory please run pod init.
  3. Replace content within your brand-new Podfile with:
source 'https://github.com/CocoaPods/Specs.git'

platform :ios, '9.0'

target '<YOUR_PROJECT_NAME>' do
  node_modules_path = '../node_modules'

  pod 'yoga', path: "#{node_modules_path}/react-native/ReactCommon/yoga/yoga.podspec"
  pod 'React', path: "#{node_modules_path}/react-native"

  pod 'RNOpenTok', path: "#{node_modules_path}/react-native-opentok/ios"
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "React"
      target.remove_from_project
    end
  end
end
  1. Run pod install.
  2. Open <YOUR_PROJECT_NAME>.xcworkspace file (you'll need to use it as a starting file from now on).
  3. Add OPENTOK_API_KEY key to your Info.plist:
<key>OPENTOK_API_KEY</key>
<string>YOUR_API_KEY</string>
<key>NSCameraUsageDescription</key>
<string>${PRODUCT_NAME} Camera Usage</string>
<key>NSMicrophoneUsageDescription</key>
<string>${PRODUCT_NAME} Microphone Usage</string>
  1. Run the project πŸŽ‰.

Android

  1. Run react-native link.
  2. Edit your android/build.gradle file and update allprojects section:
allprojects {
    repositories {
        ...
        maven {
            url "http://tokbox.bintray.com/maven"
        }
    }
}
  1. Add OPENTOK_API_KEY to your AndroidManifest.xml(within <application> tag):
<meta-data android:name="OPENTOK_API_KEY" android:value="YOUR_OPENTOK_API_KEY" />
  1. Run the project πŸŽ‰.

API Reference

connect(sessionId: string, token: string): Promise<boolean | Error>

Connects to choosen session.

const connectToSession = async () => {
  try {
    await OpenTok.connect('YOUR_SESSION_ID', 'YOUR_TOKEN');
  } catch (e) {
    console.log(e)
  }
}

disconnect(sessionId: string): void

Disconnects from chosen session.

OpenTok.disconnect('YOUR_SESSION_ID');

disconnectAll(): void

Disconnects all available sessions.

OpenTok.disconnectAll();

sendSignal(sessionId: string, type: string, message: string): Promise<boolean | Error>

Send signal to chosen session.

const connectToSession = async () => {
  try {
    await OpenTok.connect('YOUR_SESSION_ID', 'YOUR_TOKEN');
  } catch (e) {
    console.log(e)
  }
}

events

Constants for events thrown in app. Available values:

  • ON_SIGNAL_RECEIVED
  • ON_SESSION_CONNECTION_CREATED
  • ON_SESSION_CONNECTION_DESTROYED
  • ON_SESSION_DID_CONNECT
  • ON_SESSION_DID_DISCONNECT
  • ON_SESSION_DID_FAIL_WITH_ERROR
  • ON_SESSION_STREAM_CREATED
  • ON_SESSION_STREAM_DESTROYED

on(name: string, callback: Function)

Event listener, for events listed above.

OpenTok.on(OpenTok.events.ON_SIGNAL_RECEIVED, e => console.log(e));

removeListener(name: string): void

Removes listener.

OpenTok.removeListener(OpenTok.events.ON_SIGNAL_RECEIVED);

Components

Publisher

Component used for publishing the video to the stream.

Available props:

  • sessionId: string - ID of the session (you need to connect it before using this component).
  • onPublishStart?: Function - Invoked when publishing starts. Optional.
  • onPublishStop?: () => void - Invoked when publishing stops. Optional.
  • onPublishError?: () => void - Invoked when publish error occurs. Optional.
  • mute?: Boolean - This props tells Publisher if should publish audio as well or not. Optional. Defaults to false.
  • video?: Boolean - This props tells Publisher if should publish video as well or not. Optional. Defaults to true.
  • every View property.

Available methods:

  • switchCamera(): switches to the next camera. Goes back to first one when out of cameras.
import { Publisher } from 'react-native-opentok'
<Publisher
  style={{ height: 100, width: 200 }}
  sessionId={sessionId} 
  onPublishStart={() => { console.log('started')}} 
/>

Subscriber

Component used for subscribing to the stream.

Available props:

  • sessionId: string - ID of the session (you need to connect it before using this component).
  • onSubscribeStart?: Function - Invoked when stream starts. Optional.
  • onSubscribeStop?: () => void - Invoked when stream stops. Optional.
  • onSubscribeError?: () => void - Invoked when subscribing error occurs. Optional.
  • mute?: Boolean - This props tells Subscriber if should subscribe audio as well or not. Optional. Defaults to false.
  • video?: Boolean - This props tells Subscriber if should subscribe video as well or not. Optional. Defaults to true.
  • every View property.
import { Subscriber } from 'react-native-opentok'

<Subscriber
  style={{ height: 100, width: 200 }}
  sessionId={sessionId} 
  onSubscribeStart={() => { console.log('started')}} 
/>

Usage

Simply import the library and use methods/components listed above.

import OpenTok from 'react-native-opentok';

Check out example project.

Contributors


MichaΕ‚ Chudziak

πŸ’»

Drapich Piotr

πŸ’»

Mike Grabowski

πŸ’»

Jakub BeneΕ‘

πŸ’»

Radek Czemerys

πŸ’»

Jacob Caban-Tomski

πŸ’»

damiantw

πŸ’»

Credits

Thanks to TokBox for native SDKs development.

This project follows the all-contributors specification. Contributions of any kind welcome!

react-native-opentok's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.