Git Product home page Git Product logo

react-native-twilio-video-webrtc's Introduction

GitHub Logo

Twilio Video (WebRTC) for React Native

Platforms:

  • iOS
  • Android

People using a version < 1.0.1 please move to 1.0.1 since the project changed a lot internally to support the stable TwilioVideo version.

Installation

Install Node Package

Option A: yarn

yarn add https://github.com/blackuy/react-native-twilio-video-webrtc

Option B: npm

npm install https://github.com/blackuy/react-native-twilio-video-webrtc --save

Usage with Expo

To use this library with Expo we recommend using our config plugin that you can configure like the following example:

{
  "name": "my app",
  "plugins": [
    [
      "react-native-twilio-video-webrtc",
      {
        "cameraPermission": "Allow $(PRODUCT_NAME) to access your camera",
        "microphonePermission": "Allow $(PRODUCT_NAME) to access your microphone"
      }
    ]
  ]
}

Also you will need to install expo-build-properties package:

npx expo install expo-build-properties

Expo Config Plugin Props

The plugin support the following properties:

  • cameraPermission: Specifies the text to show when requesting the camera permission to the user.

  • microphonePermission: Specifies the text to show when requesting the microphone permission to the user.

iOS

Option A: Install with CocoaPods (recommended)

  1. Add this package to your Podfile
pod 'react-native-twilio-video-webrtc', path: '../node_modules/react-native-twilio-video-webrtc'

Note that this will automatically pull in the appropriate version of the underlying TwilioVideo pod.

  1. Install Pods with
pod install

Option B: Install without CocoaPods (manual approach)

  1. Add the Twilio dependency to your Podfile
pod 'TwilioVideo'
  1. Install Pods with
pod install
  1. Add the XCode project to your own XCode project's Libraries directory from
node_modules/react-native-twilio-video-webrtc/ios/RNTwilioVideoWebRTC.xcodeproj
  1. Add libRNTwilioVideoWebRTC.a to your XCode project target's Linked Frameworks and Libraries

  2. Update Build Settings

Find Search Paths and add $(SRCROOT)/../node_modules/react-native-twilio-video-webrtc/ios with recursive to Framework Search Paths and Library Search Paths

Post install

Be sure to increment your iOS Deployment Target to at least iOS 11 through XCode and your Podfile contains

platform :ios, '11.0'

Permissions

To enable camera usage and microphone usage you will need to add the following entries to your Info.plist file:

<key>NSCameraUsageDescription</key>
<string>Your message to user when the camera is accessed for the first time</string>
<key>NSMicrophoneUsageDescription</key>
<string>Your message to user when the microphone is accessed for the first time</string>

Known Issues

TwilioVideo version 1.3.8 (latest) has the following know issues.

  • Participant disconnect event can take up to 120 seconds to occur. Issue 99
  • AVPlayer audio content does not mix properly with Room audio. Issue 62

Android

As with iOS, make sure the package is installed:

yarn add https://github.com/blackuy/react-native-twilio-video-webrtc

Then add the library to your settings.gradle file:

include ':react-native-twilio-video-webrtc'
project(':react-native-twilio-video-webrtc').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-twilio-video-webrtc/android')

And include the library in your dependencies in android/app/build.gradle: (if using gradle 4 or lower, replace implementation with compile below)

dependencies {
    .....
    .....
    .....
    implementation project(':react-native-twilio-video-webrtc')
}

You will also need to update this file so that you compile with java 8 features:

android {
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

Now you're ready to load the package in MainApplication.java. In the imports section, add this:

import com.twiliorn.library.TwilioPackage;

Then update the getPackages() method:

    protected List<ReactPackage> getPackages() {
        return Arrays.<ReactPackage>asList(
            ...
            new TwilioPackage()
        );
    }

Permissions

For most applications, you'll want to add camera and audio permissions to your AndroidManifest.xml file:

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
    <uses-feature android:name="android.hardware.microphone" android:required="false" />

Newer versions of Android have a different permissions model. You will need to use the PermissionsAndroid class in react-native in order to request the CAMERA and RECORD_AUDIO permissions.

Additional Tips

Under default settings, the Android build will fail if the total number of symbols exceeds a certain threshold. If you should encounter this issue when adding this library (e.g., if your build fails with com.android.dex.DexIndexOverflowException), you can turn on jumbo mode by editing your app/build.gradle:

android {
  ...
  dexOptions {
    jumboMode true
  }
}

If you are using proguard (very likely), you will also need to ensure that the symbols needed by this library are not stripped. To do that, add these two lines to proguard-rules.pro:

  -keep class com.twilio.** { *; }
  -keep class tvi.webrtc.** { *; }

Docs

You can see the documentation here.

Usage

We have three important components to understand:

import {
  TwilioVideo,
  TwilioVideoLocalView,
  TwilioVideoParticipantView,
} from "react-native-twilio-video-webrtc";
  • TwilioVideo / is responsible for connecting to rooms, events delivery and camera/audio.
  • TwilioVideoLocalView / is responsible local camera feed view
  • TwilioVideoParticipantView / is responsible remote peer's camera feed view

Here you can see a complete example of a simple application that uses almost all the apis:

import React, { Component, useRef } from "react";
import {
  TwilioVideoLocalView,
  TwilioVideoParticipantView,
  TwilioVideo,
} from "react-native-twilio-video-webrtc";

const Example = (props) => {
  const [isAudioEnabled, setIsAudioEnabled] = useState(true);
  const [isVideoEnabled, setIsVideoEnabled] = useState(true);
  const [status, setStatus] = useState("disconnected");
  const [participants, setParticipants] = useState(new Map());
  const [videoTracks, setVideoTracks] = useState(new Map());
  const [token, setToken] = useState("");
  const twilioRef = useRef(null);

  const _onConnectButtonPress = () => {
    twilioRef.current.connect({ accessToken: token });
    setStatus("connecting");
  };

  const _onEndButtonPress = () => {
    twilioRef.current.disconnect();
  };

  const _onMuteButtonPress = () => {
    twilioRef.current
      .setLocalAudioEnabled(!isAudioEnabled)
      .then((isEnabled) => setIsAudioEnabled(isEnabled));
  };

  const _onFlipButtonPress = () => {
    twilioRef.current.flipCamera();
  };

  const _onRoomDidConnect = ({ roomName, error }) => {
    console.log("onRoomDidConnect: ", roomName);

    setStatus("connected");
  };

  const _onRoomDidDisconnect = ({ roomName, error }) => {
    console.log("[Disconnect]ERROR: ", error);

    setStatus("disconnected");
  };

  const _onRoomDidFailToConnect = (error) => {
    console.log("[FailToConnect]ERROR: ", error);

    setStatus("disconnected");
  };

  const _onParticipantAddedVideoTrack = ({ participant, track }) => {
    console.log("onParticipantAddedVideoTrack: ", participant, track);

    setVideoTracks((originalVideoTracks) => {
      originalVideoTracks.set(track.trackSid, {
        participantSid: participant.sid,
        videoTrackSid: track.trackSid,
      });
      return new Map(originalVideoTracks);
    });
  };

  const _onParticipantRemovedVideoTrack = ({ participant, track }) => {
    console.log("onParticipantRemovedVideoTrack: ", participant, track);

    setVideoTracks((originalVideoTracks) => {
      originalVideoTracks.delete(track.trackSid);
      return new Map(originalVideoTracks);
    });
  };

  return (
    <View style={styles.container}>
      {status === "disconnected" && (
        <View>
          <Text style={styles.welcome}>React Native Twilio Video</Text>
          <TextInput
            style={styles.input}
            autoCapitalize="none"
            value={token}
            onChangeText={(text) => setToken(text)}
          ></TextInput>
          <Button
            title="Connect"
            style={styles.button}
            onPress={_onConnectButtonPress}
          ></Button>
        </View>
      )}

      {(status === "connected" || status === "connecting") && (
        <View style={styles.callContainer}>
          {status === "connected" && (
            <View style={styles.remoteGrid}>
              {Array.from(videoTracks, ([trackSid, trackIdentifier]) => {
                return (
                  <TwilioVideoParticipantView
                    style={styles.remoteVideo}
                    key={trackSid}
                    trackIdentifier={trackIdentifier}
                  />
                );
              })}
            </View>
          )}
          <View style={styles.optionsContainer}>
            <TouchableOpacity
              style={styles.optionButton}
              onPress={_onEndButtonPress}
            >
              <Text style={{ fontSize: 12 }}>End</Text>
            </TouchableOpacity>
            <TouchableOpacity
              style={styles.optionButton}
              onPress={_onMuteButtonPress}
            >
              <Text style={{ fontSize: 12 }}>
                {isAudioEnabled ? "Mute" : "Unmute"}
              </Text>
            </TouchableOpacity>
            <TouchableOpacity
              style={styles.optionButton}
              onPress={_onFlipButtonPress}
            >
              <Text style={{ fontSize: 12 }}>Flip</Text>
            </TouchableOpacity>
            <TwilioVideoLocalView enabled={true} style={styles.localVideo} />
          </View>
        </View>
      )}

      <TwilioVideo
        ref={twilioRef}
        onRoomDidConnect={_onRoomDidConnect}
        onRoomDidDisconnect={_onRoomDidDisconnect}
        onRoomDidFailToConnect={_onRoomDidFailToConnect}
        onParticipantAddedVideoTrack={_onParticipantAddedVideoTrack}
        onParticipantRemovedVideoTrack={_onParticipantRemovedVideoTrack}
      />
    </View>
  );
};

AppRegistry.registerComponent("Example", () => Example);

Run the Example Application

To run the example application:

  • Move to the Example directory: cd Example
  • Install node dependencies: yarn install
  • Install objective-c dependencies: cd ios && pod install
  • Open the xcworkspace and run the app: open Example.xcworkspace

Migrating from 1.x to 2.x

  • Make sure your pod dependencies are updated. If you manually specified a pod version, you'll want to update it as follows:
  s.dependency 'TwilioVideo', '~> 2.2.0'
  • Both participants and tracks are uniquely identified by their sid/trackSid field. The trackId field no longer exists and should be replaced by trackSid. Commensurate with this change, participant views now expect participantSid and videoTrackSid keys in the trackIdentity prop (instead of identity and trackId).

  • Make sure you're listening to participant events via onParticipant{Added/Removed}VideoTrack rather than onParticipant{Enabled/Disabled}Track.

Contact

react-native-twilio-video-webrtc's People

Contributors

akshaybarad avatar amsul avatar andybar2 avatar balasnest avatar baloo1 avatar bilby91 avatar brycnguyen avatar captainjeff avatar danielr18 avatar dependabot[bot] avatar eduedix avatar gaston23 avatar graphee-gabriel avatar keithhackbarth avatar kousaku-maron avatar krzysiekkogut avatar luukschipperheyn avatar markokarapandzic avatar marqroldan avatar marymhart avatar pedro-cerdera avatar pettersamuelsen avatar r0b0t3d avatar rajesh1158 avatar remigijusbalc avatar slvtrs avatar slycoder avatar tyleralves avatar umarniz avatar vladyslavkochetkov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

react-native-twilio-video-webrtc's Issues

Android compilation Error

When configuring it on Android, I follow the steps given in the documentation and I get this error on buid (using react-native run-android).

node_modules/react-native-twilio-video-webrtc/android/src/main/java/com/twiliorn/library/TwilioPackage.java:27:
error: method does not override or implement a method from a supertype

@Override
^

Note: node_modules/react-native-twilio-video-webrtc/android/src/main/java/com/twiliorn/library/CustomTwilioVideoView.java uses or overrides a deprecated API

1 error :react-native-twilio-video-webrtc:compileReleaseJavaWithJavac FAILED

FAILURE: Build failed with an exception.

It's kinda blocking me from doing what I have to. If you have any solution, I would love it

Could not resolve all dependencies for configuration ':react-native-twilio-video-webrtc:_debugPublishCopy'. > Could not find com.android.support:support-annotations:26.1.0

I'm not actually sure it's the module's fault since it's a pretty specific Android error but I hope someone knows how to fix that

Steps to reproduce

  1. Try compiling the app, either debug or release

Expected behaviour

App should compile succesfully

Actual behaviour

`FAILURE: Build failed with an exception.

  • What went wrong:
    A problem occurred configuring project ':app'.

Could not resolve all dependencies for configuration ':app:_debugApk'.
A problem occurred configuring project ':react-native-twilio-video-webrtc'.
> Could not resolve all dependencies for configuration ':react-native-twilio-video-webrtc:_debugPublishCopy'.
> Could not find com.android.support:support-annotations:26.1.0.
Searched in the following locations:
file:/Users/antoine/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/26.1.0/support-annotations-26.1.0.pom
file:/Users/antoine/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/26.1.0/support-annotations-26.1.0.jar
file:/Users/antoine/R/medwayapp/android/sdk-manager/com/android/support/support-annotations/26.1.0/support-annotations-26.1.0.jar
Required by:
project :react-native-twilio-video-webrtc > com.android.support:appcompat-v7:25.3.1
project :react-native-twilio-video-webrtc > com.android.support:appcompat-v7:25.3.1 > com.android.support:support-vector-drawable:25.3.1
project :react-native-twilio-video-webrtc > com.android.support:design:25.3.1 > com.android.support:recyclerview-v7:25.3.1
project :react-native-twilio-video-webrtc > com.android.support:design:25.3.1 > com.android.support:transition:25.3.1
project :react-native-twilio-video-webrtc > com.android.support:appcompat-v7:25.3.1 > com.android.support:support-vector-drawable:25.3.1 > com.android.support:support-compat:25.3.1
project :react-native-twilio-video-webrtc > com.android.support:design:25.3.1 > com.android.support:support-v4:25.3.1 > com.android.support:support-media-compat:25.3.1
project :react-native-twilio-video-webrtc > com.android.support:design:25.3.1 > com.android.support:support-v4:25.3.1 > com.android.support:support-core-utils:25.3.1
project :react-native-twilio-video-webrtc > com.android.support:design:25.3.1 > com.android.support:recyclerview-v7:25.3.1 > com.android.support:support-core-ui:25.3.1
> Could not find com.android.support:support-annotations:26.1.0.
Searched in the following locations:
file:/Users/antoine/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/26.1.0/support-annotations-26.1.0.pom
file:/Users/antoine/Library/Android/sdk/extras/android/m2repository/com/android/support/support-annotations/26.1.0/support-annotations-26.1.0.jar
file:/Users/antoine/R/medwayapp/android/sdk-manager/com/android/support/support-annotations/26.1.0/support-annotations-26.1.0.jar
Required by:
project :react-native-twilio-video-webrtc > com.twilio:video-android:1.3.8

  • Try:
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED`

Environment

  • Node.js version: v8.4.0
  • React Native version: 0.42.0
  • React Native platform + platform version: Android 7

react-native-twilio-video-webrtc

Version: master

com.android.dex.DexIndexOverflowException: Cannot merge new index 65789 into a non-jumbo instruction

Steps to reproduce

  1. react-native run-android

Error Details

Dex: Error converting bytecode to dex:
Cause: com.android.dex.DexIndexOverflowException: Cannot merge new index 65789 into a non-jumbo instruction!
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: Cannot merge new index 65789 into a non-jumbo instruction!
at com.android.dx.merge.InstructionTransformer.jumboCheck(InstructionTransformer.java:111)
at com.android.dx.merge.InstructionTransformer.access$800(InstructionTransformer.java:26)
at com.android.dx.merge.InstructionTransformer$StringVisitor.visit(InstructionTransformer.java:74)
at com.android.dx.io.CodeReader.callVisit(CodeReader.java:114)
at com.android.dx.io.CodeReader.visitAll(CodeReader.java:89)
at com.android.dx.merge.InstructionTransformer.transform(InstructionTransformer.java:50)
at com.android.dx.merge.DexMerger.transformCode(DexMerger.java:854)
at com.android.dx.merge.DexMerger.transformMethods(DexMerger.java:828)
at com.android.dx.merge.DexMerger.transformClassData(DexMerger.java:800)
at com.android.dx.merge.DexMerger.transformClassDef(DexMerger.java:697)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:551)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:167)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:194)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:506)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:336)
at com.android.dx.command.dexer.Main.runDx(Main.java:291)
at com.android.dx.command.dexer.Main.main(Main.java:247)
at com.android.dx.command.Main.main(Main.java:94)

:react-native-twilio-video-webrtc:transformClassesWithDexForDebugAndroidTest FAILED

Environment

  • Node 7.8.0:
  • React Native 0.46.1:
  • Android

react-native-twilio-video-webrtc

Version: master

java.lang.IllegalStateException: A VideoCapturer must provide at least one supported VideoFormat

Steps to reproduce

1.connect to a room.
2.disconnect from a room.
3.connect to another room.

Expected behaviour

Work fine.

Actual behaviour

Throw exception and the app close.

Environment

  • Node.js version:v8.0
  • React Native version:0.48.4
  • React Native platform + platform version: Android 6, Android 7

react-native-twilio-video-webrtc

Version: master

Log:

VideoTrack.java:44)
E/AndroidRuntime(24549): at com.twiliorn.library.CustomTwilioVideoView.onHostResume(CustomTwilioVideoView.java:196)
E/AndroidRuntime(24549): at com.facebook.react.bridge.ReactContext$1.run(ReactContext.java:153)
E/AndroidRuntime(24549): at android.os.Handler.handleCallback(Handler.java:743)
E/AndroidRuntime(24549): at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime(24549): at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
E/AndroidRuntime(24549): at android.os.Looper.loop(Looper.java:150)
E/AndroidRuntime(24549): at android.app.ActivityThread.main(ActivityThread.java:5621)
E/AndroidRuntime(24549): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(24549): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
E/AndroidRuntime(24549): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

and sometimes i find this:

java.lang.RuntimeException: getParameters failed (empty parameters)
E/AndroidRuntime( 2940): at android.hardware.Camera.native_getParameters(Native Method)
E/AndroidRuntime( 2940): at android.hardware.Camera.getParameters(Camera.java:2272)
E/AndroidRuntime( 2940): at org.webrtc.Camera1Session.create(Camera1Session.java:83)
E/AndroidRuntime( 2940): at org.webrtc.Camera1Capturer.createCameraSession(Camera1Capturer.java:34)
E/AndroidRuntime( 2940): at org.webrtc.CameraCapturer$5.run(CameraCapturer.java:285)
E/AndroidRuntime( 2940): at android.os.Handler.handleCallback(Handler.java:743)
E/AndroidRuntime( 2940): at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime( 2940): at android.os.Looper.loop(Looper.java:150)
E/AndroidRuntime( 2940): at android.os.HandlerThread.run(HandlerThread.java:61)

Audio echo and record itself

Steps to reproduce

  1. Install module in 2 devices
  2. Both join to the same room

Expected behaviour

The audio normal

Actual behaviour

The audio recording itself and get bigger and bigger loud

Environment

  • React Native version: 0.44.0
  • React Native platform + platform version: iOS 10.0

react-native-twilio-video-webrtc

Version: 1.0.2

Here the video for the issue
https://www.youtube.com/watch?v=1rLcQmvLRYs

Error: @providesModule naming collision: Duplicate module name: react-native-vector-icons

in a fresh react-native project, I first install the package with:
yarn add react-native-twilio-video-webrtc

and then start the project with:
react-native run-ios

the build succeeds but the packager gives the following error:

Failed to build DependencyGraph: @providesModule naming collision:
  Duplicate module name: react-native-vector-icons
  Paths: /Users/erdem/ShitApp/node_modules/react-native-twilio-video-webrtc/node_modules/react-native/local-cli/rnpm/core/test/fixtures/files/package.json collides with /Users/erdem/ShitApp/node_modules/react-native/local-cli/core/__fixtures__/files/package.json

This error is caused by a @providesModule declaration with the same name across two different files.
Error: @providesModule naming collision:
  Duplicate module name: react-native-vector-icons
  Paths: /Users/erdem/ShitApp/node_modules/react-native-twilio-video-webrtc/node_modules/react-native/local-cli/rnpm/core/test/fixtures/files/package.json collides with /Users/erdem/ShitApp/node_modules/react-native/local-cli/core/__fixtures__/files/package.json

This error is caused by a @providesModule declaration with the same name across two different files.
    at HasteMap._updateHasteMap (/Users/erdem/ShitApp/node_modules/react-native/packager/react-packager/src/node-haste/DependencyGraph/HasteMap.js:159:13)
    at p.getName.then.name (/Users/erdem/ShitApp/node_modules/react-native/packager/react-packager/src/node-haste/DependencyGraph/HasteMap.js:134:31)
~
Process terminated. Press <enter> to close the window

What can I do to resolve this problem?

Warning: Native component for "RCTTWLocalVideoView" does not exist

Steps to reproduce

  1. Follow installation steps for iOS (using npm)
  2. Launch the app on the iOS Simulator

Expected behaviour

No any warnings and errors.

Actual behaviour

image

Environment

  • Node.js version: 7.0.0
  • React Native version: 0.42.0
  • React Native platform + platform version: iOS 10.1

react-native-twilio-video-webrtc

Version: 1.0.2

When I navigate to a screen with the react-native-twilio-video-webrtc components, the following error is displayed:

image

Module is added to the Libraries and Build Phases in Xcode:

image

Installation on Android is successful and works fine.

Unable to resolve module `ReactNativeART`

Any suggestions on resolving this issue? Thanks.

Full error: Unable to resolve module ReactNativeART from /Users/cantgetnosleep/development/toptal/TulsaApp/bodak-frontend/node_modules/react-native/Libraries/react-native/react-native-implementation.js: Module does not exist in the module map

  • Node.js version: v7.10.1
  • React Native version: 0.47.2
  • React Native platform + platform version: iOS 9.0

react-native-twilio-video-webrtc

Version: 1.0.2 from yarn

I tried adding subspecs to the podfile to resolve this. Also tried numerous rounds of cleaning and rebuilding both node_modules and the pod project.

Podfile:
`platform :ios, '9.0'

target 'SmileMore' do

pod 'Yoga', path: '../node_modules/react-native/ReactCommon/yoga/Yoga.podspec'
pod 'React', path: '../node_modules/react-native', :subspecs => [
"Core",
"ART",
"RCTActionSheet",
"RCTAnimation",
"RCTCameraRoll",
"RCTImage",
"RCTGeolocation",
"RCTNetwork",
"RCTText",
"RCTVibration",
"RCTWebSocket",
"DevSupport",
"BatchedBridge"
]
pod 'react-native-twilio-video-webrtc', path: '../node_modules/react-native-twilio-video-webrtc'

end`

Error {"reason":"SIP error 500"}

Hi,

I still have this error as an response after connection :
_onVideoConnectButtonPress = () => { console.log({ roomName: missionId, accessToken: this.state.token }); this.refs.twilioVideo.connect({ roomName: missionId, accessToken: this.state.token }); }

response :
{"reason":"SIP error 500"}

Thanks

Can't build iOS app

Steps to reproduce

as stated here: https://docs.expo.io/versions/latest/guides/expokit.html

  1. create-react-native-app AwesomeProject
  2. yarn eject (choose Expo Kit)
  3. pod install
  4. yarn add https://github.com/blackuy/react-native-twilio-video-webrtc
  5. pod 'TwilioVideo'
  6. pod install
    Until now everything's seems ok.
  7. Add the XCode project to your own XCode project's "Libraries" directory from:
    node_modules/react-native-twilio-video-webrtc/ios/RNTwilioVideoWebRTC.xcodeproj
  8. Add libRNTwilioVideoWebRTC.a to your XCode project target's "Linked Frameworks and Libraries"

Expected behaviour

Build app succeed

Actual behaviour

At step 8 build Fails.

Environment

react-native-twilio-video-webrtc

Version: npm version or "master"

Change audio output

Has anyone managed to figure out a way to change the audio output of a video call? On my iPad it's going through speakers since that's all it's got but on the iPhone it diverts through the earpiece. I have tried setting AVAudioSession in the AppDelegate.m to PlayAndRecord as well to send audio to the speaker but no luck. Have not tried on Android yet. Anyone have any ideas?

Android: Illegal number of arguments for 'updateHotspot' command

I installed the master branch which has the latest android merge by @slycoder. My app itself successfully compiles, and I managed to get the UI up. I see connect and disconnect buttons (blue color). When I click on the connect button, I get an error Illegal number of arguments for 'updateHotspot' command. I was expecting that the video call will start.

Digging more into the code, it appears that the react native codebase has the above error message defined in 2 files: RCTViewManager.java and ReactViewManager.java. And it happens because the receiveCommand() annotated as overridden in the CustomTwilioVideoViewManager.java is somehow not getting overridden. What could be the issue?

Compatibility with React-Native 0.48.3 — Linking for iOS

Steps to reproduce

  1. react-init Example
  2. follow README for ios — yarn add https://github.com/blackuy/react-native-twilio-video-webrtc , create the Podfile, do pod install
  3. go to ios folder cd ios
  4. execute pod install
  5. add signing configuration for the xcode
  6. try to archive a project — it'll say that react-native-twilio-video-webrtc is not found.

I tried to find workaround and got your Example project and bumped react-native to 0.45(0.46..0.48) and reinstalling pods — got almost the same issues, just with a different error.
It seems like the issue here is with the packager changes because according to the release notes there weren't many changes in the react-native itself.

important App runs perfectly fine using react-native up to 0.48.3 in both Debug and Release modes, error happens only when you're trying to Archive!

Environment

  • Node.js version: 8.1
  • React Native version: 0.48.3
  • React Native platform + platform version: iOS 9.0

react-native-twilio-video-webrtc

Version: "master"

Failsafe for disconnecting from a room

Does anyone employ a way to ensure a user correctly disconnects from a room. We are finding there are situations where .disconnect() does not actually disconnect them. We use sockets to notify a user when a video chat is over. We listen for that and ha sleep disconnecting on the client side but it’s not consistent. Is calling that one method sufficient?

Would really appreciate some example code on this.

When building for Android I get an Error

Steps to reproduce

  1. Follow integration steps for Android
  2. Run react-native run-android in terminal
  3. Spits out this error:
    error: package com.twiliorn.library does not exist import com.twiliorn.library.TwilioPackage;

Environment

  • Node.js version: 6.9.1
  • React Native version: 0.46.4
  • React Native platform + platform version: iOS 9.0

react-native-twilio-video-webrtc

Version: "master"

Black screen after connect on android

Steps to reproduce

  1. Create a new room
  2. Join to the created room
  3. Check if video working from remote track

Expected behaviour

get the video with audio from remote twilio room

Actual behaviour

I'm getting the audio only, but TwilioVideoParticipantView is black. On iOS both audio and video works fine.

Environment

  • Node.js version: 9.5
  • React Native version: 0.52.3
  • React Native platform + platform version: Android 6.0 API 26

The issue is similar to #86 but I can't downgrade my environment.

Linker command failed with exit code 1

I installed the module via yarn from the repo, and now I'm getting a linker error. Any help would be appreciated? I've tried cleaning the project, deleting the derived data, rebuilding and reinstalling the pods.

screen shot 2017-10-12 at 9 15 57 am

"react": "16.0.0-alpha.12",
"react-native": "0.47.2",

Multiple instances of CustomTwilioVideoView

So I'm using react-navigation with twilio video. When a user presses a button, it navigates to the video call screen and a room is created. The app can go to the background and in the console there is one instance of 'onHostPause'. After a while, they eventually end the call, disconnect() is called, and they are navigated back to the previous screen. Now the issue is if they press the button again to create a room, an instance of CustomTwilioVideoView is created but the previous instance appears to still exist. When the app goes to the background, this time there are two instances of 'onHostPause'. I'm wondering if there's any way to dealloc any previous instances of CustomTwilioVideoView so as to prevent multiple copies of the same class. I have tried creating a singleton of it and returning the singleton in CustomTwiloVideoViewManager, but it doesn't completely get me there. I'd like a way to completely remove CustomTwilioVideoView when disconnect() is called until a new call is made so that onCreate is called each time. Has anyone else had similar thoughts on this?

Keep a Changelog and/or track Releases on Github

I was recently going through the codebase and found it difficult to track the changes, additions, bug fixes & development of this package.

Would you consider maintaining a CHANGELOG.md and/or using Releases on github to help track changes to the package.

If you are interested I would recommend (I have personally used) the keepachangelog style/template. 🔥 And would be happy to help if you had any questions.

Audio from streams get muted

Steps to reproduce

  1. Have multiple clients connect to a room
  2. They can all hear each other
  3. Play a video with sound -> Sound suddenly stops from all streams

Expected behaviour

Stream sound should be mixed with video sound

Actual behaviour

Stream sound is not working anymore

Environment

  • Node.js version: 8.2
  • React Native version: 0.51
  • React Native platform + platform version: iOS 11.2

react-native-twilio-video-webrtc

Version: npm version or "master"

Any ideas on where to get started investigating this?

"RNCustomTwilioVideoView" does not exist

Steps to reproduce

1.Create a fresh react app
2.Install the plugin as per the readme file and link it via react-native link
3.Just run the application it gives an error

Expected behaviour

It should run the application on device, I have generated token and set the room name on a dummy app.

Actual behaviour

It gives an error snapshot attached

Environment

  • Node.js version: V8.9.3
  • React Native version:0.51.0
  • React Native platform + platform version: Android

react-native-twilio-video-webrtc

Version: npm version or "master" 1.0.1

Demo Source Code : https://github.com/kapilkarda/twilio-video-demo

image

Data track support

Hi guys. I just saw that Twillio added data track support on the native clients. Are there any plans for you to add it on the RN project?

Getting the local participant's track ID

Hey, first of all, thanks for the library!

I've created custom logic to workaround the issue with participant disconnecting taking too long time, but to finish it in my project, I need the local participant's video track ID. Is there any way I can get this ID?

Best regards

iOS build fails with library not found error

Steps to reproduce

  1. Add a Podfile in React Native project:
platform :ios, '9.0'
use_frameworks!

source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/twilio/cocoapod-specs'

target 'MedChat' do
  pod 'Yoga', path: '../node_modules/react-native/ReactCommon/yoga/Yoga.podspec'

  pod 'React', :path => '../node_modules/react-native'

  pod 'react-native-twilio-video-webrtc', path: '../node_modules/react-native-twilio-video-webrtc'

  pod 'RCTTwilioChat', :path => '../node_modules/react-native-twilio-chat/ios'
  pod 'TwilioChatClient', '~> 0.16.0'
  pod 'TwilioAccessManager', '~> 0.1.1'
end
  1. pod install
  2. react-native run-ios

Expected behaviour

App launches in simulator

Actual behaviour

Build command fails with library not found error. Stacktrace:

Ld build/Build/Products/Debug-iphonesimulator/MedChat.app/MedChat normal x86_64
    cd /Users/mariussteikunas/code/medcall-app/ios
    export IPHONEOS_DEPLOYMENT_TARGET=10.2
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Users/mariussteikunas/Documents/anaconda/anaconda3/bin:/Users/mariussteikunas/.rvm/gems/ruby-2.3.0/bin:/Users/mariussteikunas/.rvm/gems/ruby-2.3.0@global/bin:/Users/mariussteikunas/.rvm/rubies/ruby-2.3.0/bin:/Users/mariussteikunas/.nvm/versions/node/v6.10.3/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/android-sdk/tools:/usr/local/share/android-sdk/platform-tools:/Users/mariussteikunas/.rvm/bin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator11.1.sdk -L/Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator -F/Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator -F/Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/RCTTwilioChat -F/Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/React -F/Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/Yoga -F/Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/react-native-twilio-video-webrtc -F/Users/mariussteikunas/code/medcall-app/ios/Pods/TwilioAccessManager -F/Users/mariussteikunas/code/medcall-app/ios/Pods/TwilioChatClient -F/Users/mariussteikunas/code/medcall-app/ios/Pods/TwilioVideo -filelist /Users/mariussteikunas/code/medcall-app/ios/build/Build/Intermediates.noindex/MedChat.build/Debug-iphonesimulator/MedChat.build/Objects-normal/x86_64/MedChat.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -Xlinker -rpath -Xlinker @executable_path/Frameworks -mios-simulator-version-min=10.2 -Xlinker -object_path_lto -Xlinker /Users/mariussteikunas/code/medcall-app/ios/build/Build/Intermediates.noindex/MedChat.build/Debug-iphonesimulator/MedChat.build/Objects-normal/x86_64/MedChat_lto.o -Xlinker -no_deduplicate -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -fobjc-link-runtime -ObjC -lc++ -framework RCTTwilioChat -framework React -framework TwilioAccessManager -framework TwilioChatClient -framework TwilioVideo -framework react_native_twilio_video_webrtc -framework yoga -ObjC -lc++ -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/mariussteikunas/code/medcall-app/ios/build/Build/Intermediates.noindex/MedChat.build/Debug-iphonesimulator/MedChat.build/MedChat.app.xcent -framework CoreData -lsqlite3.0 -lz -framework SystemConfiguration /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTAnimation.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libReact.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTActionSheet.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTGeolocation.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTImage.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTLinking.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTNetwork.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTSettings.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTText.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTVibration.a /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/libRCTWebSocket.a -lRNDeviceInfo -lRCTGoogleAnalyticsBridge -lRNVectorIcons -lRCTTwilioChat -lTWReactNativeTwilioVideoWebrtc -framework Pods_MedChat -Xlinker -dependency_info -Xlinker /Users/mariussteikunas/code/medcall-app/ios/build/Build/Intermediates.noindex/MedChat.build/Debug-iphonesimulator/MedChat.build/Objects-normal/x86_64/MedChat_dependency_info.dat -o /Users/mariussteikunas/code/medcall-app/ios/build/Build/Products/Debug-iphonesimulator/MedChat.app/MedChat

ld: library not found for -lTWReactNativeTwilioVideoWebrtc
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Environment

  • Node.js version: v6.10.3
  • React Native version: 0.44.3
  • React Native platform + platform version: iOS 9.0

react-native-twilio-video-webrtc

Version: 1.0.2

Duplicate and redefinition errors

When I attempt to use the 1.0.1 version of this package installed with npm, I get a bunch of duplicate symbol errors in XCode when I build it there. Any suggestions on how to fix this? The react native app itself gives the following error: "Native module cannot be null"

"react": "16.0.0-alpha.12",
"react-native": "0.47.2",

Question about CPU

I've been using my own implementation of video streaming with react-native-webrtc and the it has really high CPU (70-80%) on iOS.

I've been thinking about switching to twilio and using this module but wanted to see how your CPU usage/battery life has been with this module. Any info would be super helpful!

Native module cannot be null error on Ios

Steps to reproduce

Intergrate package as usual

Expected behaviour

Expect to not see error

Actual behaviour

Get error, Native module cannot be null, pointing to Native Event Emitter via TwilioVideo.ios.js

Environment

RN: 48
IOS 9

react-native-twilio-video-webrtc

1.0.2

Screen capture doesn't reconnect when ipad is put to sleep

Steps to reproduce

  1. Connect to room
  2. Click 'power/ sleep' button to put ipad to sleep
  3. Wait for room connection to drop
  4. Click 'power/ sleep' button to wake ipad and log in with passcode

Expected behaviour

Room should re-establish connection, or some event should fire. (onRoomDidDisconnect?)

Actual behaviour

The app functions normally, but screen sharing seems to crash/ not reconnect.
Error in xCode:

2017-09-05 13:31:06.428 HappyOnboarding[3853:1297844] ERROR:TwilioVideo:[Signaling]:RESIP::TRANSPORT: Socket was closed (due to backgrounding or handover), deleting connection ...
2017-09-05 13:31:06.435 HappyOnboarding[3853:1297844] ERROR:TwilioVideo:[Signaling]:RESIP::TRANSPORT: Socket was closed, reopening ...
2017-09-05 13:31:06.445 HappyOnboarding[3853:1297873] ERROR:TwilioVideo:[Core]:I/O error connecting to sdkgw.us1.twilio.com:443, I/O error.

Interestingly it sends the onRoomDidDisconnect event if you just background the app (go to home screen), wait for the connection to drop then bring up the app again. This behavior is perfect for me.

Environment

  • Node.js version: v8.4.0
  • React Native version: 0.42.0
  • React Native platform + platform version: iOS 9.3.4 on Ipad Mini 2

react-native-twilio-video-webrtc

Version: "master"

RCTBridge required dispatch_sync to load RCTDevSettings.

Get the Warning: RCTBridge required dispatch_sync to load RCTDevSettings. This may lead to deadlocks

Code based on the example runs ok in simulator (but of course doesn't use camera)
Running on the phone loads ok at first until it deadlocks with the above error - anyone have similar issues?

It would be really helpful in general if someone could publish a working example along with the working environment.

Android can't display TwilioVideoParticipantView - black screen

Steps to reproduce

  1. Install 0.51.0 version of React Native
  2. Connect to Room by react-native-twilio-video-webrtc on android
  3. Check if video working from remote track

Expected behaviour

I want to actually get the video with audio from remote twilio room

Actual behaviour

Actually when I'm connected to the room, I'm getting the audio, but video sharing only black screen. On iOS both audio and video works well, but on android only audio is working.

Environment

  • Node.js version: 8.9.4
  • React Native version: 0.51.0
  • React Native platform + platform version: Android 6.0 API 23

ios Pods Unable to satisfy the following requirements

Steps to reproduce

  1. Follow integration steps for iOS

  2. Run pod install

  3. Error :

    [!] Unable to satisfy the following requirements:

    • TwilioVideo (>= 1.0.1) required by react-native-twilio-video-webrtc (1.0.2)
      Specs satisfying the TwilioVideo (>= 1.0.1) dependency were found, but they required a higher minimum deployment target.

Environment

  • Node 8.1.4
  • React Native 0.47.1
  • iOS 9.0

Undefined values in onParticipantAddedVideoTrack callback

Steps to reproduce

  1. Install the module on Android
  2. Run it and connect 2 users to a room

Expected behaviour

Should run smoothly. Actually it doesn't impair he Twilio connection since I can Esc this error and see it works well, but having undefined values here is not so good

Actual behaviour

Logs :
08-14 12:41:29.689 10957 10988 I ReactNativeJS: 'onParticipantAddedVideoTrack: ', undefined, undefined
08-14 12:41:29.689 10957 10988 E ReactNativeJS: undefined is not an object (evaluating 'track.trackId')
08-14 12:41:29.751 10957 10988 W ReactNativeJS: Unable to symbolicate stack trace: The stack is null

capture d ecran 2017-08-14 a 12 42 36

Environment

  • Node.js version: 8.1.4
  • React Native version: 0.43.1
  • React Native platform + platform version: Android 25

react-native-twilio-video-webrtc

Version: master

Android onParticipantAddedVideoTrack is undefined

I'm having some trouble connecting two devices (one android, one iOS) together into the same room. The iOS device has details on the android participant when it joins a room, but the Android device reports back undefined for details on the iOS device, but it does recognise that their is a participant as the function is called. Is there something I have missed?

beta5 and beta6 changes to TVIVideoCapturer

Trying to upgrade to TwilioVideo beta5 or beta6. We get an exception

Noting in the Twilio Video docs that the changelog sates:

Added a new video frame class TVIVideoFrame, which replaces the TVII420Frame class for rendering and the TVIVideoFrame struct for capturing. TVIVideoFrame can be created using a CVImageBufferRef . TVIVideoRenderer and TVIVideoCaptureConsumer have been updated to use this class.

We are trying to figure out the issue ourselves but thought I would run it by you to see if you know a solution.

Also SO ticket here:
http://stackoverflow.com/questions/42075289/capturer-iphone-camera-not-provided-to-tvivideocapturer-for-twiliovideo-ios-sd

Rear facing camera

This isn't an issue per se, but I've not been able to find anyplace in the documentation to flip to the rear facing camera for the local view. If someone could point me in the right direction, I'd greatly appreciate it. If this is not the correct way to go about this, also kindly let me know and I'll remove and ask there. Thanks!

Migrate to TwilioVideo 2.0

In order to support #61 we need to first support TwilioVideo 2.0

In order to do that we need to:

  • Upgrade iOS native integration to 2.0
  • Upgrade Android native integration to 2.0
  • Adapt JS API if needed. We will find out this based on the changes in 2.0 API.

@petros9282 you want to start working on this ? I can help out with the testing and doing code reviews at the moment.

@slycoder Can you help out with the Android code reviews ?

Can't see my local video on iOS

Steps to reproduce

  1. Install on iOS following the tutorial
  2. Launch the app

Expected behaviour

I should be able to see my local Video

Actual behaviour

I don't see my local Video

Environment

  • Node.js version: 8.4.0
  • React Native version: 0.42
  • React Native platform + platform version: iOS 9.2

img_0028

Works very fine on Android. Twilio Component is the same as in the tutorial in this Github's readme, I just changed the buttons styling
The big video is a remote one

_react2.PropTypes.func is undefined

Steps to reproduce

  1. Create a fresh react app
  2. install the plugin as per the readme file and link it via react-native link
  3. Just run the application it gives an error

Expected behaviour

It should run the application on device, I have generated token and set the roomname on a dummy app.

Actual behaviour

It gives an error snapshot attached

Environment

  • Node.js version: V8.9.3
  • React Native version:0.51.0
  • React Native platform + platform version: Android

react-native-twilio-video-webrtc

Version: npm version or "master" - 1.0.1

Demo Source Code : https://github.com/kapilkarda/twilio-video-demo

screenshot_20171221_155200

Please help me

onParticipantRemovedVideoTrack never gets called

Steps to reproduce

  1. Connect to a room from 2 different iOS devices
  2. Disconnect from the second device
  3. onParticipantRemovedVideoTrack for the first device is not called

Expected behaviour

onParticipantRemovedVideoTrack should be called on the first device that is still connected

Actual behaviour

No way to tell if a second device has disconnected, which leaves us with a frozen video stream

Environment

  • Node.js version: v8.8.1
  • React Native version: v0.49.3
  • React Native platform + platform version: iOS 9.0

react-native-twilio-video-webrtc

Version: npm version or "master" version "1.0.2"
Pod dependency s.dependency 'TwilioVideo', '>= 1.0.1' which resolves to - TwilioVideo (1.3.7)

Might be related to #56

document to get started

thank you for working on such a project. I would like to help you to write the documentation for installation and getting started. Can we chat about it? How can I contact you?

Android crash when connecting to the room

Hi, Thanks so much for your work — I'm using the package on iOS and it works flawlessly!
Finally got to Android setup and it's crashing when I'm trying to get to the room.
Appreciate your help and ready to assist with any debug information!

Steps to reproduce

  1. react-native init twilioTest
  2. yarn add https://github.com/blackuy/react-native-twilio-video-webrtc
  3. Followed the steps from the manual to link the library
  4. Run the Android test app (basically I took the content of index.ios.js and put it into index.android.js since there's no platform related staff.
  5. Put the token and room name into the fields and press "Connect"

Expected behaviour

View with my video (room was empty)

Actual behaviour

Crashes with an error — http://take.ms/i7cB9

Environment

  • Node.js version: 8.4.0
  • React Native: 0.44.0
  • React Native Cli: 2.0.1
  • React Native platform + platform version: Android 6.0

react-native-twilio-video-webrtc

Version: [email protected]

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.