Giter Club home page Giter Club logo

tsingsee / easyrtsplive Goto Github PK

View Code? Open in Web Editor NEW
196.0 24.0 88.0 109.55 MB

Streaming media middleware:RTSP to RTMP,拉流IPC摄像机或者NVR硬盘录像机RTSP流转成RTMP推送到阿里云CDN/腾讯云CDN/RTMP流媒体服务器,支持多路RTSP流同时拉取并以RTMP协议推送发布,EasyRTSPLive我们支持任何平台,包括但不限于Windows/Linux/Android/ARM

Home Page: http://open.tsingsee.com/middleware/easyrtsplive/

Shell 1.76% C 36.34% C++ 30.93% Makefile 30.60% NASL 0.37%
rtsp rtmp rtsp-rtmp rtsp2rtmp

easyrtsplive's Issues

编译失败

请问这种要怎么处理

"make"  -f nbproject/Makefile-x64.mk x64/EasyRTSPLive
make[1]: Entering directory `/data/wwwroot/EasyRTSPLive/EasyRTSPLive'
mkdir -p build/x64/GNU-Linux
rm -f "build/x64/GNU-Linux/ini.o.d"
g++    -c -O2 -I../../Include -I../../EasyAACEncoder/Include -I../../EasyRTMP/Include -I../../EasyRTSPClient/Include -MMD -MP -MF "build/x64/GNU-Linux/ini.o.d" -o build/x64/GNU-Linux/ini.o ini.cpp
ini.cpp:69:31: warning: unknown escape sequence: '\/' [enabled by default]
                     else if ( '\/' == szLine[0] && '\/' == szLine[1] )  
                               ^
ini.cpp:69:52: warning: unknown escape sequence: '\/' [enabled by default]
                     else if ( '\/' == szLine[0] && '\/' == szLine[1] )  
                                                    ^
ini.cpp: In function ‘char* GetIniKeyString(char*, char*, char*)’:
ini.cpp:39:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
         return "";   
                ^
ini.cpp:100:12: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
     return "";   
            ^
mkdir -p build/x64/GNU-Linux
rm -f "build/x64/GNU-Linux/main.o.d"
g++    -c -O2 -I../../Include -I../../EasyAACEncoder/Include -I../../EasyRTMP/Include -I../../EasyRTSPClient/Include -MMD -MP -MF "build/x64/GNU-Linux/main.o.d" -o build/x64/GNU-Linux/main.o main.cpp
main.cpp: In function ‘bool InitCfgInfo()’:
main.cpp:320:121: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    strcpy(pChannelInfo->fCfgInfo.srcRtspAddr, GetIniKeyString(pChannelInfo->fCfgInfo.channelName, "rtsp", CONF_FILE_PATH));
                                                                                                                         ^
main.cpp:320:121: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp:321:122: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    strcpy(pChannelInfo->fCfgInfo.destRtmpAddr, GetIniKeyString(pChannelInfo->fCfgInfo.channelName, "rtmp", CONF_FILE_PATH));
                                                                                                                          ^
main.cpp:321:122: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp:322:109: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
    pChannelInfo->fCfgInfo.option = GetIniKeyInt(pChannelInfo->fCfgInfo.channelName, "option", CONF_FILE_PATH);
                                                                                                             ^
main.cpp:322:109: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp: In function ‘int main(int, char**)’:
main.cpp:393:35: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
  iret = EasyRTMP_Activate(RTMP_KEY);
                                   ^
main.cpp:409:35: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
  iret = EasyRTSP_Activate(RTSP_KEY);
                                   ^
mkdir -p build/x64/GNU-Linux
rm -f "build/x64/GNU-Linux/trace.o.d"
g++    -c -O2 -I../../Include -I../../EasyAACEncoder/Include -I../../EasyRTMP/Include -I../../EasyRTSPClient/Include -MMD -MP -MF "build/x64/GNU-Linux/trace.o.d" -o build/x64/GNU-Linux/trace.o trace.cpp
mkdir -p x64
g++     -o x64/EasyRTSPLive build/x64/GNU-Linux/ini.o build/x64/GNU-Linux/main.o build/x64/GNU-Linux/trace.o -L../../easyrtmp/Lib/x64 -L../../EasyRTSPClient/Lib/x64 -L../../EasyAACEncoder/Lib/x64 -pthread -lrt -leasyrtmp -leasyrtspclient -leasyaacencoder
/usr/bin/ld: cannot find -leasyrtmp
collect2: error: ld returned 1 exit status
make[1]: *** [x64/EasyRTSPLive] Error 1
make[1]: Leaving directory `/data/wwwroot/EasyRTSPLive/EasyRTSPLive'
make: *** [.build-conf] Error 2

日志目录问题

现在运行后,每个渠道都会生成一个日志文件,而且还在当前目录,导致文件很乱。

编译后提示找不到依赖库

(base) root@zs-B365-M-AORUS-ELITE:/EASYPLAY/EasyRTSPLive# ./Buildit clean
rm -f -r build/x86
rm -f -r build/x64
(base) root@zs-B365-M-AORUS-ELITE:
/EASYPLAY/EasyRTSPLive# ./Buildit x64
"make" -f nbproject/Makefile-x64.mk x64/EasyRTSPLive
make[1]: Entering directory '/home/zs/EASYPLAY/EasyRTSPLive/EasyRTSPLive'
mkdir -p build/x64/GNU-Linux
rm -f "build/x64/GNU-Linux/ini.o.d"
g++ -c -O2 -I../../Include -I../../EasyAACEncoder/Include -I../../EasyRTMP/Include -I../../EasyRTSPClient/Include -MMD -MP -MF "build/x64/GNU-Linux/ini.o.d" -o build/x64/GNU-Linux/ini.o ini.cpp
ini.cpp:69:31: warning: unknown escape sequence: '/'
else if ( '/' == szLine[0] && '/' == szLine[1] )
^
ini.cpp:69:52: warning: unknown escape sequence: '/'
else if ( '/' == szLine[0] && '/' == szLine[1] )
^
ini.cpp: In function ‘char* GetIniKeyString(char*, char*, char*)’:
ini.cpp:39:16: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
return "";
^
ini.cpp:100:12: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
return "";
^
mkdir -p build/x64/GNU-Linux
rm -f "build/x64/GNU-Linux/main.o.d"
g++ -c -O2 -I../../Include -I../../EasyAACEncoder/Include -I../../EasyRTMP/Include -I../../EasyRTSPClient/Include -MMD -MP -MF "build/x64/GNU-Linux/main.o.d" -o build/x64/GNU-Linux/main.o main.cpp
main.cpp: In function ‘bool InitCfgInfo()’:
main.cpp:320:121: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
strcpy(pChannelInfo->fCfgInfo.srcRtspAddr, GetIniKeyString(pChannelInfo->fCfgInfo.channelName, "rtsp", CONF_FILE_PATH));
^
main.cpp:320:121: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp:321:122: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
strcpy(pChannelInfo->fCfgInfo.destRtmpAddr, GetIniKeyString(pChannelInfo->fCfgInfo.channelName, "rtmp", CONF_FILE_PATH));
^
main.cpp:321:122: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp:322:109: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
pChannelInfo->fCfgInfo.option = GetIniKeyInt(pChannelInfo->fCfgInfo.channelName, "option", CONF_FILE_PATH);
^
main.cpp:322:109: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
main.cpp: In function ‘int main(int, char**)’:
main.cpp:393:35: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
iret = EasyRTMP_Activate(RTMP_KEY);
^
main.cpp:409:35: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
iret = EasyRTSP_Activate(RTSP_KEY);
^
mkdir -p build/x64/GNU-Linux
rm -f "build/x64/GNU-Linux/trace.o.d"
g++ -c -O2 -I../../Include -I../../EasyAACEncoder/Include -I../../EasyRTMP/Include -I../../EasyRTSPClient/Include -MMD -MP -MF "build/x64/GNU-Linux/trace.o.d" -o build/x64/GNU-Linux/trace.o trace.cpp
trace.cpp: In function ‘void TRACE(char*, ...)’:
trace.cpp:48:13: warning: format not a string literal and no format arguments [-Wformat-security]
printf(buff);
^
mkdir -p x64
g++ -o x64/EasyRTSPLive build/x64/GNU-Linux/ini.o build/x64/GNU-Linux/main.o build/x64/GNU-Linux/trace.o -L../../EasyRTMP/Lib/x64 -L../../EasyRTSPClient/Lib/x64 -L../../EasyAACEncoder/Lib/x64 -pthread -lrt -leasyrtmp -leasyrtspclient -leasyaacencoder
make[1]: Leaving directory '/home/zs/EASYPLAY/EasyRTSPLive/EasyRTSPLive'
(base) root@zs-B365-M-AORUS-ELITE:/EASYPLAY/EasyRTSPLive# ls
Bin Buildit EasyRTSPLive EasyRTSPLive.sln README.md
(base) root@zs-B365-M-AORUS-ELITE:
/EASYPLAY/EasyRTSPLive# cd EasyRTSPLive/
(base) root@zs-B365-M-AORUS-ELITE:/EASYPLAY/EasyRTSPLive/EasyRTSPLive# ls
build EasyRTSPLive.filters easyrtsplive.ini EasyRTSPLive.vcxproj EasyRTSPLive.vcxproj.user getopt.c getopt.h ini.cpp ini.h main.cpp Makefile nbproject trace.cpp trace.h unistd.h x64
(base) root@zs-B365-M-AORUS-ELITE:
/EASYPLAY/EasyRTSPLive/EasyRTSPLive# cd ..
(base) root@zs-B365-M-AORUS-ELITE:/EASYPLAY/EasyRTSPLive# ls
Bin Buildit EasyRTSPLive EasyRTSPLive.sln README.md
(base) root@zs-B365-M-AORUS-ELITE:
/EASYPLAY/EasyRTSPLive# cd EasyRTSPLive/
(base) root@zs-B365-M-AORUS-ELITE:/EASYPLAY/EasyRTSPLive/EasyRTSPLive# ls
build EasyRTSPLive.filters easyrtsplive.ini EasyRTSPLive.vcxproj EasyRTSPLive.vcxproj.user getopt.c getopt.h ini.cpp ini.h main.cpp Makefile nbproject trace.cpp trace.h unistd.h x64
(base) root@zs-B365-M-AORUS-ELITE:
/EASYPLAY/EasyRTSPLive/EasyRTSPLive# cd x64/
(base) root@zs-B365-M-AORUS-ELITE:/EASYPLAY/EasyRTSPLive/EasyRTSPLive/x64# ls
EasyRTSPLive easyrtsplive.ini
(base) root@zs-B365-M-AORUS-ELITE:
/EASYPLAY/EasyRTSPLive/EasyRTSPLive/x64# ./EasyRTSPLive
./EasyRTSPLive: error while loading shared libraries: libeasyrtmp.so: cannot open shared object file: No such file or directory
(base) root@zs-B365-M-AORUS-ELITE:~/EASYPLAY/EasyRTSPLive/EasyRTSPLive/x64#

关于EasyRTSPLive编译的过程中发现的小问题

在我编译的过程中,根据README的提示放置了所需依赖项目后,并不能进行成功编译,后发现Makefile-x64.mk文件中所依赖的文件夹并不是EasyRTMP而是小写的easyrtmp,修改后编译成功,建议修改Makefile-x64.mk中的代码或README,这样更利于初学者编译这个开源项目

代码更新之后main.cpp文件编译存在问题

最新的代码编译之后出现大量下述的错误:
分割线
main.cpp:1:1: 错误:程序中有游离的‘\252’
main.cpp:1:1: 错误:程序中有游离的‘\374’
main.cpp:1:1: 错误:程序中有游离的‘\1’
main.cpp:1:1: 错误:程序中有游离的‘\252’
main.cpp:1:1: 错误:程序中有游离的‘\274’
main.cpp:1:1: 错误:程序中有游离的‘\304’
main.cpp:1:1: 错误:程序中有游离的‘\220’
main.cpp:1:1: 错误:程序中有游离的‘\335’
main.cpp:1:1: 错误:程序中有游离的‘\300’
main.cpp:1:1: 错误:程序中有游离的‘\265’
main.cpp:1:1: 错误:程序中有游离的‘\37’
main.cpp:1:1: 错误:程序中有游离的‘\207’
main.cpp:2:1: 错误:程序中有游离的‘\301’
main.cpp:2:1: 错误:程序中有游离的‘\262’
main.cpp:2:1: 错误:程序中有游离的‘\300’
main.cpp:2:1: 错误:程序中有游离的‘\221’
main.cpp:2:1: 错误:程序中有游离的‘\300’
main.cpp:2:1: 错误:程序中有游离的‘\37’
main.cpp:2:1: 错误:程序中有游离的‘\307’
main.cpp:2:1: 错误:程序中有游离的‘\244’
main.cpp:2:1: 错误:程序中有游离的‘\200’
main.cpp:2:1: 错误:程序中有游离的‘\236’
main.cpp:2:1: 错误:程序中有游离的‘\177’
main.cpp:2:1: 错误:程序中有游离的‘\370’
main.cpp:2:1: 错误:程序中有游离的‘\10’
main.cpp:2:1: 错误:程序中有游离的‘\2’
main.cpp:2:1: 错误:程序中有游离的‘\362’
main.cpp:2:1: 错误:程序中有游离的‘\26’
main.cpp:2:1: 错误:程序中有游离的‘\22’
main.cpp:2:1: 错误:程序中有游离的‘\366’
main.cpp:2:1: 错误:程序中有游离的‘\10’
main.cpp:2:1: 错误:程序中有游离的‘\20’
main.cpp:2:1: 错误:程序中有游离的‘\236’
main.cpp:2:1: 错误:程序中有游离的‘\345’
main.cpp:2:1: 错误:程序中有游离的‘\347’
main.cpp:2:1: 错误:程序中有游离的‘\334’
main.cpp:2:1: 错误:程序中有游离的‘\331’
main.cpp:2:1: 错误:程序中有游离的‘\1’
main.cpp:2:1: 错误:程序中有游离的‘\31’
main.cpp:2:1: 错误:程序中有游离的‘\322’
main.cpp:2:1: 错误:程序中有游离的‘\346’
main.cpp:2:1: 错误:程序中有游离的‘\343’
main.cpp:2:1: 错误:程序中有游离的‘\305’
main.cpp:2:1: 错误:程序中有游离的‘\353’
main.cpp:2:1: 错误:程序中有游离的‘\354’
main.cpp:2:1: 错误:程序中有游离的‘\253’
main.cpp:2:1: 错误:程序中有游离的‘\243’
main.cpp:2:1: 错误:程序中有游离的‘\243’
main.cpp:2:1: 错误:程序中有游离的‘\20’
main.cpp:2:1: 错误:程序中有游离的‘\35’
main.cpp:2:1: 错误:程序中有游离的‘\213’
main.cpp:2:1: 错误:程序中有游离的‘\31’
main.cpp:2:1: 错误:程序中有游离的‘\350’
main.cpp:2:1: 错误:程序中有游离的‘\3’
main.cpp:2:1: 错误:程序中有游离的‘\310’
main.cpp:2:1: 错误:程序中有游离的‘\245’
main.cpp:2:1: 错误:程序中有游离的‘\306’
main.cpp:2:1: 错误:程序中有游离的‘\213’
main.cpp:2:1: 错误:程序中有游离的‘\300’
main.cpp:2:1: 错误:程序中有游离的‘\30’
main.cpp:2:1: 错误:程序中有游离的‘\304’
main.cpp:2:1: 错误:程序中有游离的‘\327’
main.cpp:2:1: 错误:程序中有游离的‘\244’
main.cpp:2:1: 错误:程序中有游离的‘\271’
main.cpp:2:1: 错误:程序中有游离的‘\226’
main.cpp:2:1: 错误:程序中有游离的‘\363’
main.cpp:2:1: 错误:程序中有游离的‘\262’
main.cpp:2:1: 错误:程序中有游离的‘\343’
main.cpp:2:1: 错误:程序中有游离的‘\337’
main.cpp:2:1: 错误:程序中有游离的‘\205’
main.cpp:2:1: 错误:程序中有游离的‘\177’
main.cpp:2:1: 错误:程序中有游离的‘\310’
main.cpp:2:1: 错误:程序中有游离的‘\22’
main.cpp:2:1: 错误:程序中有游离的‘\6’
main.cpp:2:1: 错误:程序中有游离的‘\17’
main.cpp:2:1: 错误:程序中有游离的‘\256’
main.cpp:2:1: 错误:程序中有游离的‘\225’
main.cpp:2:1: 错误:程序中有游离的‘\227’
main.cpp:2:1: 错误:程序中有游离的‘\237’
main.cpp:2:1: 错误:程序中有游离的‘\177’
main.cpp:2:1: 错误:程序中有游离的‘\323’
main.cpp:2:1: 错误:程序中有游离的‘\361’
main.cpp:2:1: 错误:程序中有游离的‘\250’
main.cpp:2:1: 错误:程序中有游离的‘\237’
main.cpp:2:1: 错误:程序中有游离的‘\241’
main.cpp:2:122: 警告:缺少结尾的 ' 字符 [默认启用]
main.cpp:2:1: 错误:缺少结尾的 ' 字符
main.cpp:3:1: 错误:程序中有游离的‘\373’
main.cpp:3:1: 错误:程序中有游离的‘\327’
main.cpp:3:1: 错误:程序中有游离的‘\317’
main.cpp:3:1: 错误:程序中有游离的‘\7’
main.cpp:3:1: 错误:程序中有游离的‘\303’
main.cpp:3:1: 错误:程序中有游离的‘\360’
main.cpp:3:1: 错误:程序中有游离的‘\224’
main.cpp:3:1: 错误:程序中有游离的‘\342’
main.cpp:3:11: 错误:程序中有游离的‘#’
main.cpp:3:1: 错误:程序中有游离的‘\262’
main.cpp:3:1: 错误:程序中有游离的‘\271’
main.cpp:3:1: 错误:程序中有游离的‘\325’
main.cpp:3:1: 错误:程序中有游离的‘\201’
main.cpp:3:1: 错误:程序中有游离的‘\334’
main.cpp:3:1: 错误:程序中有游离的‘\252’
main.cpp:3:1: 错误:程序中有游离的‘\332’
main.cpp:3:1: 错误:程序中有游离的‘\346’
main.cpp:3:1: 错误:程序中有游离的‘\324’
main.cpp:3:29: 警告:未知的转义序列:‘\013’ [默认启用]
main.cpp:3:29: 警告:未知的转义序列:‘\O’ [默认启用]
main.cpp:3:29: 警告:字符常量大小超出其类型 [默认启用]
main.cpp:3:1: 错误:程序中有游离的‘\356’
main.cpp:3:1: 错误:程序中有游离的‘\347’
main.cpp:3:1: 错误:程序中有游离的‘\273’
main.cpp:3:1: 错误:程序中有游离的‘\221’
main.cpp:3:1: 错误:程序中有游离的‘\375’
main.cpp:3:1: 错误:程序中有游离的‘\20’
main.cpp:3:1: 错误:程序中有游离的‘\3’
main.cpp:3:1: 错误:程序中有游离的‘\302’
main.cpp:3:1: 错误:程序中有游离的‘\324’
main.cpp:3:1: 错误:程序中有游离的‘\246’
main.cpp:3:1: 错误:程序中有游离的‘\307’
main.cpp:3:1: 错误:程序中有游离的‘\30’
main.cpp:3:1: 错误:程序中有游离的‘\305’
main.cpp:3:1: 错误:程序中有游离的‘\216’
main.cpp:3:1: 错误:程序中有游离的‘\370’
main.cpp:3:1: 错误:程序中有游离的‘\257’
main.cpp:3:1: 错误:程序中有游离的‘\266’
main.cpp:3:1: 错误:程序中有游离的‘\230’
main.cpp:3:1: 错误:程序中有游离的‘\336’
main.cpp:3:1: 错误:程序中有游离的‘\’
main.cpp:3:1: 错误:程序中有游离的‘\371’
main.cpp:3:1: 错误:程序中有游离的‘\240’
main.cpp:3:1: 错误:程序中有游离的‘\225’
main.cpp:3:1: 错误:程序中有游离的‘\266’
main.cpp:3:1: 错误:程序中有游离的‘\373’
main.cpp:3:1: 错误:程序中有游离的‘\366’
main.cpp:3:1: 错误:程序中有游离的‘\262’
main.cpp:3:1: 错误:程序中有游离的‘\257’
main.cpp:3:1: 错误:程序中有游离的‘\372’
main.cpp:3:1: 错误:程序中有游离的‘\226’
main.cpp:3:1: 错误:程序中有游离的‘\257’
main.cpp:3:150: 错误:程序中有游离的‘#’
main.cpp:3:1: 错误:程序中有游离的‘\241’
main.cpp:3:1: 错误:程序中有游离的‘\337’
main.cpp:3:1: 错误:程序中有游离的‘\357’
main.cpp:3:1: 错误:程序中有游离的‘\365’
main.cpp:3:1: 错误:程序中有游离的‘\335’
main.cpp:3:1: 错误:程序中有游离的‘\363’
main.cpp:3:1: 错误:程序中有游离的‘\204’
main.cpp:3:1: 错误:程序中有游离的‘\316’
main.cpp:3:1: 错误:程序中有游离的‘\301’
main.cpp:3:1: 错误:程序中有游离的‘\177’
main.cpp:3:1: 错误:程序中有游离的‘\272’
main.cpp:3:1: 错误:程序中有游离的‘\331’
main.cpp:3:1: 错误:程序中有游离的‘\23’
main.cpp:3:1: 错误:程序中有游离的‘\307’
main.cpp:3:1: 错误:程序中有游离的‘\240’
main.cpp:3:1: 错误:程序中有游离的‘\335’
main.cpp:3:1: 错误:程序中有游离的‘\222’
main.cpp:3:1: 错误:程序中有游离的‘\237’
main.cpp:3:1: 错误:程序中有游离的‘\30’
main.cpp:3:1: 错误:程序中有游离的‘\222’
main.cpp:3:1: 错误:程序中有游离的‘\342’
main.cpp:3:199: 警告:字符常量大小超出其类型 [默认启用]
main.cpp:3:1: 错误:程序中有游离的‘\250’
main.cpp:3:1: 错误:程序中有游离的‘\321
分割线
该问题应该是main.cpp中出现中文字符,但是代码更新之后,main.cpp文件变成了二进制文件,无法进行修改,导致编译存在问题。
如果用之前的版本,编译可以通过,但是在运行的时候会出现许可证过期的错误。
可以麻烦重新更新一下代码或者是提供一下新的许可证吗?
冒昧打扰,迫切希望得到您的回复!!!

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.