Giter Club home page Giter Club logo

react-native-media-kit's People

Contributors

dunliu2016 avatar ldn0x7dc avatar pennersr 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

react-native-media-kit's Issues

How can I add .srt files to the video

Hi,
I have mp4 file and it plays very well , but I also want to enable close captions/subtitles and I have accompanying .srt file
which I would like to add with this video

哥们 安卓端播放有点小问题

您好,很感谢您的这个播放器,在我使用在安卓端播放的时候,如果设置autoplay={true},返回上个界面的时候声音还会继续播放,请问这个是什么个情况

undefined is not an object (evaluating '_react2.PropTypes.number')

--android集成报错
1、MediaKitPackage implements ReactPackage的复写方法报接口不存在 临时先注掉@OverRide
2、ReactMediaPlayerViewManager类里new Event(view.getId()/, SystemClock.uptimeMillis()/)提示参数不对,注释掉参数
然后不报错 正常引入Video控件报错undefined is not an object (evaluating '_react2.PropTypes.number')

多个标签问题

你好!
如题,当我在同一页面创建两个Media时:

 render : ...
  <Audio
      ref={(i)=>{this.one = i}}
      style={{width: width, height: width / (16/9)}}
      src={'http://v.yoai.com/femme_tampon_tutorial.mp4'}
      autoplay={false}
      preload={'none'}
      loop={false}
      controls={true}
    />
    <Audio
      ref={(i)=>{this.two = i}}
      style={{width: width, height: width / (16/9)}}
      src={'http://v.yoai.com/femme_tampon_tutorial.mp4'}
      autoplay={false}
      preload={'none'}
      loop={false}
      controls={true}
    />

    ...

    playOne(){
        this.one.play();
    }

    playTwo(){
        this.two.play();
    }

    ...

当我playOne(),并且播放完后,再次点playOne()能正常播放,但是当我点playTwo()时,却不能够播放。总的来说就是,当一个播放后,再点另一个播放,则播放不了。这是什么原因?

谢谢!!

HLS playback fails on Android

I'm getting this issue when trying to playback HLS stream

E/AndroidRuntime(15786): java.lang.NoSuchMethodError: No direct method (ZLcom/google/android/exoplayer/upstream/DataSource;Ljava/lang/String;Lcom/google/android/exoplayer/hls/HlsPlaylist;Lcom/google/android/exoplayer/hls/HlsTrackSelector;Lcom/google/android/exoplayer/upstream/BandwidthMeter;Lcom/google/android/exoplayer/hls/PtsTimestampAdjusterProvider;I)V in class Lcom/google/android/exoplayer/hls/HlsChunkSource; or its super classes (declaration of 'com.google.android.exoplayer.hls.HlsChunkSource' appears in /data/app/com.test-2/base.apk)
E/AndroidRuntime(15786): at com.greatdroid.reactnative.media.player.trackrenderer.HlsRenderersBuilder.onSingleManifest(HlsRenderersBuilder.java:97)
E/AndroidRuntime(15786): at com.greatdroid.reactnative.media.player.trackrenderer.HlsRenderersBuilder.onSingleManifest(HlsRenderersBuilder.java:39)
E/AndroidRuntime(15786): at com.google.android.exoplayer.util.ManifestFetcher$SingleFetchHelper.onLoadCompleted(ManifestFetcher.java:378)
E/AndroidRuntime(15786): at com.google.android.exoplayer.upstream.Loader$LoadTask.handleMessage(Loader.java:245)
E/AndroidRuntime(15786): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(15786): at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime(15786): at android.app.ActivityThread.main(ActivityThread.java:5430)
E/AndroidRuntime(15786): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(15786): at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(15786): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:913)
E/AndroidRuntime(15786): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)

Btw very nice lib! I've used my custom based on exoplayer which covered android only

error

redefinition of RCTIsReactRootView
ef3b70c5-c979-4254-95b7-be25f5a15c67
ef3b70c5-c979-4254-95b7-be25f5a15c67

Project operation

Volume too low

Is there a way to increase the volume programatically?
The same audio message is playing way louder when rendered using another library but I find this library better as I can integrate video message later too.
What could be a reason for it to play so slow? Is it a bug?

ReadMe issues with Android Setup

The path to project is set to your User, here's a dynamic/relative path:
include ':react-native-media-kit' project(':react-native-media-kit').projectDir = new File('../node_modules/react-native-media-kit/android')

Also, in MainActivity, you need to import the package:
import com.yoai.reactnative.media.MediaKitPackage;

I'm having trouble getting videos to play on Android... but I'm still trying to figure that out.

How to start this package?

I've did the installation as per instruction. But I got error on npm start. any tips?

$ npm install
$ npm start
npm ERR! Darwin 15.5.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "start"
npm ERR! node v5.2.0
npm ERR! npm  v3.8.5

npm ERR! missing script: start
npm ERR! 
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/kayrules/Downloads/react-native-media-kit-master/npm-debug.log

Build fails on Latests release

:react-native-media-kit:compileReleaseJavaWithJavac
/Users/jbirchall/Documents/projects/app/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:95: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/jbirchall/Documents/projects/app/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:111: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/jbirchall/Documents/projects/app/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:127: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/jbirchall/Documents/projects/app/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:143: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/jbirchall/Documents/projects/app/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:159: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/jbirchall/Documents/projects/app/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:175: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/jbirchall/Documents/projects/app/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:193: error: no suitable constructor found for Event(int,long)
                  .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                                 ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
7 errors
:react-native-media-kit:compileReleaseJavaWithJavac FAILED

FAILURE: Build failed with an exception.

Using:

  • React-native: 0.41.2
  • react-native-media-kit: 0.0.14

View has no propType for native prop RCTView.aspectRatio ofnative type number

hi, i react-native run-android, this is a error:

'View' has no propType for native prop 'RCTView.aspectRatio' of native type 'number' 
if you haven't changed this prop yourself, this usually means that your 
version of the native code and javascript code are out of sync。updating
 both should make this error go away。

my developement:

i use react-native-media-kit like git+https://github.com/ldn0x7dc/react-native-media-kit.git#pull/30/head 。to solve Failing to compile on Android RN 0.32 #27。and this error has resolved。

below is my code

<Video
	style={{width: 300, height: 300}}
	src={'http://58.216.103.102/youku/69738D4088E4983EA1FDB45FA7/03002001005874498203872D9B7D2F00C119C6-100D-5BCC-7192-AACAD7DB8210.mp4?sid=8484091068195870954c8_00&ctype=87'}
	autoplay={false}
	preload={'none'}
	loop={false}
	controls={true}
	muted={false}
	poster={'http://ww2.sinaimg.cn/mw690/005BjCpAgw1fbmc5n74dxj30bn0godhm.jpg'}
			/>

please help me , thank you very much

Failing to compile on Android RN 0.32

Unfortunately i can't seem to get passed the compiling phase with this:

:react-native-media-kit:compileLint
:react-native-media-kit:copyReleaseLint UP-TO-DATE
:react-native-media-kit:preBuild UP-TO-DATE
:react-native-media-kit:preReleaseBuild UP-TO-DATE
:react-native-media-kit:checkReleaseManifest
:react-native-media-kit:preDebugAndroidTestBuild UP-TO-DATE
:react-native-media-kit:preDebugBuild UP-TO-DATE
:react-native-media-kit:preDebugUnitTestBuild UP-TO-DATE
:react-native-media-kit:preReleaseUnitTestBuild UP-TO-DATE
:react-native-media-kit:prepareComAndroidSupportAppcompatV72301Library UP-TO-DATE
:react-native-media-kit:prepareComAndroidSupportRecyclerviewV72301Library UP-TO-DATE
:react-native-media-kit:prepareComAndroidSupportSupportV42321Library UP-TO-DATE
:react-native-media-kit:prepareComFacebookFrescoDrawee0110Library UP-TO-DATE
:react-native-media-kit:prepareComFacebookFrescoFbcore0110Library UP-TO-DATE
:react-native-media-kit:prepareComFacebookFrescoFresco0110Library UP-TO-DATE
:react-native-media-kit:prepareComFacebookFrescoImagepipeline0110Library UP-TO-DATE
:react-native-media-kit:prepareComFacebookFrescoImagepipelineBase0110Library UP-TO-DATE
:react-native-media-kit:prepareComFacebookFrescoImagepipelineOkhttp30110LibraryUP-TO-DATE
:react-native-media-kit:prepareComFacebookReactReactNative0320Library UP-TO-DATE
:react-native-media-kit:prepareComFacebookSoloaderSoloader010Library UP-TO-DATE
:react-native-media-kit:prepareComGoogleAndroidExoplayerExoplayerR156Library UP-TO-DATE
:react-native-media-kit:prepareOrgWebkitAndroidJscR174650Library UP-TO-DATE
:react-native-media-kit:prepareReleaseDependencies
:react-native-media-kit:compileReleaseAidl UP-TO-DATE
:react-native-media-kit:compileReleaseRenderscript UP-TO-DATE
:react-native-media-kit:generateReleaseBuildConfig UP-TO-DATE
:react-native-media-kit:generateReleaseAssets UP-TO-DATE
:react-native-media-kit:mergeReleaseAssets UP-TO-DATE
:react-native-media-kit:generateReleaseResValues UP-TO-DATE
:react-native-media-kit:generateReleaseResources UP-TO-DATE
:react-native-media-kit:mergeReleaseResources UP-TO-DATE
:react-native-media-kit:processReleaseManifest UP-TO-DATE
:react-native-media-kit:processReleaseResources UP-TO-DATE
:react-native-media-kit:generateReleaseSources UP-TO-DATE
:react-native-media-kit:processReleaseJavaRes UP-TO-DATE
:react-native-media-kit:compileReleaseJavaWithJavac
/Users/mycomp/Apps/reactApp/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:95: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/mycomp/Apps/reactApp/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:111: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/mycomp/Apps/reactApp/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:127: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/mycomp/Apps/reactApp/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:143: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/mycomp/Apps/reactApp/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:159: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/mycomp/Apps/reactApp/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:175: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
/Users/mycomp/Apps/reactApp/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/ReactMediaPlayerViewManager.java:193: error: no suitable constructor found for Event(int,long)
                  .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                                 ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)
7 errors
:react-native-media-kit:compileReleaseJavaWithJavac FAILED

FAILURE: Build failed with an exception.

What seems to be the problem?

Many thanks

Element type is invalid

Hello. I have an error:
<Video style={{width: 129, height: 120 / (16/9)}} src={'http://v.yoai.com/femme_tampon_tutorial.mp4'} autoplay={true} preload={'none'} loop={false} controls={true} muted={false} poster={'http://static.yoaicdn.com/shoppc/images/cover_img_e1e9e6b.jpg'}/>

Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. Check the render method of Controls.

"react": "^0.14.7",
"react-native": "^0.29.1"
Thank you.

Video thumbnail image

Hi,
Is there a way to generate a thumbnail image and present it until the user presses play?

MIT License

请问能补写上MIT License吗?非常感谢!

[iOS] Its crashes with Notification Plugin like React-native-onesignal

You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.
2016-12-18 07:24:09.011 [info][tid:main][RCTBatchedBridge.m:72] Initializing <RCTBatchedBridge: 0x7f972945ad70> (parent: <RCTBridge: 0x7f9729716e40>, executor: RCTJSCExecutor)
2016-12-18 07:24:09.104 CetinganV2[4020:42242] ERROR: Error registering for Apple push notifications. Error: Error Domain=NSCocoaErrorDomain Code=3010 "REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION" UserInfo={NSLocalizedDescription=REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION}
2016-12-18 07:24:12.123 [warn][tid:main][RCTEventEmitter.m:54] Sending `websocketFailed` with no listeners registered.
2016-12-18 07:24:12.155 [info][tid:main][RCTRootView.m:249] Running application CetinganV2 ({
    initialProps =     {
    };
    rootTag = 1;
})

my app working again when I removed this package in build phase

Error when pressing the play button for the first time

I attached the error screen. Actually it plays even if it fires an error but when in release mode, the app crashes no doubt.

<Video
      style={{height: width / (16/9)}}
      src={this.props.movieInfo.trailerUrl}
      autoplay={false}
      preload={'none'}
      loop={false}
      controls={true}
      muted={false}
      poster={'none'}>

img_2662

can't build android version

 leaveTimer(action = 0: string) {   <======error here.
    if (action === 'more') {
      this.setState({stateControls: this.state.stateControls + 1});
    } else if (action === 'less') {
      this.setState({stateControls: this.state.stateControls - 1});
    }
    if (this.state.stateControls == -1 && !this.state.controlsWillUnmount) {
      this.onPress();
      this.setState({stateControls: 0});
    }
  }

where is the InternalEventListener?

I run react-native run-android and app CRASHED.

Logcat shows that java.lang.NoClassDefFoundError: com.greatdroid.reactnative.media.player.MediaPlayerController$InternalEventListener

Video not Playing

Hi,
No error is showing. But video is not playing (In IPhone 6s Simulator).
A pre-loader is showing. I am using rn version 0.29.2

Native controls?

Are these controls native platform controls? The seem different. Because in Expo I use it's useNativeControls prop and its controls look different.

  • Here is how it looks on Android:
  • And on iOS:

Full Screen

How does full screen works?

How can I let user watch full screen and landscape mode?

RN version 0.41.0 android build fails

I have react-native 0.41.0 and with build fails with following message:

/home/work/workApp_version2/node_modules/react-native-media-kit/android/src/main/java/com/greatdroid/reactnative/media/player/Re
actMediaPlayerViewManager.java:101: error: no suitable constructor found for Event(int,long)
                .dispatchEvent(new Event(view.getId(), SystemClock.uptimeMillis()) {
                               ^
    constructor Event.Event() is not applicable
      (actual and formal argument lists differ in length)
    constructor Event.Event(int) is not applicable
      (actual and formal argument lists differ in length)

If I try using git+https://github.com/ldn0x7dc/react-native-media-kit.git#pull/30/head then there is no audio and video playback. Controls are not displayed either.

Local video

Can I play a local video, if yes how can I do it, could you please let me know how to do it and in what folder should I put the video? Thanks.

TrackRenderesBuilder infers stream type incompletely

MediaPlayerController.createTrackRenderersBuilder infers the stream type from the file name presumably at the end of the url. Users should be able to override this setting if their URLs are dynamic or don't point directly to a file.

IOS问题

你好,使用XCODE 7.3 用真机调试,直接拷贝的例子里代码,在真机上一直转圈,是什么原因?

IOS build fails

react-native-media-kit build fails when running for ios with following error:

Installing build/Build/Products/Debug-iphonesimulator/version2.app
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=2):
Failed to install the requested application
An application bundle was not found at the provided path.
Provide a valid path to the desired application bundle.
Print: Entry, ":CFBundleIdentifier", Does Not Exist

Command failed: /usr/libexec/PlistBuddy -c Print:CFBundleIdentifier build/Build/Products/Debug-iphonesimulator/version2.app/Info.plist
Print: Entry, ":CFBundleIdentifier", Does Not Exist

Cannot read property 'Commands' of undefined

Hi, I'm getting this error
Cannot read property 'Commands' of undefined
when I pressed the play button..

And when I use preload={'auto'} and autoplay={true},
the video doesn't play automatically

Can you help me?
Thanks!

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.