Coder Social home page Coder Social logo

flick-video-player's Introduction

Flick Video Player

Flick Video Player is a video player for flutter. The video_player plugin gives low level access for the video playback. Flick Player wraps video_player under the hood and provides base architecture for developers to create their own set of UI and functionalities.

Features

  • Double tap to seek video.
  • On video tap play/pause, mute/unmute, or perform any action on video.
  • Auto hide controls.
  • Custom animations.
  • Custom controls for normal and fullscreen.
  • Auto-play list of videos.
  • Change playback speed.
  • Keyboard shortcuts for web.

Demo Mobile

Default player
Video
Code
Animation player
Video
Code
Feed player
Video
Code
Orientation player
Video
Code
Landscape player
Video
Code
Short Video player
Video
Code

Demo Web

Web player
Video
Code

Example

Please run the app in the example/ folder to start playing!

Refer to this article to understand how things are working under the hood.

Installation

Add the following dependencies in your pubspec.yaml file of your flutter project.

    flick_video_player: <latest_version>
    video_player: <latest_version>

How to use

Create a FlickManager and pass the manager to FlickVideoPlayer, make sure to dispose FlickManager after use.

import 'package:flutter/material.dart';
import 'package:flick_video_player/flick_video_player.dart';
import 'package:video_player/video_player.dart';

class SamplePlayer extends StatefulWidget {
  SamplePlayer({Key key}) : super(key: key);

  @override
  _SamplePlayerState createState() => _SamplePlayerState();
}

class _SamplePlayerState extends State<SamplePlayer> {
  late FlickManager flickManager;
  @override
  void initState() {
    super.initState();
    flickManager = FlickManager(
      videoPlayerController:
          VideoPlayerController.networkUrl(Uri.parse("url"),
    );
  }

  @override
  void dispose() {
    flickManager.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: FlickVideoPlayer(
        flickManager: flickManager
      ),
    );
  }
}

Public Classes Summary

Class Summary
FlickVideoPlayer Main entry point, takes a FlickManager and a widget flickVideoWithControls as one of the arguments.
FlickManager Manages all the video related operations with the help of different managers.
FlickVideoManager is responsible to maintain life-cycle of a video, change a video and listen to state changes on the video.
FlickControlManager is responsible to perform action on the video such as play, mute, seek, toggle full-screen etc.
FlickDisplayManager is responsible to show/hide controls when player state changes.
FlickVideoWithControls A helper widget to render video_player using FlickNativeVideoPlayer and Custom player controls. To create video player with custom controls you have to use this widget and pass this to FlickVideoPlayer in the argument flickVideoWithControls. closedCaptionTextStyle argument added to style video subtitles.
FlickPlayToggle A UI helper widget to create play/pause/replay button for the video player. You can either pass your custom play, pause and replay widgets or change settings for the default icons.
FlickSoundToggle A UI helper widget to create mute/unmute button for the video player. You can either pass your custom mute and unmute widgets or change settings for the default icons.
FlickFullscreenToggle A UI helper widget to create fullscreen/fullscreen_exit button for the video player. You can either pass your custom fullscreen and fullscreen_exit widgets or change settings for the default icons.
FlickVideoProgressBar A UI helper widget to create progress bar for your video player. It takes FlickProgressBarSettings as one of the arguments so that user can create a custom progress bar. This is highly customizable, user can almost change all the properties of the progress bar like height, handleRadius, provide custom Color or custom Paint.
FlickTotalDuration A text UI helper widget to show total duration of the video.
FlickCurrentPosition A text UI helper widget to show current position of the video.
FlickLeftDuration A text UI helper widget to show left duration of the video.
FlickSetPlayBack A text UI helper widget to change the playback speed of the video.
FlickVideoBuffer A UI helper widget to show CircularProgressIndicator or your custom widget when the video is buffering.
FlickAutoPlayCircularProgress A UI helper widget to show circular progress bar with timer to switch to the next video.
FlickSeekVideoAction An Action helper to seek video forward/backward by custom Duration on double tap of screen. Takes child as one of the arguments to nest other actions or widgets.
FlickShowControlsAction An Action helper to toggle between show/hide of controls on tap of the screen. Takes child as one of the arguments to nest other actions or widgets.
FlickTogglePlayAction An action helper to toggle between play/pause on tap of the screen. Takes child as one of the arguments to nest other actions or widgets.
FlickToggleSoundAction An action helper to toggle between mute/unmute on tap of the screen. Takes child as one of the arguments to nest other actions or widgets.
FlickSubtitleToggle An action helper to toggle between display subtitle/no-subtitle on tap of the screen. Takes child as one of the arguments to nest other actions or widgets.

To play a list of videos you have to create your custom DataManager, You can find some of the implementations in /example folder.

UI Helper and Action helpers are widgets which interacts with FlickDisplayManager, FlickControlManager and FlickVideoManager you can easily create your custom widgets/actions, Provider package is used for state management.

Web

Guideline for web: As we are using video_player_web under-hood please follow video_player_web doc before you start.

Default shortcuts

Key Behavior
f Toggle full-screen
m Toggle mute
ArrowRight Seek forward
ArrowLeft Seek backward
(Space character) Toggle play
ArrowUp Increase volume
ArrowDown Decrease volume
  • You can pass webKeyDownHandler argument to FlickVideoPlayer and manage the keyboard shortcuts yourself.

Notes

  • Esc shortcut to exit from full-screen is in development.

Origin of third party content

Videos

Pictures

flick-video-player's People

Contributors

ahujaraghav avatar geekruchika avatar h1amza avatar mrinaljain avatar rajajain08geekyants avatar rohitprajapati0606 avatar rohitprajapatii avatar sachins-geekyants avatar tahaf22labs avatar vishna 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

flick-video-player's Issues

multi player problem

I used 5 subordinate default players
1 player takes up approximately 3/1 of the screen.
I click on the first player, I watch the video, the top video when I land the lowest video starts to load again and the time I stop is deleted automatically. I want it protected. How do I get it?

ios 黑屏无法播放 真机联调

按照这个用例去写
import 'package:flutter/material.dart';
import 'package:flick_video_player/flick_video_player.dart';
import 'package:video_player/video_player.dart';

class SamplePlayer extends StatefulWidget {
SamplePlayer({Key key}) : super(key: key);

@OverRide
_SamplePlayerState createState() => _SamplePlayerState();
}

class _SamplePlayerState extends State {
FlickManager flickManager;
@OverRide
void initState() {
super.initState();
flickManager = FlickManager(
videoPlayerController:
VideoPlayerController.network("url"),
);
}

@OverRide
void dispose() {
flickManager.dispose();
super.dispose();
}

@OverRide
Widget build(BuildContext context) {
return Container(
child: FlickVideoPlayer(
flickManager: flickManager
),
);
}
}

android可以播放,但是ios是黑屏,ios中视频一直在加载,就是不播放;android和ios点击全屏都会黑屏
请问是我哪里有问题,有解决方案么?
克隆完该github代码,怎么能运行该仓库里面的Example用例?

Support for web

Hey,

First I just want to say thanks for the package, it's really great and easy to use.

Is support for web in the pipeline?

Thanks!

Help me extract the time when the video pauses or stops

I was looking for alternatives to play my network video and I stumbled upon your repo it solved everything that I wanted except one thing.

I want to get the time when the pause button is pressed or the video is stopped due to some event.
If you can help me with that it will be wonderful and it will help me a lot.

Thank you

Animation Aspect Ratio

In animation video player to fit in full screen Portrait mode it cut some video sides.
is their any way i can do it with default video player or can you please tell us what is the aspect ratio .

ontap: (){}

I need function onTap() from FlickVideoProgressBar to print(value position)

Some videos fail to initialize

Not sure if this flick's problem or video_player itself. I have built a similar example like FlickMultiPlayer (Feed). the video in the example (butterfly) plays fine in the Feed, but I have tried playing some other videos and some don't run at all. any help is appreciated

LOG

I/ACodec  (31729):  [] Now uninitialized
I/ACodec  (31729): [] onAllocateComponent
I/OMXClient(31729): IOmx service obtained
I/ACodec  (31729): [OMX.qcom.video.decoder.avc] Now Loaded
I/ACodec  (31729):  [OMX.qcom.video.decoder.avc] Now uninitialized
I/ACodec  (31729):  [] Now kWhatShutdownCompleted event : 8519
I/MediaCodec(31729): Codec shutdown complete
W/MediaCodecRenderer(31729): Failed to initialize decoder: OMX.qcom.video.decoder.avc
W/MediaCodecRenderer(31729): android.media.MediaCodec$CodecException: Error 0xffffec77
W/MediaCodecRenderer(31729): 	at android.media.MediaCodec.native_configure(Native Method)
W/MediaCodecRenderer(31729): 	at android.media.MediaCodec.configure(MediaCodec.java:1960)
W/MediaCodecRenderer(31729): 	at android.media.MediaCodec.configure(MediaCodec.java:1889)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.configureCodec(MediaCodecVideoRenderer.java:483)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:805)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodecWithFallback(MediaCodecRenderer.java:745)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:474)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.reinitializeCodec(MediaCodecRenderer.java:1261)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1111)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:552)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:647)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:529)
W/MediaCodecRenderer(31729): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:300)
W/MediaCodecRenderer(31729): 	at android.os.Handler.dispatchMessage(Handler.java:102)
W/MediaCodecRenderer(31729): 	at android.os.Looper.loop(Looper.java:214)
W/MediaCodecRenderer(31729): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal(31729): Playback error.
E/ExoPlayerImplInternal(31729): com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, null, -1, null, [3840, 2160, -1.0], [-1, -1])
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:479)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.reinitializeCodec(MediaCodecRenderer.java:1261)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1111)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:552)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:647)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:529)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:300)
E/ExoPlayerImplInternal(31729): 	at android.os.Handler.dispatchMessage(Handler.java:102)
E/ExoPlayerImplInternal(31729): 	at android.os.Looper.loop(Looper.java:214)
E/ExoPlayerImplInternal(31729): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal(31729): Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, null, -1, null, [3840, 2160, -1.0], [-1, -1])
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodecWithFallback(MediaCodecRenderer.java:753)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:474)
E/ExoPlayerImplInternal(31729): 	... 9 more
E/ExoPlayerImplInternal(31729): Caused by: android.media.MediaCodec$CodecException: Error 0xffffec77
E/ExoPlayerImplInternal(31729): 	at android.media.MediaCodec.native_configure(Native Method)
E/ExoPlayerImplInternal(31729): 	at android.media.MediaCodec.configure(MediaCodec.java:1960)
E/ExoPlayerImplInternal(31729): 	at android.media.MediaCodec.configure(MediaCodec.java:1889)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.configureCodec(MediaCodecVideoRenderer.java:483)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:805)
E/ExoPlayerImplInternal(31729): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodecWithFallback(MediaCodecRenderer.java:745)
E/ExoPlayerImplInternal(31729): 	... 10 more

Video isn't persisting

When the video is done playing, if we replay, then it again fetches data from internet.

not support cache

not support video cache please add this feature thanks for great work!

Full screen portrait video

Hi, When I play video in portrait mode, e.g. 1080x1920, I click watch in full screen. The application screen rotates to the landscape screen. However, the video is projected to the full width of the phone and not to the video height, so I can only see part of my video.

video CoverImage?

hello, how can I add the video cover image to the top, so it will be the cover image before the video opens.

Is there a way to set buffer object values

Is there a way to set buffer object values so that video streaming can be improved?

MIN_BUFFER_DURATION
MAX_BUFFER_DURATION
MIN_PLAYBACK_START_BUFFER
MIN_PLAYBACK_RESUME_BUFFER

Video cache network / improve speed

Can you improve the speed? So the package is useless. It is too slow. I had to put the cached_video_player back. And if you don't want to improve the speed please add the problem in the description of the package, for which I wasted a couple of hours integrating the function into my app to then have a really bad result.
Thanks

Hide player controls initially in autoplay mode

Player Controls should be invisible on autoplay mode, user can tap on the video to see them.
as of now
bool _showPlayerControls = true; this is specifically set to true so the controls are visible for 5 seconds when the video loads which is not good as per UX.

Video feed performance.

Hello. We are attempting to use the flick video player in a big social media like product. Our main concern is the performance of the plugin and the speed of video loading in a big feed of videos. As maintainers we would love to hear from a first party:

  • Should we worry about memory issues when having a big feed of videos (talking 30-100 videos).
  • What are the best practises for speed optimization and performance boost? What are some things we should be careful about to not face big speed/memory problems?
    • For example how to ensure the first videos in a feed load first and the rest load after the first ones are already playing. Also how to ensure that not all videos are loading simultaneously, because this would cause caching issues, network overload and dropped frames in the already playing videos;
  • Any additional guidelines on how to most efficiently implement a big feed of videos.

Thanks

Problem closing video in full screen (Navigator.pop)

First of all congratulations on the beautiful work, it is perfectly suited to my project.

The package has a problem when displaying the video in full screen, when clicking close (Navigator.pop (context);) a black screen appears and the page does not return and the application stops working.

The problem is in this line (remembering that the error occurs only in full screen): https://github.com/GeekyAnts/flick-video-player/blob/master/example/lib/landscape_player/landscape_player_controls.dart#L138

A provisional alternative, would it be possible to hide Icons.cancel (from line 130 to 145) only in full screen?

It happens on a physical device, api 28 and 29 and others.

I hope you can reproduce the error, I look forward to the correction.

Ps. Sorry for the English, it's not my native language.

How to use with Image_picker Package?

What's the issue?

So, I'm using image_picker package to pick a video file, and show with video_player package, based on the example code of image_picker repo

I see the different examples of Flick Video Player, and I'm achieve to show custom controls, but I have different errors in the log for the code in initState or in Dispose.

Sample Code

The example file of the next link has a class AspectRatioVideo at the end, and I put the Flick Video Player code inside in the lines with the comment //Flick Video Player Code

https://github.com/flutter/plugins/blob/master/packages/image_picker/image_picker/example/lib/main.dart

You can download the image picker example folder with downgit, add the Flick Video Player package and change the next class.


class AspectRatioVideo extends StatefulWidget {
  AspectRatioVideo(this.controller);

  final VideoPlayerController controller;

  @override
  AspectRatioVideoState createState() => AspectRatioVideoState();
}

class AspectRatioVideoState extends State<AspectRatioVideo> {
  VideoPlayerController get controller => widget.controller;
  bool initialized = false;
  FlickManager flickManager; //Flick Video Player Code

  void _onVideoControllerUpdate() {
    if (!mounted) {
      flickManager.dispose(); //Flick Video Player code
      return;
    }
    if (initialized != controller.value.initialized) {
      flickManager = FlickManager(videoPlayerController: widget.controller);  //Flick Video Player Code
      initialized = controller.value.initialized;
      setState(() {});
    }
  }

  @override
  void initState() {
    super.initState();
    controller.addListener(_onVideoControllerUpdate);
  }

  @override
  void dispose() {
    controller.removeListener(_onVideoControllerUpdate);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    if (initialized) {
      return Center(
        child: AspectRatio(
          aspectRatio: controller.value?.aspectRatio,
          child: FlickVideoPlayer(flickManager: flickManager) //Flick Video Player code
        ),
      );
    } else {
      return Container();
    }
  }
}

Error Lines in log

This one happens when I open the page.
The line with the #5 refers to _onVideoControllerUpdate of the previous class.

E/flutter ( 4337): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: NoSuchMethodError: The method 'dependOnInheritedWidgetOfExactType' was called on null.
E/flutter ( 4337): Receiver: null
E/flutter ( 4337): Tried calling: dependOnInheritedWidgetOfExactType<_ModalScopeStatus>()
E/flutter ( 4337): #0      Object.noSuchMethod  (dart:core-patch/object_patch.dart:51:5)
E/flutter ( 4337): #1      ModalRoute.of package:flutter/…/widgets/routes.dart:882
E/flutter ( 4337): #2      FlickVideoManager._changeVideo package:flick_video_player/…/manager/video_manager.dart:144
E/flutter ( 4337): #3      FlickVideoManager._handleChangeVideo package:flick_video_player/…/manager/video_manager.dart:104
E/flutter ( 4337): #4      new FlickManager package:flick_video_player/…/manager/flick_manager.dart:35
E/flutter ( 4337): #5      AspectRatioVideoState._onVideoControllerUpdate  my_project/page_video.dart:287
E/flutter ( 4337): #6      ChangeNotifier.notifyListeners package:flutter/…/foundation/change_notifier.dart:209
E/flutter ( 4337): #7      ValueNotifier.value= package:flutter/…/foundation/change_notifier.dart:276
E/flutter ( 4337): #8      VideoPlayerController.initialize.eventListener  package:video_player/video_player.dart:286
E/flutter ( 4337): #9      _rootRunUnary  (dart:async/zone.dart:1198:47)
E/flutter ( 4337): #10     _CustomZone.runUnary  (dart:async/zone.dart:1100:19)

HLS and Progressive Steaming for both iOS & Android.

Video Player does not support HLS and Progressive Steaming for both iOS & Android.
I tried using the HLS file format as an input to the video player but it does not work and shows an error in the view.
Is there a way I can stream HLS URLs in the flick video player

flickManager = FlickManager( autoPlay: false, autoInitialize: true, videoPlayerController: VideoPlayerController.network( 'https://d2tlhrnhiaq7gn.cloudfront.net/show/main-video/240/${widget.exclusiveDetailObj["mediaList"][0]["hlsSourceLink"]}', formatHint: VideoFormat.hls), );

Error while using fullscreen landscape mode in listView.builder

When I have fullscreen video player launched within listView.builder its stop working, probably because when device is rotated list item is being removed from the list, same as video player is being disposed. It working perfectly when video player its displayed outside of the listView.builder.

Any idea how solve this issue ?

════════ Exception caught by widgets library ═══════════════════════════════════
The following assertion was thrown building Container(constraints: BoxConstraints(w=450.0, h=800.0)):
A VideoPlayerController was used after being disposed.

Other question is it possible to support slide down gesture to dismiss fullscreen mode? Would it require to implement fullscreen via Navigator ?

attaching thumbnails

Hi, is it possible to attach any thumbnail to a video file? My application stores these thumbnails on the server, but I have a black screen when buffering a larger video file. I would like to put a thumbnail there 🥇

How do i pass dynamic start time when the video initializes ?

I'm now developing Video player in Flutter and using Flick package
The video will be streamed with m3u8 format to the Flutter App. I would like to let the user to choose Video Quality (720p, 480p, etc.) like Youtube.
Since Flutter's video_player is based on ExoPlayer for Android under the hood, I know that ExoPlayer supports choosing Video Quality by the users.

Whenever User selects the new video quality from a list I want the new video to be played from exactly same time where the last video was left .

Playback speed

It would be excellent to see playback speed added to this. The ability to slow down or speed up video would be very helpful.

Android back btn

Is it possible to exit video in landscape mode with the android back button?

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.