Giter Site home page Giter Site logo

kickflip-android-sdk's People

Contributors

onlyinamerica avatar uberspot 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kickflip-android-sdk's Issues

Allow CLIENT_ID and CLIENT_SECRET to be set via XML

I'd be neat if the app checked for secrets in the resources directory as an alternative to setting it in code, as this would allow me to use the BroadcastActivity directly from the the launcher, as there would be no need to call setup() with the secrets.

I'd suggest a keys.xml or a secrets.xml with kickflipClientID and kickflipClientSecret entries.

:neckbeard:

How to enable Stereo audio

I checked the session config code, it does not allow stereo audio. Why is that. What would be the easiest way to enabled stereo audio?

I tried to update the check in SessionConfig to allow NumChannels as 2, but the audio breaks and there is lot of echo in the resuting audio.

Decrease length of first chunk

This is not a priority for 1.0.0, maybe for 1.0.* or 1.., just writing it down here so I don't forget:

Can we have the very first chunk be 1-5 seconds, rather than the standard 10, just so that the user spends less time in the "Buffering" state? It shouldn't have any other real effect, it's just a minor annoyance for the person filming to the the orange rather than the red. "Buffering" seems like a dirty word.

Trable with my account and plan

Excuse me, that I write here, but is not responding technical support for a month. How do I delete my account or a credit card because I have already 2 months did not use the service, but my money is debited monthly.

thanks a lot

20/30 second latency

I have a 20/30 second latency between when my stream launches in my phone, and what I see on Kickflip. This is by implementing the simple startbroadcastactivity with a default config.

Is this latency set by the servers on the Kickflip side, or can I affect this by configuring the broadcastactivity on the Android side?

Issues playing livestreams via the web

When loading the video stream in a browser we get this error: "No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost:44300' is therefore not allowed access."
We use the videojs javascript library with HLC support to view it, and we also use a Flash fallback scenario.

Is it possible to add the "Access-Control-Allow-Origin" header for 2 sites for our client? Or is there any other solution?

Tried to contact - appreciate a reply

I've sent emails and have just received auto-replies.
I would like to know how to update payment information and perform other basic account maintenance features.

We have other custom development items to discuss.

Thanks,
Dennis

Why limitation of 4.3+

Why the android limitation of 4.3+. Media Codec is available since 4.1 and HLS support in Android is there since Honeycomb?

Generate HLS format and MP4 segments simultaneously.

Would it be possible to generate HLS format for live streaming and MP4 streaming for archival on phone simulaneously?

My use case is to generate HLS format for live streaming and using the MP4 on phone for offline viewing (in case use opts to)

Unable to contact dev or cancel trial account

Developer won't respond to emails and they have no option on their portal to cancel a trial account. I'm assuming once the trial ends, we will be charged. Zero communication, zero support from us. This is the only method I found to contact and warn others.

Sample App crashes on Nexus5 devices (both Lollipop 5.0 and 5.1) when hit Record button

05-04 16:30:36.696: I/FFmpegMuxer(19003): PrepareAVFormatContext for path /storage/emulated/0/MySampleApp/93482c6f-ee6d-4444-8842-e807f28043f4/index.m3u8
05-04 16:30:36.701: D/audio_hw_primary(182): out_set_parameters: enter: usecase(1: low-latency-playback) kvpairs: routing=2
05-04 16:30:36.702: D/audio_hw_primary(182): select_devices: out_snd_device(0: none) in_snd_device(46: camcorder-mic)
05-04 16:30:36.702: D/msm8974_platform(182): platform_send_audio_calibration: sending audio calibration for snd_device(46) acdb_id(61)
05-04 16:30:36.702: D/(182): Failed to fetch the lookup information of the device 0000003D
05-04 16:30:36.702: E/ACDB-LOADER(182): Error: ACDB AudProc vol returned = -19
05-04 16:30:36.702: D/audio_hw_primary(182): enable_snd_device: snd_device(46: camcorder-mic)
05-04 16:30:36.707: D/audio_hw_primary(182): enable_audio_route: apply and update mixer path: audio-record
05-04 16:30:36.729: I/OMX-VENC(182): open Color conv for RGBA888 W: 1280, H: 720
05-04 16:30:36.755: E/OMX-VENC(182): VIDIOC_REQBUFS CAPTURE_MPLANE Failed
05-04 16:30:36.782: E/AndroidRuntime(19003): FATAL EXCEPTION: CameraEncoder
05-04 16:30:36.782: E/AndroidRuntime(19003): Process: io.kickflip.sample, PID: 19003
05-04 16:30:36.782: E/AndroidRuntime(19003): java.nio.ReadOnlyBufferException
05-04 16:30:36.782: E/AndroidRuntime(19003): at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:354)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.FFmpegMuxer.captureH264MetaData(FFmpegMuxer.java:292)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.FFmpegMuxer.handleWriteSampleData(FFmpegMuxer.java:206)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.FFmpegMuxer.writeSampleData(FFmpegMuxer.java:183)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.AndroidEncoder.drainEncoder(AndroidEncoder.java:100)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.CameraEncoder.handleFrameAvailable(CameraEncoder.java:433)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.CameraEncoder.access$200(CameraEncoder.java:27)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.CameraEncoder$EncoderHandler.handleMessage(CameraEncoder.java:835)
05-04 16:30:36.782: E/AndroidRuntime(19003): at android.os.Handler.dispatchMessage(Handler.java:102)
05-04 16:30:36.782: E/AndroidRuntime(19003): at android.os.Looper.loop(Looper.java:135)
05-04 16:30:36.782: E/AndroidRuntime(19003): at io.kickflip.sdk.av.CameraEncoder.run(CameraEncoder.java:610)
05-04 16:30:36.782: E/AndroidRuntime(19003): at java.lang.Thread.run(Thread.java:818)
05-04 16:30:36.784: W/ActivityManager(817): Force finishing activity io.kickflip.sample/io.kickflip.sdk.activity.BroadcastActivity
05-04 16:30:36.816: D/audio_hw_primary(182): select_devices: out_snd_device(2: speaker) in_snd_device(0: none)
05-04 16:30:36.816: D/msm8974_platform(182): platform_send_audio_calibration: sending audio calibration for snd_device(2) acdb_id(15)
05-04 16:30:36.816: D/audio_hw_primary(182): enable_snd_device: snd_device(2: speaker)
05-04 16:30:36.817: D/audio_hw_primary(182): enable_audio_route: apply and update mixer path: low-latency-playback
05-04 16:30:36.825: I/Process(19003): Sending signal. PID: 19003 SIG: 9
05-04 16:30:36.827: V/ActivityManager(817): Display changed displayId=0
05-04 16:30:36.838: I/ActivityManager(817): Config changes=480 {1.0 310mcc?mnc en_US ldltr sw360dp w360dp h567dp 480dpi nrml port finger -keyb/v/h -nav/h s.21}
05-04 16:30:36.849: I/InputReader(817): Reconfiguring input devices. changes=0x00000004
05-04 16:30:36.849: I/InputReader(817): Device reconfigured: id=4, name='touch_dev', size 1080x1920, orientation 0, mode 1, display id 0
05-04 16:30:36.852: I/OpenGLRenderer(817): Initialized EGL, version 1.4
05-04 16:30:36.875: W/InputDispatcher(817): channel '2c245e5a io.kickflip.sample/io.kickflip.sample.activity.MainActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
05-04 16:30:36.875: E/InputDispatcher(817): channel '2c245e5a io.kickflip.sample/io.kickflip.sample.activity.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
05-04 16:30:36.903: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.903: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.909: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.909: I/ActivityManager(817): Restarting because process died: ActivityRecord{15468e9e u0 io.kickflip.sample/.activity.MainActivity t919}
05-04 16:30:36.913: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.914: E/JavaBinder(817): !!! FAILED BINDER TRANSACTION !!!
05-04 16:30:36.915: W/ActivityManager(817): Exception when starting activity io.kickflip.sample/.activity.MainActivity
05-04 16:30:36.915: W/ActivityManager(817): android.os.TransactionTooLargeException
05-04 16:30:36.915: W/ActivityManager(817): at android.os.BinderProxy.transactNative(Native Method)
05-04 16:30:36.915: W/ActivityManager(817): at android.os.BinderProxy.transact(Binder.java:496)
05-04 16:30:36.915: W/ActivityManager(817): at android.app.ApplicationThreadProxy.scheduleLaunchActivity(ApplicationThreadNative.java:793)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStackSupervisor.realStartActivityLocked(ActivityStackSupervisor.java:1157)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStackSupervisor.startSpecificActivityLocked(ActivityStackSupervisor.java:1257)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStack.resumeTopActivityInnerLocked(ActivityStack.java:1882)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStack.resumeTopActivityLocked(ActivityStack.java:1480)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStackSupervisor.resumeTopActivitiesLocked(ActivityStackSupervisor.java:2429)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStack.completePauseLocked(ActivityStack.java:1025)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityStack.activityPausedLocked(ActivityStack.java:923)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityManagerService.activityPaused(ActivityManagerService.java:6441)
05-04 16:30:36.915: W/ActivityManager(817): at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:513)
05-04 16:30:36.915: W/ActivityManager(817): at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2407)
05-04 16:30:36.915: W/ActivityManager(817): at android.os.Binder.execTransact(Binder.java:446)
05-04 16:30:36.918: W/InputDispatcher(817): channel '187a8098 io.kickflip.sample/io.kickflip.sdk.activity.BroadcastActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
05-04 16:30:36.918: E/InputDispatcher(817): channel '187a8098 io.kickflip.sample/io.kickflip.sdk.activity.BroadcastActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
05-04 16:30:36.920: W/CameraService(182): Disconnecting camera client 0xb608cb90 since the binder for it died (this pid 182)
05-04 16:30:36.920: E/OMXNodeInstance(182): !!! Observer died. Quickly, do something, ... anything...
05-04 16:30:36.921: E/Surface(182): queueBuffer: error queuing buffer to SurfaceTexture, -32
05-04 16:30:36.922: E/Camera3-OutputStream(182): returnBufferCheckedLocked: Stream 0: Error queueing buffer to native window: Broken pipe (-32)
05-04 16:30:36.922: E/Camera3-Device(182): Can't return buffer 0 for frame 75 to its stream: Broken pipe (-32)
05-04 16:30:36.922: E/Surface(182): queueBuffer: error queuing buffer to SurfaceTexture, -32
05-04 16:30:36.922: E/Camera3-OutputStream(182): returnBufferCheckedLocked: Stream 0: Error queueing buffer to native window: Broken pipe (-32)
05-04 16:30:36.922: E/Camera3-Device(182): Can't return buffer 0 for frame 76 to its stream: Broken pipe (-32)
05-04 16:30:36.922: E/Surface(182): queueBuffer: error queuing buffer to SurfaceTexture, -32
05-04 16:30:36.923: E/Camera3-OutputStream(182): returnBufferCheckedLocked: Stream 0: Error queueing buffer to native window: Broken pipe (-32)
05-04 16:30:36.923: E/Camera3-Device(182): Can't return buffer 0 for frame 77 to its stream: Broken pipe (-32)
05-04 16:30:36.934: I/WindowState(817): WIN DEATH: Window{187a8098 u0 io.kickflip.sample/io.kickflip.sdk.activity.BroadcastActivity}

Unknow Data Stream appearing

Im trying to implement a rtmp stream using kickflip.
I succeeded in doing so. But i see a extra data stream appearing on the stream. I know rtmp support has been stopped. But can someone tell me from where the Stream#0:1 Data none is coming from??

screenshot from 2015-07-02 12-49-50

Kickflip for x86

What would it take to get this supported added in to Kickflip?

I use the x86 VM to develop (so much faster than the emulator.. soooo much faster..), but unfortunately the project won't compile without x86 support:

Failure [INSTALL_FAILED_CPU_ABI_INCOMPATIBLE]

How much would it inflate the package to add this?

Documentation is out of date

This snippet is suggested by the README of this repo:

@Override
public void onBroadcastLive(String watchUrl) { 
    Log.i("Kickflip", "This phone is live at " + watchUrl);       
}

But I think that String is now a Stream object, so the @OverRide won't work and the project and the code won't compile. Simple fix, just gotta make sure the docs match the interface.

Multiple dex files defined error when adding apache commons dependencies.

I know this isn't strictly related to kickflip but it's a pretty annoying problem...

My project depends on apache commons codec and I have

compile 'commons-codec:commons-codec:1.8'

in my build.gradle.

Kickflip is dependant on an AWS jar rather than a maven repo, and the jar also has commons codec. This means that gradle can't detect that my commons codec and the amazon one are the same and it gives:

com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/codec/binary/Base64;

If AWS was added as a proper dependency then it would work. Unfortunately there isn't the android one on maven central. I tried a ton of things to work around this but got nowhere. I tired adding AWS as a submodule and making it a gradle project, removing the apache commons .class file in the kickflip jar etc.

I made a stack overflow question too: http://stackoverflow.com/questions/23677459/excluding-class-files-from-gradle-dependecy

I'm new to gradle, is there anything that can be added to my build.gradle to ignore this second .class file?

Thanks

Crash when releasing resources in AVRecorder

Hey,
I got a specific crash happening in my galaxy S3 mini everytime i release the resources in AVRecorder.

I fixed it by adding

EGL14.eglMakeCurrent(mEGLDisplay, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT);

right after

public void release() {
    if (mEGLDisplay != EGL14.EGL_NO_DISPLAY) {
        // Android is unusual in that it uses a reference-counted EGLDisplay.  So for
        // every eglInitialize() we need an eglTerminate().

in EGLCore.java.

Sauce: http://comments.gmane.org/gmane.comp.handhelds.android.ndk/17285 (I got the eglMakeCurrent error like in the first post).

Hope this helps :)
If it's the correct solution you can close the issue right away.

FFmpeg crashing with exception on Kitkat device

Build fingerprint: 'Xiaomi/cancro/cancro:4.4.2/KVT49L/KXDMIBF23.0:user/release-keys'
Revision: '0'
pid: 25070, tid: 25963, name: Thread-1763 >>> ... <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000005
r0 00000000 r1 00000000 r2 0000000d r3 00000005
r4 8e25e9fe r5 00000000 r6 78409a48 r7 00000000
r8 0000000d r9 78409a48 sl 7863e9a0 fp 000001c8
ip 76f96e68 sp 78409a00 lr 76eef6cc pc 7c385714 cpsr 200d0010
d0 6f7262642f6f7270 d1 776765706d66662f
d2 462f726570706172 d3 6172576765706d46
d4 0000000100000000 d5 0000000000000000
d6 0000000000000000 d7 0000000000000000
d8 0000000000000000 d9 461c40003f000000
d10 00000000445fdb65 d11 0000000000000000
d12 0000000000000000 d13 0000000000000000
d14 0000000000000000 d15 0000000000000000
d16 ffffffffffffffff d17 0000000000000000
d18 0000000000000000 d19 0000000d00000000
d20 0000000000000001 d21 0000000000000000
d22 0000000000000000 d23 00720077002f0072
d24 3fc748e72055a505 d25 3fc2f112df3e5244
d26 c047069e2aa2aa5b d27 0000000000000000
d28 001e001d001c001b d29 0020001f001d001e
d30 002a002a002a002a d31 0000000000000000
scr 88000013

backtrace:
#00 pc 000e2714 /data/app-lib/.../libavcodec-55.so (av_packet_split_side_data+52)
#1 pc 000996c8 /data/app-lib/.../libavformat-55.so (av_write_trailer+216)

code around pc:
7c3856f4 1a000022 e596801c e358000c da00001d
7c385704 e5967018 e59f4290 e0872008 e2423008
7c385714 e5529008 e552b007 e5d3a005 e5522004
7c385724 e5d3c002 e5d31006 e182a40a e189940b
7c385734 e5d32003 e5d33007 e189980c e18aa801
7c385744 e1899c02 e18aac03 e02ac86a e0291869
7c385754 e1a0c42c e1a01421 e59f5240 e3ccccff
7c385764 e3c11cff e02c246a e0213469 e1530005
7c385774 01520004 0a000004 e28dd00c e8bd8ff0
7c385784 e3a00000 e28dd00c e8bd8ff0 e248800d
7c385794 e0873008 e5d31001 e7d72008 e5d3c002
7c3857a4 e1822401 e5d31003 e182280c e1822c01
7c3857b4 e0221862 e1a01421 e3c11cff e0312462
7c3857c4 4affffec e0671003 e1520001 8affffe9
7c3857d4 e3a0c001 ea000011 e3e01004 e0621001
7c3857e4 e7f32001 e28cc001 e5d31001 e5d34002

code around lr:
76eef6ac e3510102 03500000 0a000002 e0922000
76eef6bc e0a33001 e1cd22f0 e1a00009 ebfdd841
76eef6cc e5983008 e1a01009 e5933034 e1a05000
76eef6dc e1a00008 e12fff33 e59834c0 e3530000
76eef6ec e1a04000 0a000007 e5980010 e3500000
76eef6fc 0a000004 e3540000 ba000002 e598343c
76eef70c e3130c02 1a000065 e3550000 0a000001
76eef71c e1a00009 ebfdd82e e3540000 ba000051
76eef72c e598301c e59d2038 e1a00009 e7931102
76eef73c e1c124d0 e2922001 e2a33000 e1c124f0
76eef74c ebfdd59b e5980010 e3500000 0affffac
76eef75c e590304c e3530000 0affffa9 e3500000
76eef76c 0a000000 ebfe4808 e3540000 1a000002
76eef77c e5983010 e3530000 1593404c e5983018
76eef78c e3530000 13a06000 11a05006 0a00000c
76eef79c e598301c e2855001 e7930106 e280

FFmpegWrapper error during long registration

Hi, I am using sdk in my project and I am experiencing an error. I initially thought it was something related to the modifications I made to the sdk, so i tested your example app, but the problem still persists.
The problem is that the index*.ts file stops being written and is not uploaded until the stop recording button is pressed.
To reproduce the bug leave the device recording for at least 40 minutes.
This is the resulting logcat (from Sony SGP611 on 5.0.2, I have another Logcat from Galaxy Camera 2 EK-GC200 with 4.3)

06-17 15:31:58.632  17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 0 pkt: 64440 size: 565 error: Invalid argument
06-17 15:31:58.655  17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 1 pkt: 64441 size: 25775 error: Invalid argument
06-17 15:31:58.668  17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 0 pkt: 64441 size: 564 error: Invalid argument
06-17 15:31:58.691  17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 1 pkt: 64442 size: 9889 error: Invalid argument
06-17 15:31:58.693  17126-17126/io.kickflip.sample I/MicrophoneEncoder﹕ stopRecording
06-17 15:31:58.693  17126-17126/io.kickflip.sample I/CameraEncoder﹕ stopRecording
06-17 15:31:58.705  17126-17223/io.kickflip.sample I/MicrophoneEncoder﹕ Exiting audio encode loop. Draining Audio Encoder
06-17 15:31:58.725  17126-17208/io.kickflip.sample E/FFmpegWrapper﹕ av_interleaved_write_frame video: 1 pkt: 64443 size: 9106 error: Invalid argument
06-17 15:31:58.737  17126-17217/io.kickflip.sample I/CameraEncoder﹕ Sending last video frame. Draining encoder
06-17 15:31:58.753  17126-17208/io.kickflip.sample I/FFmpegMuxer﹕ Forcing Shutdown
06-17 15:31:58.753  17126-17208/io.kickflip.sample I/FFmpegWrapper﹕ finalizeAVFormatContext
06-17 15:31:58.753  17126-17228/io.kickflip.sample D/HlsFileObserver﹕ Event 8 at index214.ts ext ts
06-17 15:31:58.754  17126-17228/io.kickflip.sample I/S3Manager﹕ Queueing upload ies_test/jo2lta8i5u6q/ad8145c8-0114-40d4-8e01-3029c65cd6cd/index214.ts
06-17 15:31:58.755  17126-17228/io.kickflip.sample D/HlsFileObserver﹕ Event 8 at index.m3u8.tmp ext tmp
06-17 15:31:58.755  17126-17228/io.kickflip.sample D/HlsFileObserver﹕ Event 128 at index.m3u8 ext m3u8
06-17 15:31:58.764  17126-17228/io.kickflip.sample I/MainActivity﹕ onBroadcastStop
06-17 15:31:58.766  17126-17126/io.kickflip.sample I/CameraEncoder﹕ onHostActivityPaused
06-17 15:31:58.767  17126-17228/io.kickflip.sample I/S3Manager﹕ Queueing upload ies_test/jo2lta8i5u6q/ad8145c8-0114-40d4-8e01-3029c65cd6cd/index.m3u8
06-17 15:31:58.778  17126-17228/io.kickflip.sample I/S3Manager﹕ Queueing upload ies_test/jo2lta8i5u6q/ad8145c8-0114-40d4-8e01-3029c65cd6cd/vod.m3u8
06-17 15:31:58.863  17126-17223/io.kickflip.sample W/FFmpegMuxer﹕ Dropping frame because Muxer not ready!
06-17 15:31:58.863  17126-17223/io.kickflip.sample W/FFmpegMuxer﹕ Dropping frame because Muxer not ready!
06-17 15:31:58.864  17126-17223/io.kickflip.sample W/FFmpegMuxer﹕ Dropping frame because Muxer not ready!
06-17 15:31:59.010  17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:31:59.102  17126-17126/io.kickflip.sample I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@3ef42551 time:14529623
06-17 15:31:59.115  17126-17217/io.kickflip.sample I/CameraEncoder﹕ handleRelease
06-17 15:31:59.115  17126-17217/io.kickflip.sample D/Texture2dProgram﹕ deleting program 45
06-17 15:32:00.160  17126-17126/io.kickflip.sample I/API﹕ request succeeded io.kickflip.sdk.api.json.StreamList@3d6fb1f2
06-17 15:32:00.239  17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:32:00.645  17126-17126/io.kickflip.sample I/API﹕ request succeeded io.kickflip.sdk.api.json.StreamList@3e788e87
06-17 15:32:00.713  17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:32:01.458  17126-17126/io.kickflip.sample I/API﹕ request failed A Kickflip server error occurred
06-17 15:32:02.690  17126-17500/io.kickflip.sample I/S3Manager﹕ Uploaded 2289.276 KB in 3930ms (582.512 KBps)
06-17 15:32:02.701  17126-17498/io.kickflip.sample I/S3Manager﹕ Upload complete.
06-17 15:32:02.883  17126-17500/io.kickflip.sample I/S3Manager﹕ Uploaded 0.244 KB in 178ms (1.37 KBps)
06-17 15:32:02.885  17126-17500/io.kickflip.sample I/MainActivity﹕ onBroadcastLive @ https://kickflip.io/ad8145c8-0114-40d4-8e01-3029c65cd6cd
06-17 15:32:02.887  17126-17498/io.kickflip.sample I/S3Manager﹕ Upload complete.
06-17 15:32:03.084  17126-17500/io.kickflip.sample I/S3Manager﹕ Uploaded 6.582 KB in 194ms (33.927 KBps)
06-17 15:32:03.096  17126-17498/io.kickflip.sample I/S3Manager﹕ Last Upload complete.
06-17 15:32:03.096  17126-17498/io.kickflip.sample I/S3Manager﹕ Shutting down
06-17 15:34:11.020  17126-17136/io.kickflip.sample I/art﹕ Debugger is no longer active
06-17 15:35:22.067  17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:35:23.288  17126-17136/io.kickflip.sample W/art﹕ Suspending all threads took: 6.570ms
06-17 15:35:23.340  17126-17126/io.kickflip.sample I/API﹕ request succeeded io.kickflip.sdk.api.json.StreamList@c9cf43
06-17 15:35:23.417  17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:35:23.427  17126-17126/io.kickflip.sample I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@3ef42551 time:14733948
06-17 15:35:23.802  17126-17126/io.kickflip.sample I/API﹕ request succeeded io.kickflip.sdk.api.json.StreamList@156193aa
06-17 15:35:23.873  17126-17126/io.kickflip.sample I/StreamListFragment﹕ Loading more streams
06-17 15:35:23.889  17126-17126/io.kickflip.sample I/Muxer﹕ Created muxer for output: /storage/emulated/0/MySampleApp/107335b8-cd8b-4e79-b06e-4078dc43b2b3/index.m3u8
06-17 15:35:23.897  17126-17126/io.kickflip.sample I/Timeline﹕ Timeline: Activity_launch_request id:io.kickflip.sample time:14734418
06-17 15:35:24.001  17126-17126/io.kickflip.sample I/BroadcastFragment﹕ Recreating BroadcastFragment
06-17 15:35:24.013  17126-13298/io.kickflip.sample I/OMXClient﹕ Using client-side OMX mux.
06-17 15:35:24.031  17126-13298/io.kickflip.sample E/OMXMaster﹕ A component of name 'OMX.qcom.audio.decoder.aac' already exists, ignoring this one.
06-17 15:35:24.035  17126-13298/io.kickflip.sample D/MediaCodec﹕ MediaCodec[kWhatConfigure]: video-output-protection: 00000000, audio-output-protection: 00000000
06-17 15:35:24.054  17126-17126/io.kickflip.sample I/Kickflip﹕ Clearing SessionConfig
06-17 15:35:24.067  17126-17126/io.kickflip.sample W/CameraRelease﹕ Didn't try to open camera onHAResume. rec: false mSurfaceTexture ready?  no
06-17 15:35:24.188  17126-13307/io.kickflip.sample D/CameraSurfaceRenderer﹕ onSurfaceCreated
06-17 15:35:24.193  17126-13307/io.kickflip.sample D/Texture2dProgram﹕ Created program 3 (TEXTURE_EXT)
06-17 15:35:24.197  17126-13307/io.kickflip.sample D/Texture2dProgram﹕ Created program 6 (TEXTURE_2D)
06-17 15:35:24.199  17126-13307/io.kickflip.sample D/CameraSurfaceRenderer﹕ onSurfaceChanged 1920x1200
06-17 15:35:24.199  17126-13307/io.kickflip.sample I/CameraSurfaceRenderer﹕ setTexSize on display Texture
06-17 15:35:24.203  17126-13325/io.kickflip.sample I/OMXClient﹕ Using client-side OMX mux.
06-17 15:35:24.229  17126-17126/io.kickflip.sample I/API﹕ request failed A Kickflip server error occurred
06-17 15:35:24.248  17126-17126/io.kickflip.sample I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@33c013e5 time:14734769
06-17 15:35:24.290  17126-13324/io.kickflip.sample D/MediaCodec﹕ MediaCodec[kWhatConfigure]: video-output-protection: 00000000, audio-output-protection: 00000000
06-17 15:35:24.292  17126-13325/io.kickflip.sample E/ACodec﹕ [OMX.qcom.video.encoder.avc] storeMetaDataInBuffers (output) failed w/ err -2147483648
06-17 15:35:24.293  17126-13325/io.kickflip.sample W/ACodec﹕ do not know color format 0x7fa30c04 = 2141391876
06-17 15:35:24.293  17126-13325/io.kickflip.sample W/ACodec﹕ do not know color format 0x7f000789 = 2130708361
06-17 15:35:24.301  17126-13325/io.kickflip.sample I/ACodec﹕ [OMX.qcom.video.encoder.avc] setupVideoEncoder succeeded
06-17 15:35:24.302  17126-13325/io.kickflip.sample W/ACodec﹕ do not know color format 0x7f000789 = 2130708361
06-17 15:35:24.303  17126-13325/io.kickflip.sample D/ACodec﹕ Found video-output-protection flags set to 00000000

This always happened during writing of index214.ts (approximately 1.5 GB of data written), on Sony SGP611 5.0.2, Galaxy Camera 2 EK-GC200 with 4.3 and HTC ONE M7 5.0.2.

Hope this is enough, I can provide more info on different devices if you need, just tell me.
Keep up the good work.

P.S. I removed most of the FFmpegWrapper because they added nothing useful and made the logcat less readable.

Corrupted recording with output widths of < 640 on Google Nexus 7

Android version is 4.4.2.

Example video produced: https://drive.google.com/file/d/0B7nLoVfDWbdmMGhLc203OEhtUzBZeWcyV3RTbU5vZG1PNVZj/edit?usp=sharing

Other resolutions tested:
Resolution - Corrupted
480x480 - YES
480x360 - YES
481x480 - YES
512x512 - YES
600x512 - YES
500x640 - YES
639x640 - YES
640x480 - NO
640x512 - NO
640x640 - NO

This seems like a hardware/firmware bug. Couldn't see anything in Kickflip that would cause this. And recording small videos works fine on all my other tablets/devices. As the Nexus is a fairly common one it may be a bug on others too.

Couldn't find anything in the docs referring to this either.

So I would probably just limit the recording width to 640 or more.

Can`t store .ts files in my app directory

Hello! Seems like this problem is in the ffmpeg wrapper. It won`t write hls to the directory that contains dots (like the app data dir containing package name). Btw Is there any way to look at the wrapper source code?

Gradle build is broken

./gradlew clean
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "versionInt" on "project ':sdk'", value: "1".
Deprecated dynamic property: "versionName" on "project ':sdk'", value: "0.9".
Deprecated dynamic property: "android_manifest" on "project ':sdk'", value: "manifest[attributes={x...".
Deprecated dynamic property: "package_name" on "project ':sdk'", value: "io.kickflip.sdk".

FAILURE: Build failed with an exception.

  • Where:
    Script 'https://raw.github.com/OnlyInAmerica/mvn-repo/master/maven.gradle' line: 27

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

    A problem occurred configuring project ':sdk'.
    Could not find property 'artifactName' on project ':sdk'.

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

BUILD FAILED

Problem with jni modules

Modules introduced in 6b4b3ab have problem:
java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libavformat-56.so" needed by "libFFmpegWrapper.so"; caused by could not load library "libavcodec-56.so" needed by "libavformat-56.so"; caused by could not load library "libswresample-1.so" needed by "libavcodec-56.so"; caused by could not load library "libavutil-54.so" needed by "libswresample-1.so"; caused by could not load library "librtmp-1.so" needed by "libavutil-54.so"; caused by cannot locate symbol "rand" referenced by "librtmp-1.so"...
Tested on Xiaomi Mi3 (Android 4.4.4).

At stackoverflow were hints, that this can be becourse this modules were compiled with NDK API 21.

Could you please provide C code for net.openwatch.ffmpegwrapper.FFmpegWrapper as OpenWatch/FFmpegWrapper-Android is outdated?

Record in portrait mode

I wish to make relevant changes to allow portrait mode. First steps would be to allow BroadcastFragment to load in portrait mode. But once that happens, the camera preview is rotated -90.

I believe the rotation makes sense when the fragment opens in Landscape mode. Could you suggest where is actual rotation taking place?

Reset in AVRecorder not working (?)

  1. the parameter in reset(SessionConfig config) in AVRecorder.java isn't used inside

  2. In a brief test I did reset doesn't seem to start the preview in GLCameraView again after stopping recording. If I do startRecording and then stopRecording the preview after that will freeze to the last frame drawn before stopping the recording. I guess some resources aren't cleared after the end of the recording and seem to persist?

Android 5.0 error

      Texture2dProgram  D  Created program 9 (TEXTURE_EXT)
           FFmpegMuxer  I  PrepareAVFormatContext for path /storage/emulated/0/MySampleApp/60c63b9e-1abc-4a7e-9bc5-3923083d2ac1/index.m3u8
        AndroidRuntime  E  FATAL EXCEPTION: CameraEncoder
                        E  Process: io.kickflip.sample, PID: 20050
                        E  java.nio.ReadOnlyBufferException
                        E      at java.nio.DirectByteBuffer.put(DirectByteBuffer.java:354)
                        E      at io.kickflip.sdk.av.FFmpegMuxer.captureH264MetaData(FFmpegMuxer.java:292)
                        E      at io.kickflip.sdk.av.FFmpegMuxer.handleWriteSampleData(FFmpegMuxer.java:206)
                        E      at io.kickflip.sdk.av.FFmpegMuxer.writeSampleData(FFmpegMuxer.java:183)
                        E      at io.kickflip.sdk.av.AndroidEncoder.drainEncoder(AndroidEncoder.java:100)
                        E      at io.kickflip.sdk.av.CameraEncoder.handleFrameAvailable(CameraEncoder.java:433)
                        E      at io.kickflip.sdk.av.CameraEncoder.access$200(CameraEncoder.java:27)
                        E      at io.kickflip.sdk.av.CameraEncoder$EncoderHandler.handleMessage(CameraEncoder.java:835)
                        E      at android.os.Handler.dispatchMessage(Handler.java:102)
                        E      at android.os.Looper.loop(Looper.java:135)
                        E      at io.kickflip.sdk.av.CameraEncoder.run(CameraEncoder.java:610)
                        E      at java.lang.Thread.run(Thread.java:818)
               Process  I  Sending signal. PID: 20050 SIG: 9

Is the C source code open?

Hi, I found you have used ffmpeg to mix the audio and video, Is the C source code open? Where can I get it?

Crashing when stop playing recorded livestream

On some Android 4.2 devices we tested we have sometimes the issue that it crashes at the end of the recorded livestream with the Kickflip MediaPlayer integrated in the SDK.

Any idea what causes this and how this can be solved?

Stacktrace:
E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.cloozup.app, PID: 31217
java.lang.IllegalStateException
at android.media.MediaPlayer.getCurrentPosition(Native Method)
at io.kickflip.sdk.fragment.MediaPlayerFragment.getCurrentPosition(MediaPlayerFragment.java:245)
at android.widget.MediaController.setProgress(MediaController.java:423)
at android.widget.MediaController.access$500(MediaController.java:71)
at android.widget.MediaController$3.handleMessage(MediaController.java:394)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)

Cancel trial subscription

I emailed a week after signing up (Oct 5) that I wanted my trial subscription cancelled. I was just charged though. I would like my money refunded and my account cancelled.

UnsatisfiedLinkError - couldn't find "libFFmpegWrapper.so"

I am trying to integrate the SDK in my app and I get UnsatisfiedLinkError every time the lib tries to load ffmpeg.
In FFmpegMuxer -> mFFmpeg = new FFmpegWrapper(); which leads to the loading of the static contractor -> System.loadLibrary("FFmpegWrapper");

What am I missing ?

State of endpoints during streaming

I know this SDK is not focussing on RTMP anymore, but would you have any food for thought on how to get the status of the RTMp endpoint (like CONNECTED, DISCONNECTED...etc)

Typical use is when during streaming, internet snaps or connection to rtmp endpoint breaks, we can pause broadcasting and resume when the state changes back to CONNECTED

Trial Cancel

My username is 'justSomeAppLol'.

I need to cancel the trial, but there is no option within the console to do so.

The service is great, but I need to do more testing, and will not be launching app for some time.

Upstream: EOFException when performing request with NetHTTP

This ticket is a reminder for us to keep an eye on this upstream bug: http://code.google.com/p/google-api-java-client/issues/detail?id=869&sort=-id&colspec=Milestone%20Priority%20Component%20Type%20Summary%20ID%20Status%20Owner

When this is solved, we can update our google library and replace Apache with NetHTTP to be more modern.

This is not a critical bug, as replacing NetHTTP with Apache in the meantime is a simple change which produces the desired result.

Audio + video lightly out of sync (?) and variable fps

I analysed a recorded (with AVRecorder and AndroidMuxer) mp4 file in VirtualDub and it seems that:

  1. The Audio and Video are slightly out of sync. By some milliseconds usually.
  2. The framerate of the recorded video varies from around 10fps to 120 fps in some parts. This isn't a huge problem per say but it does make the video quite "jerky" some times.
  3. On some video players in android it could play the file. Not sure why or if it's related though.

Both these issues seem probably related to how the timestamps are handled in MicrophoneEncoder and CameraEncoder and later passed to and changed again in AndroidMuxer?

In an effort to fix this and make the video/audio smooth and synced I have two questions.

  1. How is the presentation time in each (audio/video) created and considered? Is it just added per write of buffer to file based on the initial mStartTimeNS of each? How is synchronization achieved? Would it maybe be better to pass the presentationTime of both audio and video to the Muxer un-altered and somehow sync it there with something common between them?

  2. What is the getSafePts method in Muxer.java doing exactly?

I seem to get a bit lost with these.

also
3) SideQuestion. I noticed the muxer is created and started as soon as the camera/microphone threads start and their tracks are added to the muxer. This is convenient but it does create a separate mp4 file each time the AVRecorder is started even if nothing is recorded in the meantime. Also I suspect it might be related to some of the crashes in some devices I experience. Is there some limitation from android or can I create and start the Muxer only when the recording stops?

Sorry for the huge post. Keep up the good work. :)

No such property: versionInt when importing sdk in Android Studio 1.0.1 (Mac)

I'm getting an error when I import the Kickflip SDK into my project in Android Studio as a module.

The error occurs when I attempt to import the SDK as a module
Here is the error:

Error:(3, 0) No such property: versionInt for class: org.gradle.api.internal.project.DefaultProject_Decorated

Possible solutions: version

Information about my build.gradle:

apply plugin: 'com.android.application'
android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"
    defaultConfig {
        applicationId "com.example.lgorse.androidhive_test"
        minSdkVersion 18
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug{
            debuggable true
        }
    }
}
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile project(':libstreaming')
    compile 'io.kickflip:sdk:1.1.1'

and here is the gradle build for the Kickflip SDK:

apply plugin: 'android-library'
versionInt=8
versionName="1.1.1"
android {
    compileSdkVersion 19
    buildToolsVersion "20.0"
    defaultConfig {
        minSdkVersion 18
        targetSdkVersion 19
        versionCode versionInt
        versionName versionName
    }
    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
}
configurations {
    jaxDoclet
    classpaths
}

dependencies {
    compile 'com.google.guava:guava:16.0'
    compile 'com.android.support:support-v4:19.+'
    // aws-sdk-android
    compile files('libs/aws-android-sdk-1.7.0-core.jar')
    compile files('libs/aws-android-sdk-1.7.0-s3.jar')
    // google-oauth-java-client
    compile files('libs/google-http-client-1.17.0-rc.jar')
    compile files('libs/google-http-client-android-1.17.0-rc.jar')
    compile files('libs/google-http-client-jackson2-1.17.0-rc.jar')
    compile files('libs/google-oauth-client-1.17.0-rc.jar')
    compile files('libs/gson-2.1.jar')
    compile files('libs/jsr305-1.3.9.jar')
    compile files('libs/protobuf-java-2.4.1.jar')
    // fulfilled by aws-android-sdk:
    //compile files('libs/jackson-core-2.1.3.jar')
    //compile files('libs/jackson-core-asl-1.9.11.jar')
    // m3u8 parser
    compile files('libs/m3u8parser-0.2.jar')
    // For Doclava JavaDoc
    jaxDoclet("com.google.doclava:doclava:1.0.5")
    //classpaths files('build/classes/release')
    classpaths fileTree(dir: 'build/classes/release').matching { include 'io/kickflip/sdk/Kickflip.java' }
    classpaths files(new File(System.getenv('ANDROID_HOME') + '/platforms/android-19/android.jar'))
}
// Maven publish task
// Uncomment this line to enable publishing to Maven Central. Requires maven
// credentials in gradle.properties
//apply from: 'https://raw.github.com/OnlyInAmerica/mvn-repo/master/maven.gradle'
// Generate JavaDoc
android.libraryVariants.all { variant ->
    task("generate${variant.name}Javadoc", type: Javadoc) {
        source = android.sourceSets.main.java
        title = null
        options.docletpath = configurations.jaxDoclet.files.asType(List)
        options.classpath = configurations.classpaths.files.asType(List)
        options {
            doclet "com.google.doclava.Doclava"
            bootClasspath new File(System.getenv('JAVA_HOME') + "/jre/lib/rt.jar")
            addStringOption "warning", '110'  // Allow undocumented types
            addStringOption "overview", "/Users/davidbrodsky/Code/android/kickflip-android-example/submodules/kickflip-android-sdk/sdk/src/javadoc-overview.html"
            addStringOption "public"
            addStringOption "hdf project.name", "Kickflip Android SDK"
            addStringOption "federate android", "http://d.android.com/reference"
            addStringOption "federationxml android", "http://doclava.googlecode.com/svn/static/api/android-10.xml"
        }
    }
}

Error when get streams

I'm used bellow code to get all streams, but got message: A Kickflip server error occurre.
I still can login user/ start srteam but I can't get streams.
Please help me

    KickflipApiClient apiClient = Kickflip.getApiClient(this);
    apiClient.getStreamsByKeyword(null, 0, 100, new KickflipCallback() {
        @Override
        public void onSuccess(Response response) {

            mStreams = (List<Stream>) response;

            LogUtil.e("onSuccess", mStreams.size() + "adf");
            LogUtil.e("onSuccess", mStreams.toString());
        }

        @Override
        public void onError(KickflipException e) {
            LogUtil.e("onError", e.getMessage());
        }
    });

Need loibffmpeg.so

The existing kickflip sdk is not allowing recording past 35mins

Hello guys, I made the modifications according to this message
#35 (comment)

But I am not able to create a .so file, can some one upload one. Thanks in advance.

What technologies are used in kickflip?

Can someone let me know what are the technologies used in kickflip. I believe it uses a client(android/ios) to build, upload m3u8 and ts files to the regional s3 bucket, which is then distributed via a Global cloud-based Content Distribution Network. Is there something else that i have missed ??

How to reduce number of items in index.m3u8

I am not able to figure out how to reduce the number of items in index.m3u8 to 3. Currently 5 items are listed and it adds to the lag,

I cannot find the code which creates, updates the index.m3u8. Also, is there a way for the player to start playing from the last .ts file in the m3u8?

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.