项目作者: BunchLive

项目描述 :
React Native wrapper around TokBox's OpenTok SDK with a Houseparty Clone
高级语言: Swift
项目地址: git://github.com/BunchLive/HotBox.git
创建时间: 2017-08-09T14:42:46Z
项目社区:https://github.com/BunchLive/HotBox

开源协议:MIT License

下载


HotBox

HOTBOX LOGO

npm

HotBox is a React Native wrapper around TokBox OpenTOK SDK.

I tried the other React Native OpenTOK wrappers but they did not seem to work / provide the flexibility we wanted so we created our own.

Installation

iOS

  1. yarn add react-native-hot-box or inferiorly npm install --save react-native-hot-box
  2. Add the files under node_modules/react-native-hot-box/HotBoxService (In Xcode: File -> Add files to “App Name”)
  3. You’re going to want a bridging header:
  1. #import <React/RCTBridgeModule.h>
  2. #import <React/RCTEventEmitter.h>
  3. #import <React/RCTViewManager.h>
  1. You will also want a Podfile:
  1. # Uncomment the next line to define a global platform for your project
  2. # platform :ios, '9.0'
  3. target 'Example' do
  4. # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  5. use_frameworks!
  6. pod 'RxSwift'
  7. pod 'OpenTok'
  8. end
  1. Investigate Example for a full example just in case something is missing or open a ticket.

Android

Please open a PR :)

Usage

Something like:

  1. import {Session, PublisherView, SubscriberView} from 'react-native-hot-box'
  2. var session = new Session()
  3. session.on('sessionDidConnect', () => console.log('connected'))
  4. session.on("sessionDidDisconnect", () => console.log('disconnected'))
  5. session.on('publisherStreamCreated', () => console.log("PUBLISHER CREATED"))
  6. session.on('sessionStreamCreated', () => console.log('sessionStreamCreated'))
  7. session.on('subscriberDidConnect', (streamId) => console.log("New subscriber", streamId))
  8. session.on("subscriberDidDisconnect", (streamId) => console.log("Subscriber disconnected", streamId))
  9. session.on('sessionStreamDestroyed', (streamId) => console.log("Stream destroyed", streamId))
  10. let apiKey = ''
  11. let sessionId = ''
  12. let token = ''
  13. session.createSession(apiKey, sessionId, token)

Events

  1. * sessionDidConnect (sessionId)
  2. * sessionDidDisconnect (sessionId)
  3. * sessionConnectionCreated (connectionId)
  4. * sessionConnectionDestroyed (connectionId)
  5. * sessionStreamCreated (streamId)
  6. * sessionStreamDidFailWithError (err)
  7. * sessionStreamDestroyed (streamId)
  8. * sessionReceivedSignal ({type, connectionId, message})
  9. * publisherStreamCreated (streamId)
  10. * publisherStreamDidFailWithError (err)
  11. * publisherStreamDestroyed (streamId)
  12. * subscriberDidConnect (streamId)
  13. * subscriberDidFailWithError (streamId)
  14. * subscriberDidDisconnect (streamId)

Methods

  1. session.createSession(apiKey, sessionId, token)
  2. session.createPublisher() // You can manually create the publisher but by default it's created automatically
  3. session.disconnectAllSessions()
  4. // Turn on/off video stream for given streamId (null for publisher)
  5. session.requestVideoStream(streamId, on)
  6. // Turn on/off audio stream for given streamId (null for publisher)
  7. session.requestAudioStream(streamId, on)
  8. // Flip publisher camera
  9. session.requestCameraSwap(toBack) // toBack==true ==> back camera
  10. //Send messages
  11. session.sendMessage(type, message, connectionId)
  12. session.broadcastMessage(type, message)
  13. //Subscribe to Stream
  14. session.subscribe(streamId)
  15. //Subscribe to signals
  16. session.on(event, handler)

Views

Publisher

<PublisherView style={styles.viewStyle} ></PublisherView>

Subscriber

<SubscriberView style={styles.viewStyle} streamId={streamId} ></SubscriberView>

Example Houseparty Clone

To run:

  1. yarn install
  2. cd Example/ios & pod install
  3. open Example/ios/Example.xcworkspace
  4. Add your api key, token and session key in App.js
  5. run

Credits

Thanks to my team:

Thanks to the following projects for inspiration!

Issues?

Feel free to open an issue, submit a PR or email jordan@500labs.com to give feedback / suggestions.