Code Monkey home page Code Monkey logo

twilio-video-app-react's Introduction

Twilio Video React App

CircleCI

Warning

We are no longer allowing new customers to onboard to Twilio Video. Effective December 5th, 2024, Twilio Video will End of Life (EOL) and will cease to function for all customers. Customers may transition to any video provider they choose, however, we are recommending customers migrate to the Zoom Video SDK and we have prepared a Migration Guide. Additional information on this EOL is available in our Help Center here.

What is it

This application demonstrates a multi-party video application built with Twilio's Programmable Video JS SDK, Twilio's Conversations JS SDK, and Create React App.

  • Deploy to Twilio Serverless in just a few minutes
  • No other infrastructure is required
  • No code changes are required before your first deploy
  • There is no cost associated with deploying the app
  • Go Rooms usage is free, however standard usage charges apply for Programmable Video when using the app with all other Room types. The chat feature is built using the Conversations API and is free-of-cost up to 200 monthly active users, standard usage charges apply thereafter.

App Preview

Prerequisites

You must have the following installed:

  • Node.js v14+
  • NPM v6+ (comes installed with newer Node versions)

You can check which versions of Node.js and NPM you currently have installed with the following commands:

node --version
npm --version

Clone the repository

Clone this repository and cd into the project directory:

git clone https://github.com/twilio/twilio-video-app-react.git
cd twilio-video-app-react

Install Dependencies

Run npm install inside the main project folder to install all dependencies from NPM.

If you want to use yarn to install dependencies, first run the yarn import command. This will ensure that yarn installs the package versions that are specified in package-lock.json.

Add Noise Cancellation

Twilio Video has partnered with Krisp Technologies Inc. to add noise cancellation to the local audio track. This feature is licensed under the Krisp Plugin for Twilio. In order to add this feature to your application, please run npm run noisecancellation:krisp immediately after the previous step.

Install Twilio CLI and RTC Plugin

Install the Twilio CLI

The app is deployed to Twilio using the Twilio CLI. You can install the Twilio CLI using Homebrew on a Mac or npm.

To install twilio-cli using npm, run the following command:

npm install -g twilio-cli

Note: If you run into permissions errors when installing the twilio-cli globally with the npm install -g command, you might need to change the permissions of your global node_modules directory or configure npm to use a different directory for globally installed npm packages. See this StackOverflow thread, which has more information about both options. This code sample in GitHub is also a helpful guide for how to install npm packages globally without needing to change directory permissions and without sudo.

Login to the Twilio CLI

Login to the Twilio CLI. You will be prompted for your Account SID and Auth Token, both of which you can find on the dashboard of your Twilio console.

twilio login

Note: If you installed the Twilio CLI using npm and you receive an error that the twilio command is not found, you might need to update your Node install prefix. See this StackOverflow thread for more information.

Install the RTC Plugin

This app requires an additional plugin. Install the CLI plugin with:

twilio plugins:install @twilio-labs/plugin-rtc

Note: If you have previously installed the @twilio-labs/plugin-rtc plugin, please make sure that you are using the most recent version. You can upgrade the plugin by running twilio plugins:update. The chat feature requires version 0.8.1 or greater of @twilio-labs/plugin-rtc.

Deploy the app to Twilio

Before deploying the app, make sure you are using the correct account on the Twilio CLI (using the command twilio profiles:list to check). The app is deployed to Twilio with a single command:

npm run deploy:twilio-cli

This performs the following steps:

  • Builds the React app in the src directory
  • Generates a random code used to access the Video app
  • Deploys the React app and token server function as a Twilio Serverless service.
  • Prints the URL for the app and the passcode.

NOTE: The Twilio Function that provides access tokens via a passcode should NOT be used in a production environment. This token server supports seamlessly getting started with the collaboration app, and while convenient, the passcode is not secure enough for production environments. You should use an authentication provider to securely provide access tokens to your client applications. You can find more information about Programmable Video access tokens in this tutorial. As a precaution, the passcode will expire after one week. To generate a new passcode, redeploy the app:

npm run deploy:twilio-cli -- --override

View app details

View the URL and passcode for the Video app with

 twilio rtc:apps:video:view

Delete the app

Delete the app with

twilio rtc:apps:video:delete

This removes the Serverless app from Twilio. This will ensure that no further cost are incurred by the app.

Troubleshooting The Twilio CLI

If any errors occur after running a Twilio CLI RTC Plugin command, then try the following steps.

  1. Run twilio plugins:update to update the rtc plugin to the latest version.
  2. Run twilio rtc:apps:video:delete to delete any existing video apps.
  3. Run npm run deploy:twilio-cli to deploy a new video app.

App Behavior with Different Room Types

After running the command to deploy the app to Twilio, the room type will be returned in the command line output. Each room type provides a different video experience. More details about these room types can be found here. The rest of this section explains how these room types affect the behavior of the video app.

Group - The Group room type allows up to fifty participants to join a video room in the app. The Network Quality Level (NQL) indicators, dominant speaker, and start-stop recordings are demonstrated with this room type. Also, the VP8 video codec with simulcast enabled along with a bandwidth profile are set by default in order to provide an optimal group video app experience.

Small Group - This is a legacy room type; we recommend using Group Rooms instead when developing multiparty applications. The Small Group room type provides an identical group video app experience except for a smaller limit of four participants.

Peer-to-peer - Although up to ten participants can join a room using the Peer-to-peer (P2P) room type, it is ideal for a one to one video experience. The NQL indicators, bandwidth profiles, dominant speaker, and start-stop recordings cannot be used with this room type. Thus, they are not demonstrated in the video app. Also, the VP8 video codec with simulcast disabled and 720p minimum video capturing dimensions are also set by default in order to provide an optimal one to one video app experience. If more than ten participants join a room with this room type, then the video app will present an error.

Go - The Go room type provides a similar Peer-to-peer video app experience except for a smaller limit of two participants. If more than two participants join a room with this room type, then the video app will present an error.

If the max number of participants is exceeded, then the video app will present an error for all room types.

Features

The Video app has the following features:

Browser Support

See browser support table for twilio-video.js SDK.

Deeper dive

Running a local token server

This application requires an access token to connect to a Room for Video and a Conversation for Chat. The included local token server provides the application with access tokens. This token server can be used to run the app locally, and it is the server that is used when this app is run in development mode with npm start. Perform the following steps to setup the local token server:

  • Create an account in the Twilio Console.
  • Click on 'Settings' and take note of your Account SID.
  • Create a new API Key in the API Keys Section under Programmable Video Tools in the Twilio Console. Take note of the SID and Secret of the new API key.
  • Create a new Conversations service in the Services section under the Conversations tab in the Twilio Console. Take note of the SID generated.
  • Store your Account SID, API Key SID, API Key Secret, and Conversations Service SID in a new file called .env in the root level of the application (example below).
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_API_KEY_SID=SKxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_API_KEY_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_CONVERSATIONS_SERVICE_SID=ISxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Now the local token server (see server/index.ts) can dispense Access Tokens to connect to a Room and a Conversation. See .env.example for information on additional environment variables that can be used.

Note: the use of Twilio Conversations is optional. If you wish to opt out, simply run or build this app with the REACT_APP_DISABLE_TWILIO_CONVERSATIONS environment variable set to true.

Running the App locally

Run the app locally with

npm start

This will start the local token server and run the app in the development mode. Open http://localhost:3000 to see the application in the browser.

The page will reload if you make changes to the source code in src/. You will also see any linting errors in the console. Start the token server locally with

npm run server

The token server runs on port 8081 and expects a POST request at the /token route with the following JSON parameters:

{
  "user_identity": string, // the user's identity
  "room_name": string, // the room name
}

The response will be a token that can be used to connect to a room. The server provided with this application uses the same endpoints as the plugin-rtc Twilio CLI plugin that is used to deploy the app. For more detailed information on the server endpoints, please see the plugin-rtc README.

Multiple Participants in a Room

If you want to see how the application behaves with multiple participants, you can simply open localhost:3000 in multiple tabs in your browser and connect to the same room using different user names.

Additionally, if you would like to invite other participants to a room, each participant would need to have their own installation of this application and use the same room name and Account SID (the API Key and Secret can be different).

Building

Build the React app with

npm run build

This script will build the static assets for the application in the build/ directory.

Tests

This application has unit tests (using Jest) and end-to-end tests (using Cypress). You can run the tests with the following scripts.

Unit Tests

Run unit tests with

npm test

This will run all unit tests with Jest and output the results to the console.

E2E Tests

Run end to end tests with

npm run cypress:open

This will open the Cypress test runner. When it's open, select a test file to run.

Note: Be sure to complete the 'Getting Started' section before running these tests. These Cypress tests will connect to real Twilio rooms and real Twilio conversations, so you may be billed for any time that is used.

Application Architecture

The state of this application (with a few exceptions) is managed by the room object that is supplied by the SDK. The room object contains all information about the room that the user is connected to. The class hierarchy of the room object can be viewed here.

One great way to learn about the room object is to explore it in the browser console. When you are connected to a room, the application will expose the room object as a window variable: window.twilioRoom.

Since the Twilio Video SDK manages the room object state, it can be used as the source of truth. It isn't necessary to use a tool like Redux to track the room state. The room object and most child properties are event emitters, which means that we can subscribe to these events to update React components as the room state changes.

React hooks can be used to subscribe to events and trigger component re-renders. This application frequently uses the useState and useEffect hooks to subscribe to changes in room state. Here is a simple example:

import { useEffect, useState } from 'react';

export default function useDominantSpeaker(room) {
  const [dominantSpeaker, setDominantSpeaker] = useState(room.dominantSpeaker);

  useEffect(() => {
    room.on('dominantSpeakerChanged', setDominantSpeaker);
    return () => {
      room.off('dominantSpeakerChanged', setDominantSpeaker);
    };
  }, [room]);

  return dominantSpeaker;
}

In this hook, the useEffect hook is used to subscribe to the dominantSpeakerChanged event emitted by the room object. When this event is emitted, the setDominantSpeaker function is called which will update the dominantSpeaker variable and trigger a re-render of any components that are consuming this hook.

For more information on how React hooks can be used with the Twilio Video SDK, see this tutorial: https://www.twilio.com/blog/video-chat-react-hooks. To see all of the hooks used by this application, look in the src/hooks directory.

The VideoProvider component contains much of the logic that relates to connecting to video rooms and acquiring local input devices. The VideoProvider component exposes many properties and methods to the rest of the application through the useVideoContext hook. Similarly, the ChatProvider contains logic that relates to connecting to a Twilio Conversation, and it exposes properties and methods through the useChatContext hook.

Configuration

The connect function from the SDK accepts a configuration object. The configuration object for this application can be found in src/utils/useConnectionOptions/useConnectionOptions.ts. In this object, we 1) enable dominant speaker detection, 2) enable the network quality API, and 3) supply various options to configure the bandwidth profile.

Track Priority Settings

This application dynamically changes the priority of remote video tracks to provide an optimal collaboration experience. Any video track that will be displayed in the main video area will have track.setPriority('high') called on it (see the VideoTrack component) when the component is mounted. This higher priority enables the track to be rendered at a high resolution. track.setPriority(null) is called when the component is unmounted so that the track's priority is set to its publish priority (low).

Google Authentication using Firebase (optional)

This application can be configured to authenticate users before they use the app. Once users have signed into the app with their Google credentials, their Firebase ID Token will be included in the Authorization header of the HTTP request that is used to obtain an access token. The Firebase ID Token can then be verified by the server that dispenses access tokens for connecting to a room.

See .env.example for an explanation of the environment variables that must be set to enable Google authentication.

Related

License

See the LICENSE file for details.

twilio-video-app-react's People

Contributors

anna-vasilko avatar aymenn avatar charliesantos avatar danpurdy avatar dependabot[bot] avatar febilyt avatar gabriel-jt avatar jesperfj avatar leothorp avatar makarandp0 avatar manjeshbhargav avatar olipyskoty avatar rrecaredo avatar sjoerdsmink avatar snyk-bot avatar timmydoza avatar timrozum avatar tugayyaldiz avatar twilio-product-security avatar vernig 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

twilio-video-app-react's Issues

Segmentation fault: 11 while running tests with test:ci on node v13.2.0

Describe the bug
This doesn't related with the test. As far as my understanding, it's related to node version. Because it was ran all tests as expected on v12.16.1 LTS and v13.12.0 Current. I wasn't tested all ranges between this two versions. Maybe some other versions has this error also, but v13.2.0 seems doesn't work.

To Reproduce
Steps to reproduce the behavior:

  1. nvm install 13.2.0
  2. npm run test:ci
  3. See error

Expected behavior
İt should run all tests, as expected.

Screenshots
image

Environment:

  • OS: Mac 10.15.3
  • App Version: 0.1.0
  • Node.js version: 13.2.0

Additional context
Maybe you should just point this out in README as a notice.

In setup branch, app comes up blank, console reports a javascript error

Describe the bug
I tried running this app locally but it came up with a blank web page and an error in the console.

To Reproduce
Steps to reproduce the behavior:

  1. git clone -b setup [email protected]:kimobrian/TwilioReact.git
  2. cd TwilioReact
  3. Put secrets into .env
  4. npm start
  5. Load localhost:3000 in a browser

Expected behavior
The app should appear.

Screenshots
Instead, it comes up blank with an error in the console:
Screen Shot 2020-04-19 at 12 46 49 PM

Environment (please complete the following information):

  • OS: Mac OS X Mojave
  • Browser: Chrome
  • App Version: 1d478b6d89f8fa8a7b9a733596ab77aced880b31
  • SDK Version: I didn't find it.
  • Node.js version: 13.11.0

A quick fix was to pin react and react-dom to version 16.2.0, based on what I found at https://stackoverflow.com/questions/52251687/uncaught-typeerror-cannot-read-property-injection-of-undefined:

[ ~/src/speakeasy/speakeasy-twilio ] git diff
diff --git a/package.json b/package.json
index ff70e9a..00c77c7 100644
--- a/package.json
+++ b/package.json
@@ -11,8 +11,8 @@
     "express": "^4.16.2",
     "faker": "^4.1.0",
     "material-ui": "^0.20.0",
-    "react": "^16.2.0",
-    "react-dom": "^16.2.0",
+    "react": "16.2.0",
+    "react-dom": "16.2.0",
     "react-tap-event-plugin": "^3.0.2"
   },
   "scripts": {

Use a P2P room instead?

Am I correct in assuming that the Twilio-react-app uses regular group rooms?

Would it be a significant amount or retooling to switch to peer-to-peer rooms instead?

Any plans to package the hooks and context component?

Hello, I was wondering if you have any plans to make a package of the video functionality removed from the rest of the application? While this repo is a fantastic reference, and thanks to your team for building and publishing this, if we're trying to integrate video functionality into an already existing react application, this package isn't particularly consumable. It would be great to be able to install the shared hooks and video context provider, allowing a user to quickly get the functionality up and running, while the UI can be implemented however the consumer wants.

Can we get live audio stream during meeting ?

Can we have an streaming API wherein we can live audio stream and perform real-time transcription ?

We are looking for a feature to show realtime transcription during a meeting, we have tried out all API and this one feature I am stuck on

I have noticed we have media stream feature in Programable Voice and we have this to get realtime slaudio stream from Twilio Video ?

raise the `ELIFECYCLE` error randomly

Describe the bug
When I do npm run deploy:twilio-cli -- --override serval times, it will raise the ELIFECYCLE error.

have check typescript in 3.7.5 for preventing participants typescript error, can successfully. build in local env

To Reproduce
Steps to reproduce the behavior:

  1. npm run deploy:twilio-cli
  2. several npm run deploy:twilio-cli -- --override
  3. ELIFECYCLE error

Environment (please complete the following information):

  • OS: Mac & Windows
  • Browser: NA
  • App Version: 0.1.0
  • SDK Version: 3.39.3
  • Node.js version: v13.6.0

Additional context
Error in console:

» twilio-cli encountered an unexpected error. To report this issue, execute the command with the "-l debug" flag, then copy the output to a new issue here: https://github.com/twilio/twilio-cli/issues
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] deploy:twilio-cli: `cross-env REACT_APP_SET_AUTH=passcode npm run build && twilio rtc:apps:video:deploy --authentication=passcode --app-directory ./build`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] deploy:twilio-cli script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/vincec/.npm/_logs/2020-03-25T08_39_25_767Z-debug.log

Full Error in log

0 info it worked if it ends with ok
1 verbose cli [
1 verbose cli   '/usr/local/Cellar/node/13.6.0/bin/node',
1 verbose cli   '/usr/local/bin/npm',
1 verbose cli   'run',
1 verbose cli   'deploy:twilio-cli'
1 verbose cli ]
2 info using [email protected]
3 info using [email protected]
4 verbose run-script [
4 verbose run-script   'predeploy:twilio-cli',
4 verbose run-script   'deploy:twilio-cli',
4 verbose run-script   'postdeploy:twilio-cli'
4 verbose run-script ]
5 info lifecycle [email protected]~predeploy:twilio-cli: [email protected]
6 info lifecycle [email protected]~deploy:twilio-cli: [email protected]
7 verbose lifecycle [email protected]~deploy:twilio-cli: unsafe-perm in lifecycle true
8 verbose lifecycle [email protected]~deploy:twilio-cli: PATH: /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/Users/vincec/xxx/node_modules/.bin:/Users/vincec/.yarn/bin:/Users/vincec/.config/yarn/global/node_modules/.bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Users/vincec/.yarn/bin:/Users/vincec/.config/yarn/global/node_modules/.bin:/Users/vincec/Library/Android/sdk/emulator:/Users/vincec/Library/Android/sdk/tools:/Users/vincec/Library/Android/sdk/tools/bin:/Users/vincec/Library/Android/sdk/platform-tools:/Users/vincec/Library/Android/sdk/emulator:/Users/vincec/Library/Android/sdk/tools:/Users/vincec/Library/Android/sdk/tools/bin:/Users/vincec/Library/Android/sdk/platform-tools
9 verbose lifecycle [email protected]~deploy:twilio-cli: CWD: /Users/vincec/xxx
10 silly lifecycle [email protected]~deploy:twilio-cli: Args: [
10 silly lifecycle   '-c',
10 silly lifecycle   'cross-env REACT_APP_SET_AUTH=passcode npm run build && twilio rtc:apps:video:deploy --authentication=passcode --app-directory ./build'
10 silly lifecycle ]
11 silly lifecycle [email protected]~deploy:twilio-cli: Returned: code: 1  signal: null
12 info lifecycle [email protected]~deploy:twilio-cli: Failed to exec deploy:twilio-cli script
13 verbose stack Error: [email protected] deploy:twilio-cli: `cross-env REACT_APP_SET_AUTH=passcode npm run build && twilio rtc:apps:video:deploy --authentication=passcode --app-directory ./build`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:332:16)
13 verbose stack     at EventEmitter.emit (events.js:321:20)
13 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:321:20)
13 verbose stack     at maybeClose (internal/child_process.js:1028:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:286:5)
14 verbose pkgid [email protected]
15 verbose cwd /Users/vincec/xxx
16 verbose Darwin 19.3.0
17 verbose argv "/usr/local/Cellar/node/13.6.0/bin/node" "/usr/local/bin/npm" "run" "deploy:twilio-cli"
18 verbose node v13.6.0
19 verbose npm  v6.13.4
20 error code ELIFECYCLE
21 error errno 1
22 error [email protected] deploy:twilio-cli: `cross-env REACT_APP_SET_AUTH=passcode npm run build && twilio rtc:apps:video:deploy --authentication=passcode --app-directory ./build`
22 error Exit status 1
23 error Failed at the [email protected] deploy:twilio-cli script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

Settings screen to choose inputs/outputs (cam/mic/speakers)

What is the feature that you would like to see in the app? Please describe.

A settings screen where the user can choose which inputs/outputs (cam/mic/speakers) are used.

Is your feature request related to a problem? Please describe.

When users have multiple inputs/outputs (like a laptop + external display with built-in cam/mic/speakers), they might want to switch between them for optimal audio/video.

Describe alternatives you've considered

Users might be able to change the cam/mic through their system settings, but this is not ideal.

Additional context

Of course one can implement this themselves, but it would be nice to have it in the demo, as it’s a commonly used feature.

twilio rtc:apps:video:deploy --authentication passcode » Error code 20003 from Twilio: Authentication Error - invalid username.

Describe the bug
A clear and concise description of what the bug is.
When executing below command:
$twilio rtc:apps:video:deploy --authentication passcode
I am getting below error
» Error code 20003 from Twilio: Authentication Error - invalid username. See
https://www.twilio.com/docs/errors/20003 for more info.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...' Run this command - twilio rtc:apps:video:deploy --authentication passcode
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
Web App should be deployed
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • OS: [Ubuntu 19.10]

Additional context
Add any other context about the problem here.

Reset Passcode to new passcode after room ends so passcodes are never the same.

Support Request Number 4124551

I am successfully able to deploy the App using instructions in link.

What I want to change in the functionality to generate the new passcode (probably from client side) while generating new room and share the complete link via sms to participants to join in the video chat.

I can see that, application is getting deployed along with the generated passcode, which will expire in a week. How can I change this functionality to make it more dynamic and let the passcode expire after every video room has completed?

Cannot enter room on chrome for iOS

Describe the bug
cannot enter a session from chrome on ios.

To Reproduce
Steps to reproduce the behavior:

  1. Deploy the last version(2.3.0)
  2. Go to the deployed version of the app on ios device
  3. See error: getUserMedia is not supported

Expected behavior
Enter the session

Screenshots
image

Environment (please complete the following information):

  • Browser: Chrome 80
  • App Version: 2.3.0

Additional context
i saw this supported browser list:
https://www.twilio.com/docs/video/javascript#supported-browsers
do we some workaround?

Add UI to guide the user when camera or microphone permissions get denied

What is the feature that you would like to see in the app? Please describe.
UI for handling different error events like camera permission denied, microphone permission denied, etc.

Is your feature request related to a problem? Please describe.
Non tech savvy users having issues with the camera/microphone not working and being lost in how to fix the problem

HTTP 409: Conflict error when trying to deploy

Describe the bug
I followed the steps up through npm run deploy:twilio-cli, which failed with a 409 Conflict http error. CRA built successfully, then the console printed:
-Something went wrong GotError [HTTPError]: Response code 409 (CONFLICT)

  • a log of the HTTP response object, including statusCode 409
  • deploying app...
  • error output including: npm ERR! [email protected] deploy:twilio-cli: `cross-env REACT_APP_SET_AUTH=passcode npm run build && twilio rtc:apps:video:deploy --authentication=passcode --app-directory ./build

Running the deploy command subsequent times does not display anything about an HTTP error, it just says
» twilio-cli encountered an unexpected error. To report this issue, execute the command with the "-l debug" flag, then copy the output to a new issue here: https://github.com/twilio/twilio-cli/issues after the CRA build.

Environment (please complete the following information):

  • OS: macOS Catalina
  • App Version: master/02a648baf7506868ae3c3896a8ca0648c2dd8943
  • Node.js version: v12.14.0

Is there a way to reduce the echoing?

What is the feature that you would like to see in the app? Please describe.
A way to automatically remove echo or reduce background noise

Is your feature request related to a problem? Please describe.
Sometimes there is a ton of echoing in my video calls, which makes the experience horrible.

Describe alternatives you've considered
Having people use a third party application like krisp.ai

Add an explicit comment to .env.example advising to make a copy of that file

Describe the bug
Its very easy to miss the step of making a copy of .env.example into .env. Users end up putting their credentials into .env.example, never making a copy if it and then being confused why the app is making invalid tokens.

Additional context
Can we just add a comment to .env.example that tells users to make a copy of that file?

Switch camera isn't working on android browser

I am trying to integrate the Switch Camera feature which is working fine on IOS but not on the Android browser.

On Android, It stops the video but does not restart it again. What I am doing wrong here

videoTrack.stop()
      getLocalVideoTrack(deviceID).then((track: LocalVideoTrack) => {
        if (localParticipant) {

          localParticipant.tracks.forEach(trackPublication => {

            localParticipant.unpublishTrack(trackPublication.track);
            localParticipant.emit('trackUnpublished', trackPublication);
          });
          localParticipant.publishTrack(track);
        }
        
      });

Getting Track name is duplicated Error while enabling video

Describe the bug
A clear and concise description of what the bug is.
When i am in between the video call, sometime my video gets mute automatically,. i am assuming it is happening because of bandwidth, But when i am trying un mute video i am getting "Track name is duplicated" Error

To Reproduce
Steps to reproduce the behavior:

  1. start a video call
  2. Somehow get your bandwidth to low
  3. Your video will automatically mute
  4. try to un mute video

Expected behavior
I should be able to unmute if i have bandwidth

Screenshots
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • OS: [e.g. Ubuntu 16.04]
  • Browser: [e.g. Chrome 79.0.3945.88 ]
  • App Version: [0.39]
  • SDK Version: [e.g 2.1.0]
  • Node.js version: [e.g. 12.14.1]

Additional context
Add any other context about the problem here.

TypeScript error on build during quick start

Thanks to the Twilio team for building and releasing these sample applications!

To Reproduce

  1. Run npm run deploy:twilio-cli
  2. Encounter error:
Creating an optimized production build...
Failed to compile.

/Users/adamf/Dev/twilio/twilio-video-app-react/src/components/MainParticipant/MainParticipant.tsx
TypeScript error in /Users/adamf/Dev/twilio/twilio-video-app-react/src/components/MainParticipant/MainParticipant.tsx(11,26):
Type 'Participant' is not assignable to type 'LocalParticipant | RemoteParticipant'.
  Type 'Participant' is not assignable to type 'RemoteParticipant'.
    Types of property 'audioTracks' are incompatible.
      Type 'Map<string, AudioTrackPublication>' is not assignable to type 'Map<string, RemoteAudioTrackPublication>'.
        Type 'AudioTrackPublication' is not assignable to type 'RemoteAudioTrackPublication'.
          Property 'isSubscribed' is missing in type 'LocalAudioTrackPublication' but required in type 'RemoteAudioTrackPublication'.  TS2322

     9 |     /* audio is disabled for this participant component because this participant's audio 
    10 |        is already being rendered in the <ParticipantStrip /> component.  */
  > 11 |     <MainParticipantInfo participant={mainParticipant}>
       |                          ^
    12 |       <ParticipantTracks participant={mainParticipant} disableAudio enableScreenShare videoPriority="high" />
    13 |     </MainParticipantInfo>
    14 |   );

Environment

  • OS: macOS 10.15.3
  • Browser: N/A (Chrome)
  • App Version: 0.3.6
  • SDK Version: twilio-cli/1.10.0 darwin-x64 node-v12.16.1
  • Node.js version: 12.14.1 and 12.16.1

Additional context
Shell: zsh

First tried with yarn, then with npm -- ran into same issue at same step -- deleted node_modules between switching package managers.

Problem with invalid token when run in an external environment

If I run the build in a development environment on the localhost, things run fine. If I move the environment on AWS instance with a public IP address, the token served is reported as Invalid with an error code of 20101:

If I paste the received token on the jwt.io debugger the decoded item shows a proper header and payload, but says"Invalid Signature". The token server is off the shelf - same as the one in the repository.

It is also true for the localhost environment (ie it shows the signature to be Invalid). But the token is accepted in the Dev environment.

Not sure what is going on? Thx.

Allow changing audio volume

What is the feature that you would like to see in the app? Please describe.

A method to increase/decrease the audio output volume.

Is your feature request related to a problem? Please describe.

The current volume is a bit low, compared to e.g. Slack audio calls.

Describe alternatives you've considered

Users can change the system audio volume. However, this may not be enough (e.g., on iOS devices) to get a good volume.

Additional context

We reviewed the code, but couldn’t find a way to increase the volume currently:

API doesn’t allow us to adjust the audio volume.. HTML audio “volume” attribute is set to 100%. As I see we can’t solve that issue for now → we also can’t adjust the volume programmatically on our own (like Slack can).

A customisable volume slider (maybe in the settings screen?) would be great. A ‘fixed’ volume change (e.g., 20% louder that currently) would also be nice to start with.

While deploying: Error code 20003: Authenticate

Describe the bug
An error occurs while trying to deploy: "Error code 20003 from Twilio: Authenticate."

To Reproduce
Steps to reproduce the behavior:

  1. git clone [email protected]:twilio/twilio-video-app-react.git
  2. cd twilio-video-app-react/
  3. npm install
  4. twilio login
  5. twilio plugins:install @twilio-labs/plugin-rtc
  6. npm run deploy:twilio-cli

Expected behavior
I expected it to deploy.

Screenshots
Screen Shot 2020-04-20 at 10 48 21 PM

Screen Shot 2020-04-20 at 10 52 12 PM

**Environment **

  • OS: Mac OS X Mojave
  • Browser: N/A
  • App Version: 9b4e475
  • SDK Version: 2.0.10
  • Node.js version: 13.11.0

Safari No Local Video feed and black (or no) video feed on remote browser

I was using the Twillio video react app for comparing it against my own code, and found the same issue as in my app.

Expected behavior:
Well, it should connect two parties and show the video and audio feed on both sides.

Actual behavior:
When connecting via an iPhone (tested with latest version of Safari), there doesn't seem to be any local video feed, and, while I do get both a audio and video track on my remote device, the audio track is fine, while the video track reproduces as just a black video element.

No issues in log on my remote device. I don't own an iPhone myself so can't post a log. The same issue was seen in two different iPhones with the same Safari version though.

The issue does not happen on any Android device.
Software versions:

  • Browser(s): Safari 13.1
  • Operating System: iOS 13.4
  • twilio-video.js: 2.3.0
  • Third-party libraries (e.g., Angular, React, etc.): VueJs

Screen sharing doesn't work

Describe the bug
The video widget allegedly allows for screen sharing per the features listed here. When spinning up an instance of the app, however, screen sharing doesn't work. This behavior can be reproduced on a deployed resource.

To Reproduce
Steps to reproduce the behavior:

  1. Clone repo and start it up using the provided steps. You can also see a deployed version here.
  2. Enter a room and click share screen. Accept all required permissions and click share screen in the dialog that pops up. In safari, there's an icon that shows a "screen" as if the screen is being shared.

Expected behavior

  1. I'd expect my screen to either be visible in the main grey area or in my thumbnail picture
  2. Actual behavior: no screen is visible :(

Screenshots
image

image

image

Environment

  • OS: mac, latest
  • Browser: chrome. reproduced in safari. safari does show an icon that seems to symbolize that i'm using
  • App Version: 0.1.0
  • SDK Version: "twilio-video": "^2.3.0",
  • Node.js version: v12.16.1

implementation using JS

What is the feature that you would like to see in the app? Please describe.
I want to implement using JS in ASP.NET MVC?

I can not Deploy on Mac OS Catalina 10.15.3

Describe the bug
I can not Deploy on Mac OS Catalina 10.15.3

To Reproduce
I follow each step in the tutorial ,but get an error

Expected behavior
Produce the URL to visit

Here is the ouput...

`[email protected] deploy:twilio-cli /Users/jeff/Sites/twilio-video-app-react
cross-env REACT_APP_SET_AUTH=passcode npm run build && twilio rtc:apps:video:deploy --authentication=passcode --app-directory ./build

[email protected] build /Users/jeff/Sites/twilio-video-app-react
react-scripts build

Creating an optimized production build...
Compiled successfully.

File sizes after gzip:

262.76 KB build/static/js/2.5d55b59b.chunk.js
12.78 KB build/static/js/main.a94a05be.chunk.js
784 B build/static/js/runtime-main.fa60846a.js

The project was built assuming it is hosted at /.
You can control this with the homepage field in your package.json.

The build folder is ready to be deployed.
You may serve it with a static server:

npm install -g serve
serve -s build

Find out more about deployment here:

bit.ly/CRA-deploy

» twilio-cli encountered an unexpected error. To report this issue, execute the command with the "-l debug" flag, then copy the output to a new issue here: https://github.com/twilio/twilio-cli/issues
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] deploy:twilio-cli: cross-env REACT_APP_SET_AUTH=passcode npm run build && twilio rtc:apps:video:deploy --authentication=passcode --app-directory ./build
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] deploy:twilio-cli script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /Users/jeff/.npm/_logs/2020-04-10T00_54_43_024Z-debug.log`

Camera resource is not release when disable the video.

Describe the bug
After Disabled the video, the camera resource is not releasing.
On my laptop browser the green light on, after we disabled the video.

To Reproduce
Steps to reproduce the behavior:

  1. Run the project
  2. Click on toggle Video button to disable or enable video.

Expected behavior
The camera not be used once disabled the video.

Typescript Build fails

Typescript build fails.

To Reproduce
Steps to reproduce the behavior:

  1. npm run deploy:twilio-cli

Expected behavior
build should succeed without any errors

Screenshots

/apps/twilio-video-app-react/src/hooks/useScreenShareParticipant/useScreenShareParticipant.tsx
TypeScript error in /Users/hannad/workspace/apps/twilio-video-app-react/src/hooks/useScreenShareParticipant/useScreenShareParticipant.tsx(18,11):
Argument of type 'Participant | undefined' is not assignable to parameter of type 'SetStateAction<undefined>'.
  Type 'Participant' is not assignable to type 'SetStateAction<undefined>'.
    Type 'Participant' provides no match for the signature '(prevState: undefined): undefined'.  TS2345

    16 |       const updateScreenShareParticipant = () => {
    17 |         setScreenShareParticipant(
  > 18 |           Array.from<Participant>(room.participants.values())
       |           ^
    19 |             // the screenshare participant could be the localParticipant
    20 |             .concat(room.localParticipant)
    21 |             .find((participant: Participant) =>

Environment (please complete the following information):

  • OS: [mac os 10.15.3]
  • Node.js version: [v12.16.1]

Request camera and microphone permissions at the same time

What is the feature that you would like to see in the app? Please describe.
That the app will request both camera and microphone permissions at the same time.

Is your feature request related to a problem? Please describe.
On all platforms I have to press accept permissions two times; one time for camera and one time for microphone.
image

Describe alternatives you've considered
Request both camera and microphone permission at the same time.

Additional context
Here is an example fra another video app
image

npm install fails

Describe the bug
I ran npm install on a fresh Ubuntu VM, and got npm ERR! typeerror Error: Missing required argument #1.

To Reproduce

  1. git clone [email protected]:twilio/twilio-video-app-react.git
  2. cd twilio-video-app-react
  3. npm install

Expected behavior
npm install should run without errors.

Screenshots
Screen Shot 2020-04-05 at 5 09 28 PM

Environment (please complete the following information):

  • OS: Linux twilio 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • Node.js version: v8.10.0

If Video.connect fails the app is left in an unrecoverable UI state

When I first tried to run the application I got my account SID wrong. The app was able to run, but when I tried to connect to a room I got an error (20151). I dismissed the error dialog, but the useRoom hook's isConnecting state was still true, so the Join Room button remained greyed out and the CircularSpinner was still visible. To try to connect again, I had to refresh the page.

This happened to me because my credentials were wrong, but any other issue that could affect Video.connect would leave the UI in this unusable state.

I had one crack at fixing this quickly, but didn't manage it. I'm happy to try again with some guidance if you have ideas on how we could fix this.

500 error on deploy during quick start

Describe the bug
I'm attempting to demo the twillio-video-app-react. I get a 500 on the deploy step.

To Reproduce
Steps to reproduce the behavior:

  1. Install and configure the Twilio CLI.
  2. Run twilio plugins:install @twilio-labs/plugin-rtc to install the app's support plugin.
  3. Run npm run deploy:twilio-cli
  4. 500 error...

Expected behavior
the process would exit with out errors and provide a link to view the app.

Screenshots
N/A?

Environment (please complete the following information):

  • OS: OSX
  • Browser: N/A
  • App Version: Github Head
  • SDK Version: Github Head
  • Node.js version: 13.7

Additional context
N/A

Im getting following error

Error: command rtc:apps:video:deploy not found npm ERR! code ELIFECYCLE npm ERR! errno 2 npm ERR! [email protected] deploy:twilio-cli: cross-env REACT_APP_SET_AUTH=passcode npm run build && twilio rtc:apps:video:deploy --authentication=passcode --app-directory ./build`
npm ERR! Exit status 2
npm ERR!
npm ERR! Failed at the [email protected] deploy:twilio-cli script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Nawaf Momin\AppData\Roaming\npm-cache_logs\2020-04-10T11_53_18_371Z-debug.logim perfomingtwilio-video-app-react`
Help me figuring out

Basic Deployment

Looking to complete the basic implementation but the application will not deploy on my computer and provide me with the Web URL and password.

I have followed the instructions step by step twice now and still no luck. Not sure if it is something to do with my computers setup but hoping this could be answered for others in the future who have the same problem.

Expected behaviour
Application deploys and I get a link

Environment (please complete the following information):
I'm using windows and running everything through the terminal in VS code which is using PowerShell

Controls shift position on hover in Safari 12.1 on Mac

Describe the bug
Controls at the bottom of the screen (Mute Audio, Mute Video) shift left and right on hover.

To Reproduce
Steps to reproduce the behavior:

  1. Launch app 'npm run dev'
  2. In Safari, Open application page (http://localhost:3000)
  3. Move mouse to hover over the controls at the bottom of the screen (Mute Audio, Video, etc)
  4. See error where the controls shift position

Expected behavior
Control buttons should stay in place, not shift position.

Screenshots
Screen Recording 2020-03-26 at 4 21 53 PM_1

Environment (please complete the following information):

  • OS: Mac 10.14.6
  • Browser:12.1.2
  • App Version: 0.1.0

Additional context
This problem does not happen in Chrome

Cannot enter room on Safari for iOS

Describe the bug
I'm trying to find out how well this example performs on an iPad but I cannot enter a session because of an error.

To Reproduce
Steps to reproduce the behavior:

  1. Deploy this version: ddba4b4
  2. Go to the deployed version of the app
  3. Enter a "Name"
  4. Enter a "Room"
  5. Click "Join Room"

Expected behavior
Enter the session

Screenshots
image

Error: Minified React error #152; visit https://reactjs.org/docs/error-decoder.html?invariant=152&args[]=X for the full message or use the non-minified dev environment for full errors and additional helpful warnings.

Bildschirmfoto 2020-03-20 um 18 44 33

Environment (please complete the following information):

  • OS: iOS 13.3.1
  • Browser: Safari
  • App Version: commit ddba4b4
  • SDK Version: 3.39.3
  • Node.js version: not sure what twilio functions use

Additional context
I've just followed the steps in the readme and tried to test Safari on the iPad. I can go on calls using Chrome though.

Add option for programmable voice

What is the feature that you would like to see in the app? Please describe.
As a user, I'd like my meeting room to be joinable via telephone. This number could either be unique or use a generated PIN.

As someone in a meeting, I'd like to have an idea of who is calling in (if possible) or at least a reference to their phone number. If audio is coming from a telephone participant, I'd like to see which participant is making noise.

Is your feature request related to a problem? Please describe.
Not really, no.

Describe alternatives you've considered
The alternatives I've considered include:

  • bypassing Twilio and having our volunteers and users use their personal phones to connect. This breaches a bit of a privacy wall since users would have to share their phone numbers.
  • requiring access to a computer/webcam for our tool (most likely)

Additional context
We're working with lower-income users who may not necessarily have access to a computer and/or webcam.

Examples
jitsi

google hangouts:

Error In Readme WRT Deleting Serverless App

Hi There,

You have an error in your readme. It says that to delete the app you should run this command:

$ twilio rtc:apps:delete

But it appears the command is actually:

$ twilio rtc:apps:video:delete

I was persistent enough to figure out so my trial account wouldn't have credits wasted. Others may not be so persistent.

LocalVideoTrack.isStarted() and .isStopped() are true simultaneously

Describe the bug
LocalVideoTrack.isStarted() and .isStopped() are false of true simultaneously

To Reproduce
Steps to reproduce the behavior:

  1. Go to: https://codesandbox.io/s/elastic-galois-tsspi?file=/pages/index.tsx
  2. Hit the stop button
  3. check the console

Expected behavior
I expect the localVideoTrack to be started or stopped, but not both

Environment (please complete the following information):

  • OS: MacOS Catalina,
  • Chrome 80.0.3987.163 (Build officiel) (64 bits)
  • SDK Version: 2.3.0

Live Deployment

I have everything up and running perfectly in my local environment and have Firebase Authentication working as well. How do I deploy to a live environment? When I deploy to Twilio it automatically adds the passcode on the signing page even though I have the env file set to firebase.

Thanks in advance for any direction.

Video Quality isnt great despite using 1080p camera.

Hello,

Has anyone noticed the video quality isn't that great when you're looking at other participants cameras? Only the video seems to stutter when they move.

I'm using npm start so im not using the production build, but is that really the issue? Seems server sided. How could I troubleshoot this?

Flip Camera does not work on iPad when in a room

Describe the bug
I was testing the functionality to see how it worked. On the iPhone while joined to a room, I tested and it worked fine.
When I tested it on an iPad Air 2 while joined to a room, the current video (user) stopped / unpublished, but the environment video never starts. Clicking the button again causes an error, but the video starts back up using the user camera because the last video track received was the environment camera.
When I tested it on an iPad Air 2 while NOT joined to a room, it worked fine.

To Reproduce
Steps to reproduce the behavior:

  1. Using an iPad, join a room
  2. Click on the new Flip Camera button in the menu bar.
  3. Participant strip now shows
    • a black area instead of the user camera video.
    • the video off icon displays
  4. The environment camera video never displays. I waited for 30 seconds to see before I did anything else.
  5. Clicking on the Flip Camera button again
  6. Close the error modal and overlay.
    • You can see that the video is now displaying again, but it is the user camera video.

Expected behavior
On an iPad, it should function the same as it does on an iPhone. While joined to a room, clicking the button once should replace the user camera video with the environment camera video.

Environment:

  • Device: iPad Air 2
  • OS: iPadOS 13.4.1
  • Browser: Safari 13.1
  • App Version: Master Branch as of 4/16/2020

Additional context
While doing some more debugging:

  • While calling unpublishTrack [line 28], localTrackPublication is populated with a response
  • While calling getLocalVideoTrack [line 35], a newTrack is received
  • Issue: While calling publishTrack [line 36], the promise never completes / publishes the track. This causes:
    • No displayed video
    • the error on the second click of the flip camera button.

As a test, I modified this to function like the Toggle Video Button does: one click to unpublish the video and one click to switch the camera and publish that video. That works fine, but it doesn't help for a one-click flip of the camera.

Any plan for adding chat?

What is the feature that you would like to see in the app? Please describe.
Adding a way to send messages, and preferably rich text like images as well

Is your feature request related to a problem? Please describe.
Users can't send simple messages that are useful while in a video call. Like links to an external website page.

Failed to fetch error when using external token server

Describe the bug
When using an external token server (whether it be the built in server.js or my own) it always returns "Failed to fetch" after clicking join room. The token server actually receives the request and correctly gets the token from twilio and the token server returns tokens without issue when typing in the url directly.

To Reproduce
Just to be safe, open server.js and have it listen on port 8084 by modifying this line:
app.listen(8084, () => console.log('token server running on 8084'));`
Update .env with the following:
REACT_APP_TOKEN_ENDPOINT=http://localhost:8084/token
Run command npm run start
Open web browser (it automatically does) to localhost:3000
type in name and room - hit join room
server message stating token was issued for the room

Expected behavior
entry into the room successfully (not the failed to fetch error

Screenshots
image

Environment (please complete the following information):

  • OS: WIndows 10 Pro (64-it)
  • Browser: Chrome 80
  • App Version: 0.1.0
  • SDK Version: 2.3.0
  • Node.js version: v12.16.2

Additional context
Trying to get the basic server.js running first and then I'm planning to build my own which will return only pre authorized tokens based on the name/room.

Add a way to share internal audio with screenshare

What is the feature that you would like to see in the app? Please describe.
Share internal audio with screen sharing

Is your feature request related to a problem? Please describe.
I want to be able to do things similar to watching yt videos together in the call, but there is not currently a way to share internal audio

Invalid Access Token issuer/subject. Error Code 20103 on JOIN ROOM click

Describe the bug
After deploying the app, when I try to join a room, I get error 20103.

To Reproduce
Steps to reproduce the behavior:

  1. export TWILIO_AUTH_TOKEN=...; export TWILIO_ACCOUNT_SID=AC...
  2. npm run deploy:twilio-cli -- --override
  3. Open the URL displayed, like https://video-app-1268-dev.twil.io?passcode=...
  4. Enter Name and Room.
  5. Click JOIN ROOM.
  6. An error dialog appears.

Expected behavior
I expected to enter the video chat room.

Screenshots
Screen Shot 2020-04-19 at 9 28 07 PM

Environment (please complete the following information):

  • OS: Mac OS X Mojave
  • Browser: Chrome
  • App Version: cb00205
  • SDK Version: 1.2
  • Node.js version: 13.11.0

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.