Giter VIP home page Giter VIP logo

livestream's Introduction

流媒体

AndroidPublisher

一个Android工程。负责将采集到的音视频数据推送到流媒体服务器。目前音频使用MediaCodec编码为AAC,视频使用MediaCodec编码为AVC,使用RTMP协议推送。 服务端可以使用SRS。播放可以使用VLC播放器进行播放。

目前适配的视频原始格式为:YUV420P。

AndroidPlayer

暂不维护了

livestream's People

Contributors

blueberrycoder 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

livestream's Issues

问一下,第二次再推流的时候就没反应了

我用的是推流端的示例代码,再第二次点击开始按钮的时候接收端就接收不到推流了,能麻烦看下是什么问题吗,谢谢。
就是调用了stop()方法之后再调用start()方法就推流不上去了,程序没有报错。

问一下

楼主AndroidPublisher里面的那个rtmp/lib/armeabi/librtmp.so这个so库是怎么得到的呢?是别人写好的,还是自己写的?有源码文件吗?能编译出来arm64-v8a,x86_64这样的适配so库吗

so库找不到问题

我的报错信息如下,PathClassLoader[DexPathList[[zip file "/data/local/tmp/scrcpy-server.jar"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libpublish.so"
请问大神,是不是需要我自己编译so库导入,但是我编译librtmp库后,还是报错。我的运行方式是:IDEA+MUMU模拟器+android,然后使用app_process命令来执行jar包的

编译报错

as version: 3.2
ndk version :r10e
报错信息:
Cause: executing external native build for cmake /Users/wangjunjie/AndroidStudioProjects/LiveStream/AndroidPublisher/rtmplive/src/main/cpp/CMakeLists.txt

有没有64位的so库

rtmp推流的两个so库只有默认的32位,64位的好像没有。因为项目里已经有其他64位so库了,所以app默认会加载64位的,这个32位的load不了

华为荣耀8闪退,华为P7 我的数据流 推送不到服务器上去

下面是荣耀8报的异常:
06-17 16:30:53.717 613-613/? I/CameraService: CameraService::connect E (pid 10667 "com.blueberry.sample", id 0)
06-17 16:30:53.717 613-613/? I/CameraService: CameraService::connect call (PID -1 "com.blueberry.sample", camera ID 0) for HAL version default and Camera API version 1
06-17 16:30:53.718 613-613/? W/ServiceManager: Permission failure: android.permission.CAMERA from uid=10208 pid=10667
06-17 16:30:53.718 613-613/? E/CameraService: Permission Denial: can't use the camera pid=10667, uid=10208
06-17 16:30:53.718 10667-10667/com.blueberry.sample W/CameraBase: An error occurred while connecting to camera 0: Service not available
06-17 16:30:53.718 10667-10667/com.blueberry.sample E/Camera: Camera new cameraInitNormal:-13
06-17 16:30:53.718 10667-10667/com.blueberry.sample W/System.err: java.lang.RuntimeException: Fail to connect to camera service
06-17 16:30:53.718 10667-10667/com.blueberry.sample W/System.err: at android.hardware.Camera.(Camera.java:571)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.hardware.Camera.open(Camera.java:430)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at com.blueberry.media.VideoGatherer.openCamera(VideoGatherer.java:286)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at com.blueberry.media.VideoGatherer.initCamera(VideoGatherer.java:89)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at com.blueberry.media.MediaPublisher.initVideoGatherer(MediaPublisher.java:101)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at com.blueberry.sample.MainActivity.onResume(MainActivity.java:84)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1279)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.app.Activity.performResume(Activity.java:7017)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3561)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3626)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2876)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.app.ActivityThread.-wrap12(ActivityThread.java)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.os.Handler.dispatchMessage(Handler.java:105)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.os.Looper.loop(Looper.java:156)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6531)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at java.lang.reflect.Method.invoke(Native Method)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
06-17 16:30:53.719 10667-10667/com.blueberry.sample W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)

                                                              --------- beginning of crash

06-17 16:30:53.719 10667-10667/com.blueberry.sample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.blueberry.sample, PID: 10667
java.lang.RuntimeException: Unable to resume activity {com.blueberry.sample/com.blueberry.sample.MainActivity}: java.lang.RuntimeException: 打开摄像头失败
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3586)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3626)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2876)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6531)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)
Caused by: java.lang.RuntimeException: 打开摄像头失败
at com.blueberry.media.VideoGatherer.openCamera(VideoGatherer.java:289)
at com.blueberry.media.VideoGatherer.initCamera(VideoGatherer.java:89)
at com.blueberry.media.MediaPublisher.initVideoGatherer(MediaPublisher.java:101)
at com.blueberry.sample.MainActivity.onResume(MainActivity.java:84)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1279)
at android.app.Activity.performResume(Activity.java:7017)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3561)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3626) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2876) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:156) 
at android.app.ActivityThread.main(ActivityThread.java:6531) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831) 
Caused by: java.lang.RuntimeException: Fail to connect to camera service
at android.hardware.Camera.(Camera.java:571)
at android.hardware.Camera.open(Camera.java:430)
at com.blueberry.media.VideoGatherer.openCamera(VideoGatherer.java:286)
at com.blueberry.media.VideoGatherer.initCamera(VideoGatherer.java:89) 
at com.blueberry.media.MediaPublisher.initVideoGatherer(MediaPublisher.java:101) 
at com.blueberry.sample.MainActivity.onResume(MainActivity.java:84) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1279) 
at android.app.Activity.performResume(Activity.java:7017) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3561) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3626) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2876) 
at android.app.ActivityThread.-wrap12(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:156) 
at android.app.ActivityThread.main(ActivityThread.java:6531) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831) 

CMake Error: Could not create named generator Android Gradle - Ninja

Build command failed.

Error while executing process C:\Users\shunyi\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\cmake.exe with arguments {-HE:\Projects\LiveStream\AndroidPublisher\rtmplive\src\main\cpp -BE:\Projects\LiveStream\AndroidPublisher\rtmplive.externalNativeBuild\cmake\release\armeabi -GAndroid Gradle - Ninja -DANDROID_ABI=armeabi -DANDROID_NDK=C:\Users\shunyi\AppData\Local\Android\Sdk\ndk-bundle -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=E:\Projects\LiveStream\AndroidPublisher\rtmplive\build\intermediates\cmake\release\obj\armeabi -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM=C:\Users\shunyi\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\ninja.exe -DCMAKE_TOOLCHAIN_FILE=C:\Users\shunyi\AppData\Local\Android\Sdk\ndk-bundle\build\cmake\android.toolchain.cmake -DANDROID_PLATFORM=android-16 -DCMAKE_CXX_FLAGS=-frtti -fexceptions}

CMake Error: Could not create named generator Android Gradle - Ninja

Generators

Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.

                             Optional [arch] can be "Win64" or "ARM".

Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.

Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.

Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.

Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files.

                             Optional [arch] can be "Win64" or "IA64".

Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files.

Visual Studio 8 2005 [arch] = Deprecated. Generates Visual Studio 2005

                             project files.  Optional [arch] can be


                             "Win64".

Borland Makefiles = Generates Borland makefiles.

NMake Makefiles = Generates NMake makefiles.

NMake Makefiles JOM = Generates JOM makefiles.

Green Hills MULTI = Generates Green Hills MULTI files

                             (experimental, work-in-progress).

MSYS Makefiles = Generates MSYS makefiles.

MinGW Makefiles = Generates a make file for use with

                             mingw32-make.

Unix Makefiles = Generates standard UNIX makefiles.

Ninja = Generates build.ninja files.

Watcom WMake = Generates Watcom WMake makefiles.

CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files.

CodeBlocks - NMake Makefiles = Generates CodeBlocks project files.

CodeBlocks - NMake Makefiles JOM

                           = Generates CodeBlocks project files.

CodeBlocks - Ninja = Generates CodeBlocks project files.

CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.

CodeLite - MinGW Makefiles = Generates CodeLite project files.

CodeLite - NMake Makefiles = Generates CodeLite project files.

CodeLite - Ninja = Generates CodeLite project files.

CodeLite - Unix Makefiles = Generates CodeLite project files.

Sublime Text 2 - MinGW Makefiles

                           = Generates Sublime Text 2 project files.

Sublime Text 2 - NMake Makefiles

Sublime Text 2 - Ninja = Generates Sublime Text 2 project files.

Sublime Text 2 - Unix Makefiles

Kate - MinGW Makefiles = Generates Kate project files.

Kate - NMake Makefiles = Generates Kate project files.

Kate - Ninja = Generates Kate project files.

Kate - Unix Makefiles = Generates Kate project files.

Eclipse CDT4 - NMake Makefiles

                           = Generates Eclipse CDT 4.0 project files.

Eclipse CDT4 - MinGW Makefiles

Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files.

Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.

Build command failed.

Error while executing process C:\Users\shunyi\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\cmake.exe with arguments {-HE:\Projects\LiveStream\AndroidPublisher\rtmplive\src\main\cpp -BE:\Projects\LiveStream\AndroidPublisher\rtmplive.externalNativeBuild\cmake\debug\armeabi -GAndroid Gradle - Ninja -DANDROID_ABI=armeabi -DANDROID_NDK=C:\Users\shunyi\AppData\Local\Android\Sdk\ndk-bundle -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=E:\Projects\LiveStream\AndroidPublisher\rtmplive\build\intermediates\cmake\debug\obj\armeabi -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=C:\Users\shunyi\AppData\Local\Android\Sdk\cmake\3.10.2.4988404\bin\ninja.exe -DCMAKE_TOOLCHAIN_FILE=C:\Users\shunyi\AppData\Local\Android\Sdk\ndk-bundle\build\cmake\android.toolchain.cmake -DANDROID_PLATFORM=android-16 -DCMAKE_CXX_FLAGS=-frtti -fexceptions}

CMake Error: Could not create named generator Android Gradle - Ninja

Generators

Visual Studio 15 2017 [arch] = Generates Visual Studio 2017 project files.

                             Optional [arch] can be "Win64" or "ARM".

Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project files.

Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project files.

Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project files.

Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project files.

                             Optional [arch] can be "Win64" or "IA64".

Visual Studio 9 2008 [arch] = Generates Visual Studio 2008 project files.

Visual Studio 8 2005 [arch] = Deprecated. Generates Visual Studio 2005

                             project files.  Optional [arch] can be


                             "Win64".

Borland Makefiles = Generates Borland makefiles.

NMake Makefiles = Generates NMake makefiles.

NMake Makefiles JOM = Generates JOM makefiles.

Green Hills MULTI = Generates Green Hills MULTI files

                             (experimental, work-in-progress).

MSYS Makefiles = Generates MSYS makefiles.

MinGW Makefiles = Generates a make file for use with

                             mingw32-make.

Unix Makefiles = Generates standard UNIX makefiles.

Ninja = Generates build.ninja files.

Watcom WMake = Generates Watcom WMake makefiles.

CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files.

CodeBlocks - NMake Makefiles = Generates CodeBlocks project files.

CodeBlocks - NMake Makefiles JOM

                           = Generates CodeBlocks project files.

CodeBlocks - Ninja = Generates CodeBlocks project files.

CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.

CodeLite - MinGW Makefiles = Generates CodeLite project files.

CodeLite - NMake Makefiles = Generates CodeLite project files.

CodeLite - Ninja = Generates CodeLite project files.

CodeLite - Unix Makefiles = Generates CodeLite project files.

Sublime Text 2 - MinGW Makefiles

                           = Generates Sublime Text 2 project files.

Sublime Text 2 - NMake Makefiles

Sublime Text 2 - Ninja = Generates Sublime Text 2 project files.

Sublime Text 2 - Unix Makefiles

Kate - MinGW Makefiles = Generates Kate project files.

Kate - NMake Makefiles = Generates Kate project files.

Kate - Ninja = Generates Kate project files.

Kate - Unix Makefiles = Generates Kate project files.

Eclipse CDT4 - NMake Makefiles

                           = Generates Eclipse CDT 4.0 project files.

Eclipse CDT4 - MinGW Makefiles

Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files.

Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.

大神 帮忙看下 是什么问题引起的 非常感谢

10-20 18:54:45.287 1960-2564/com.blueberry.player E/IJKMEDIA: Cannot open connection tcp://192.168.155.1:1935
10-20 18:54:45.287 1960-2564/com.blueberry.player E/IJKMEDIA: rtmp://192.168.155.1:1935/live/test: Connection timed out
10-20 18:54:45.287 1960-2564/com.blueberry.player I/IJKMEDIA: SDL_JNI_DetachThreadEnv: [2564]
10-20 18:54:45.287 1960-2562/com.blueberry.player D/IJKMEDIA: FFP_MSG_ERROR: 0
10-20 18:54:45.297 1960-1960/com.blueberry.player E/tv.danmaku.ijk.media.player.IjkMediaPlayer: Error (-10000,0)
10-20 18:54:45.297 1960-1960/com.blueberry.player D/IjkVideoView: Error: -10000,0
10-20 18:54:45.307 1960-1960/com.blueberry.player I/AppCompatDelegate: The Activity's LayoutInflater already has a Factory installed so we can not install AppCompat's

点击开始之后 点击结束就会报错

具体错误如下
FATAL EXCEPTION: Thread-5
Process: ai.cloudbrain.windmill, PID: 17109
java.lang.IllegalStateException
at android.media.MediaCodec.native_dequeueInputBuffer(Native Method)
at android.media.MediaCodec.dequeueInputBuffer(MediaCodec.java:2507)
at com.blueberry.media.MediaEncoder.encodeAudioData(MediaEncoder.java:290)
at com.blueberry.media.MediaEncoder.access$800(MediaEncoder.java:28)
at com.blueberry.media.MediaEncoder$2.run(MediaEncoder.java:180)

width应该如何设置

mMediaPublisher = MediaPublisher
                .newInstance(new Config.Builder()
                        .setFps(30) // fps
                        .setMaxWidth(720) //视频的最大宽度
                        .setMinWidth(320) //视频的最小宽度
                        .setUrl("rtmp://192.168.155.1:1935/live/test")//推送的url
                        .build());

这里的MaxWidth和MinWidth应该以什么原则来设置?
(我尝试调了比较大的数值,直接崩溃了)

另外高度是根据宽度自动设置了么?

能开源更新下sdk里c++代码吗

你好,你开源的c++的代码是不是和提供的sdk里的不一样,gradle配置sdk里可以正常推流到服务器,配置为代码编译,不用jcenter就不能推流到服务器。能开源更新下sdk里c++代码吗

publisher在小米2S上闪退在华为P8上只能推送一帧

直接把下载的源码编译运行

小米2S报错如下

java.lang.RuntimeException: Unable to resume activity {com.blueberry.sample/com.blueberry.sample.MainActivity}: java.lang.RuntimeException: setParameters failed
	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2966)
	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2997)
	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2380)
	at android.app.ActivityThread.access$900(ActivityThread.java:147)
	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283)
	at android.os.Handler.dispatchMessage(Handler.java:102)
	at android.os.Looper.loop(Looper.java:135)
	at android.app.ActivityThread.main(ActivityThread.java:5254)
	at java.lang.reflect.Method.invoke(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:372)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:910)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:705)
Caused by: java.lang.RuntimeException: setParameters failed
	at android.hardware.Camera.native_setParameters(Native Method)
	at android.hardware.Camera.setParameters(Camera.java:1979)
	at com.blueberry.media.VideoGatherer.setCameraParameters(VideoGatherer.java:247)
	at com.blueberry.media.VideoGatherer.initCamera(VideoGatherer.java:90)
	at com.blueberry.media.MediaPublisher.initVideoGatherer(MediaPublisher.java:101)
	at com.blueberry.sample.MainActivity.onResume(MainActivity.java:84)
	at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1241)
	at android.app.Activity.performResume(Activity.java:6025)
	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2955)
	... 11 more

华为P8图像推送出去一帧图像,但是声音能正常推送

其他手机测试没问题

——————————————————————————
另外 Rtmp.cpp在build apk的时候,提示malloc未定义,需要手动补上malloc.h头文件

H264格式视频流推流

从camera采集的视频,通过gl渲染处理后用mediacodec编码后的h264视频视频流,只想利用mMediaPublisher.starPublish()推流,不利用mMediaPublisher的Gather,Encoder部分,在smaple的基础上改如何快速实现呢?谢谢

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.