Code Monkey home page Code Monkey logo

go-oryx's Introduction

go-oryx

The oryx is a group of isolate processes:

  1. httpx-static HTTP/HTTPS static server with API proxy.

Winlin 2016.07.09

go-oryx's People

Contributors

akagi201 avatar winlinvip 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-oryx's Issues

ffmpeg推流成功,但vlc播放失败。

我conf/oryx.conf的配置如下:
{
"listen": 1935,
"log": {
"tank": "file",
"level":
"file": "oryx.log"
},
"vhosts": [
{
"name": "defaultVhost"
}
]
}

我ffmpeg推流命令如下:
ffmpeg -re -i Pulp.Fiction.1994.BluRay.1080p.DTSMA.x264-CHD.mkv -vcodec libx264 -preset veryfast -s 480x320 -maxrate 600k -bufsize 6000k -pix_fmt yuv420p -g 50 -acodec libmp3lame -b:a 128k -ac 2 -ar 44100 -f flv rtmp://127.0.0.1:1935/myapp/test

逻辑上,我的播放地址就应该是:rtmp://127.0.0.1:1935/myapp/test,当然,我把127.0.0.1这个改成了可以访问的192.168.0.80。
但我的VLC播放失败。oryx的日志如下:
[oryx][trace] 2016/03/14 13:15:02 [7705][102] rtmp accept 192.168.0.59:14514
[oryx][trace] 2016/03/14 13:15:02 [7705][102] complex handshake ok.
[oryx][trace] 2016/03/14 13:15:02 [7705][102] connect at rtmp://192.168.0.80:1935/myapp AMF0
[oryx][trace] 2016/03/14 13:15:02 [7705][102] output chunk size to 60000
[oryx][trace] 2016/03/14 13:15:02 [7705][102] client identified, type=unknown, stream_name=, duration=0.00
[oryx][trace] 2016/03/14 13:15:02 [7705][102] redirect vhost 192.168.0.80 to defaultVhost
[oryx][warn] 2016/03/14 13:15:02 [7705][102] close invalid unknown client
[oryx][warn] 2016/03/14 13:15:02 [7705][102] read basic header failed. err is read tcp 192.168.0.80:1935->192.168.0.59:14514: use of closed network connection
[oryx][warn] 2016/03/14 13:15:02 [7705][102] rtmp receiver terminated with read tcp 192.168.0.80:1935->192.168.0.59:14514: use of closed network connection
[oryx][trace] 2016/03/14 13:15:02 [7705][102] closed
[oryx][trace] 2016/03/14 13:15:19 [7705][103] rtmp accept 192.168.0.59:14518
[oryx][trace] 2016/03/14 13:15:19 [7705][103] complex handshake ok.
[oryx][trace] 2016/03/14 13:15:19 [7705][103] connect at rtmp://192.168.0.80:1935/myapp AMF0
[oryx][trace] 2016/03/14 13:15:19 [7705][103] output chunk size to 60000
[oryx][trace] 2016/03/14 13:15:19 [7705][103] client identified, type=unknown, stream_name=, duration=0.00
[oryx][trace] 2016/03/14 13:15:19 [7705][103] redirect vhost 192.168.0.80 to defaultVhost
[oryx][warn] 2016/03/14 13:15:19 [7705][103] close invalid unknown client
[oryx][warn] 2016/03/14 13:15:19 [7705][103] read basic header failed. err is read tcp 192.168.0.80:1935->192.168.0.59:14518: use of closed network connection
[oryx][warn] 2016/03/14 13:15:19 [7705][103] rtmp receiver terminated with read tcp 192.168.0.80:1935->192.168.0.59:14518: use of closed network connection
[oryx][trace] 2016/03/14 13:15:19 [7705][103] closed

请问何故?

Have you ever considered exporting the rtmp protocol as an independent golang library?

I dive into the protocol directory.

I found that the protocol sub-package only depends on core/utility.go and core.Context.

I think you can create a util sub-package and put core/utility.go and core.Context in it.

What do you think of it? Or I can do it myself, and make a PR.

Append...

The protocol sub package also depends on config.go and logger.go. It may be not easy to export the protocol package.

DASH: Support remux stream to MPEG-DASH

For origin: Publish stream to server, remux stream to MPEG-DASH.
For edge: Play MPEG-DASH, fetch stream from upstream, remux stream to MPEG-DASH.

The wiki: Not ready.

windows version: facing issue to get rtmp working

Hi,

i have compiled the latest code in windows and tried it with a stream coming from ffmpeg (feed from PI camera). im trying to play it from FMLE. default configuration

{
  "listen": 1935,
  "log": {
    "tank": "file",
    "level": "trace",
    "file": "oryx.log"
  },
  "vhosts": [
    {
      "name": "__defaultVhost__"
    }
  ]
}

command from Raspberry:

raspivid -fl -t 0 -w 640 -h 480 -b 1200000 -fps 15 -pf baseline -o - | ffmpeg -re -i - -vcodec copy -an -f flv -y rtmp://192.168.2.3/live/livestream

error

[oryx][warn] 2016/05/17 20:33:07 [1816][100] windows not support daemon.
[oryx][trace] 2016/05/17 20:33:07 [1816][100] Oryx/0.1.17(MonkeyKing) Copyright (c) 2013-2015 Oryx(ossrs)
[oryx][trace] 2016/05/17 20:33:07 [1816][100] The go-oryx is SRS++, focus on real-time live streaming cluster.
[oryx][trace] 2016/05/17 20:33:07 [1816][100] set gc percent from 100 to 100
[oryx][trace] 2016/05/17 20:33:07 [1816][100] rtmp listen at tcp://1935
[oryx][trace] 2016/05/17 20:33:07 [1816][100] init server ok, conf=src.json, log=file(trace/oryx.log), workers=0/8, gc=0/100%, daemon=true
[oryx][trace] 2016/05/17 20:33:07 [1816][100] apply workers 8 and previous is 8
[oryx][warn] 2016/05/17 20:33:07 [1816][100] windows does not support reload with signal.
[oryx][trace] 2016/05/17 20:33:07 [1816][100] match iface=Ethernet, ip=169.254.30.218, hwaddr=6c:f0:49:e0:f5:23, pub=Internet
[oryx][trace] 2016/05/17 20:33:07 [1816][100] match iface=Ethernet, ip=192.168.137.1, hwaddr=6c:f0:49:e0:f5:23, pub=Intranet
[oryx][trace] 2016/05/17 20:33:07 [1816][100] match iface=VirtualBox Host-Only Network, ip=192.168.56.1, hwaddr=0a:00:27:00:00:07, pub=Intranet
[oryx][trace] 2016/05/17 20:33:07 [1816][100] match iface=Ethernet 2, ip=192.168.2.3, hwaddr=6c:f0:49:e0:f5:33, pub=Intranet
[oryx][trace] 2016/05/17 20:33:07 [1816][100] local ip is [Ethernet/169.254.30.218/6c:f0:49:e0:f5:23/Internet Ethernet/192.168.137.1/6c:f0:49:e0:f5:23/Intranet VirtualBox Host-Only Network/192.168.56.1/0a:00:27:00:00:07/Intranet Ethernet 2/192.168.2.3/6c:f0:49:e0:f5:33/Intranet] exported Ethernet/169.254.30.218/6c:f0:49:e0:f5:23/Internet
[oryx][trace] 2016/05/17 20:33:21 [1816][101] rtmp accept 192.168.2.18:58328
[oryx][trace] 2016/05/17 20:33:21 [1816][101] complex handshake ok.
[oryx][trace] 2016/05/17 20:33:21 [1816][101] connect at rtmp://192.168.2.3:1935/live AMF0
[oryx][trace] 2016/05/17 20:33:21 [1816][101] output chunk size to 60000
[oryx][trace] 2016/05/17 20:33:21 [1816][101] input chunk size to 60000
[oryx][trace] 2016/05/17 20:33:21 [1816][101] client identified, type=fmle-publish, stream_name=livestream, duration=0.00
[oryx][trace] 2016/05/17 20:33:21 [1816][101] redirect vhost 192.168.2.3 to __defaultVhost__
[oryx][trace] 2016/05/17 20:33:21 [1816][101] fmle ignore AMF0/AMF3 command message.
[oryx][trace] 2016/05/17 20:33:21 [1816][101] cache metadta sh.
[oryx][trace] 2016/05/17 20:33:21 [1816][101] cache video sh.
[oryx][trace] 2016/05/17 20:33:24 [1816][102] rtmp accept [::1]:64292
[oryx][trace] 2016/05/17 20:33:24 [1816][102] rollback to simple handshake.
[oryx][trace] 2016/05/17 20:33:24 [1816][102] connect at rtmp://localhost/live AMF0
[oryx][trace] 2016/05/17 20:33:24 [1816][102] output chunk size to 60000
[oryx][error] 2016/05/17 20:33:29 [1816][102] timeout for 5s
[oryx][warn] 2016/05/17 20:33:29 [1816][102] read basic header failed. err is read tcp [::1]:1935->[::1]:64292: use of closed network connection
[oryx][warn] 2016/05/17 20:33:29 [1816][102] rtmp receiver terminated with read tcp [::1]:1935->[::1]:64292: use of closed network connection
[oryx][trace] 2016/05/17 20:33:29 [1816][102] closed
[oryx][trace] 2016/05/17 20:33:29 [1816][103] rtmp accept [::1]:64293
[oryx][trace] 2016/05/17 20:33:29 [1816][103] rollback to simple handshake.
[oryx][trace] 2016/05/17 20:33:29 [1816][103] connect at rtmp://localhost/live AMF0
[oryx][trace] 2016/05/17 20:33:29 [1816][103] output chunk size to 60000
[oryx][error] 2016/05/17 20:33:34 [1816][103] timeout for 5s
[oryx][warn] 2016/05/17 20:33:34 [1816][103] read basic header failed. err is read tcp [::1]:1935->[::1]:64293: use of closed network connection
[oryx][warn] 2016/05/17 20:33:34 [1816][103] rtmp receiver terminated with read tcp [::1]:1935->[::1]:64293: use of closed network connection
[oryx][trace] 2016/05/17 20:33:34 [1816][103] closed
[oryx][warn] 2016/05/17 20:33:07 [1816][100] windows not support daemon.
[oryx][trace] 2016/05/17 20:33:07 [1816][100] Oryx/0.1.17(MonkeyKing) Copyright (c) 2013-2015 Oryx(ossrs)
[oryx][trace] 2016/05/17 20:33:07 [1816][100] The go-oryx is SRS++, focus on real-time live streaming cluster.
[oryx][trace] 2016/05/17 20:33:07 [1816][100] set gc percent from 100 to 100
[oryx][trace] 2016/05/17 20:33:07 [1816][100] rtmp listen at tcp://1935
[oryx][trace] 2016/05/17 20:33:07 [1816][100] init server ok, conf=src.json, log=file(trace/oryx.log), workers=0/8, gc=0/100%, daemon=true
[oryx][trace] 2016/05/17 20:33:07 [1816][100] apply workers 8 and previous is 8
[oryx][warn] 2016/05/17 20:33:07 [1816][100] windows does not support reload with signal.
[oryx][trace] 2016/05/17 20:33:07 [1816][100] match iface=Ethernet, ip=169.254.30.218, hwaddr=6c:f0:49:e0:f5:23, pub=Internet
[oryx][trace] 2016/05/17 20:33:07 [1816][100] match iface=Ethernet, ip=192.168.137.1, hwaddr=6c:f0:49:e0:f5:23, pub=Intranet
[oryx][trace] 2016/05/17 20:33:07 [1816][100] match iface=VirtualBox Host-Only Network, ip=192.168.56.1, hwaddr=0a:00:27:00:00:07, pub=Intranet
[oryx][trace] 2016/05/17 20:33:07 [1816][100] match iface=Ethernet 2, ip=192.168.2.3, hwaddr=6c:f0:49:e0:f5:33, pub=Intranet
[oryx][trace] 2016/05/17 20:33:07 [1816][100] local ip is [Ethernet/169.254.30.218/6c:f0:49:e0:f5:23/Internet Ethernet/192.168.137.1/6c:f0:49:e0:f5:23/Intranet VirtualBox Host-Only Network/192.168.56.1/0a:00:27:00:00:07/Intranet Ethernet 2/192.168.2.3/6c:f0:49:e0:f5:33/Intranet] exported Ethernet/169.254.30.218/6c:f0:49:e0:f5:23/Internet
[oryx][trace] 2016/05/17 20:33:21 [1816][101] rtmp accept 192.168.2.18:58328
[oryx][trace] 2016/05/17 20:33:21 [1816][101] complex handshake ok.
[oryx][trace] 2016/05/17 20:33:21 [1816][101] connect at rtmp://192.168.2.3:1935/live AMF0
[oryx][trace] 2016/05/17 20:33:21 [1816][101] output chunk size to 60000
[oryx][trace] 2016/05/17 20:33:21 [1816][101] input chunk size to 60000
[oryx][trace] 2016/05/17 20:33:21 [1816][101] client identified, type=fmle-publish, stream_name=livestream, duration=0.00
[oryx][trace] 2016/05/17 20:33:21 [1816][101] redirect vhost 192.168.2.3 to __defaultVhost__
[oryx][trace] 2016/05/17 20:33:21 [1816][101] fmle ignore AMF0/AMF3 command message.
[oryx][trace] 2016/05/17 20:33:21 [1816][101] cache metadta sh.
[oryx][trace] 2016/05/17 20:33:21 [1816][101] cache video sh.
[oryx][trace] 2016/05/17 20:33:24 [1816][102] rtmp accept [::1]:64292
[oryx][trace] 2016/05/17 20:33:24 [1816][102] rollback to simple handshake.
[oryx][trace] 2016/05/17 20:33:24 [1816][102] connect at rtmp://localhost/live AMF0
[oryx][trace] 2016/05/17 20:33:24 [1816][102] output chunk size to 60000
[oryx][error] 2016/05/17 20:33:29 [1816][102] timeout for 5s
[oryx][warn] 2016/05/17 20:33:29 [1816][102] read basic header failed. err is read tcp [::1]:1935->[::1]:64292: use of closed network connection
[oryx][warn] 2016/05/17 20:33:29 [1816][102] rtmp receiver terminated with read tcp [::1]:1935->[::1]:64292: use of closed network connection
[oryx][trace] 2016/05/17 20:33:29 [1816][102] closed
[oryx][trace] 2016/05/17 20:33:29 [1816][103] rtmp accept [::1]:64293
[oryx][trace] 2016/05/17 20:33:29 [1816][103] rollback to simple handshake.
[oryx][trace] 2016/05/17 20:33:29 [1816][103] connect at rtmp://localhost/live AMF0
[oryx][trace] 2016/05/17 20:33:29 [1816][103] output chunk size to 60000
[oryx][error] 2016/05/17 20:33:34 [1816][103] timeout for 5s
[oryx][warn] 2016/05/17 20:33:34 [1816][103] read basic header failed. err is read tcp [::1]:1935->[::1]:64293: use of closed network connection
[oryx][warn] 2016/05/17 20:33:34 [1816][103] rtmp receiver terminated with read tcp [::1]:1935->[::1]:64293: use of closed network connection
[oryx][trace] 2016/05/17 20:33:34 [1816][103] closed

from VLC it shows little different error:

[oryx][trace] 2016/05/17 21:29:06 [9456][596] rtmp accept 192.168.2.3:65058
[oryx][trace] 2016/05/17 21:29:06 [9456][596] complex handshake ok.
[oryx][trace] 2016/05/17 21:29:06 [9456][596] connect at rtmp://192.168.2.3:1935/live AMF0
[oryx][trace] 2016/05/17 21:29:06 [9456][596] output chunk size to 60000
[oryx][trace] 2016/05/17 21:29:06 [9456][596] client identified, type=unknown, stream_name=, duration=0.00
[oryx][trace] 2016/05/17 21:29:06 [9456][596] redirect vhost 192.168.2.3 to __defaultVhost__
[oryx][warn] 2016/05/17 21:29:06 [9456][596] close invalid unknown client
[oryx][error] 2016/05/17 21:29:06 [9456][596] read body failed. err is read tcp 192.168.2.3:1935->192.168.2.3:65058: use of closed network connection
[oryx][warn] 2016/05/17 21:29:06 [9456][596] rtmp receiver terminated with read tcp 192.168.2.3:1935->192.168.2.3:65058: use of closed network connection
[oryx][trace] 2016/05/17 21:29:06 [9456][596] closed

go-oryx支持QUIC

有个想法,go-oryx支持QUIC的接入,转换成TCP连接,代理到SRS,这样SRS就可以支持QUIC-RTMP的推流和拉流。

RtmpUint16 UnmarshalBinary incorrect byteorder

Byteorder in protocol.RtmpUint16 UnmarshalBinary is incorrect.
Current:
*v = RtmpUint16(uint16(data[0]) | uint16(data[1])<<8)
Must be:
*v = RtmpUint16(uint16(data[1]) | uint16(data[0])<<8)

This leads to an incorrect decoding of UserControlMessage for example.

Gitter room closed?

@winlinvip Did you end up closing the go-oryx gitter.im chatroom? Would it be possible for us to re-open the room or remove it from the repo reference?

System: Support copy stream to another vhost.

服务器可以将流copy到另外的vhost,配合edge就可以实现forward的功能,还可以实现redirect的功能,也可以实现alias的功能。
不必重复实现这些功能,只要拆分成vhost级别的copy,还有配合vhost。

Doc: Small optimization on README.md

In README.md, "$GOPATH/bin/go-oryx -c conf/oryx.json" can be changed to "$GOROOT/bin/go-oryx -c conf/oryx.json".

I tried on several VPSes , former one can not work, but later one can work well.

HLS: Support audio only HLS stream.

About the audio only HLS, need to use aac, not ts; the timestamp need to recalculate.

Hello Winlin,

> Hi, I am the author of SRS(Simple RTMP Server) which delivery RTMP/HLS/HTTP-FLV and other features. I have rewrite the HLS which remuxing from RTMP according to the Apple HLS standard, it works very well.
> 
> I got another question about HLS: when I remux the rtmp stream without video, that is the pure audio stream to HLS, seems the audio exists some noise. The audio codec is mp3 or aac. Is there any example or specification about pure audio HLS stream?

I assume that by "pure audio stream" you mean an MPEG elementary audio stream? (As opposed to an audio-only MPEG-2 Transport Stream.) Here are a couple of simple examples from https://developer.apple.com/streaming/examples/ :

https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/gear0/prog_index.m3u8

https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/alternate_audio_aac_sinewave/prog_index.m3u8

One thing to bear in mind when converting from RTMP is that the millisecond timestamps will eventually accumulate enough error to create gaps in the audio. So when you create the "com.apple.streaming.transportStreamTimestamp" ID3 tag, its value should be calculated from the sum of the previous audio sample durations, not from the ms timestamps in the original file.


regards,

Roger Pantos
Apple Inc.

Usage description

This repository would attract much more interest if there was a simple "Usage" section. I found this README.md file here https://github.com/winterserver/simple-rtmp-server that shows how to use the server, and all of a sudden I thought maybe go-oryx was useful too!

Please add a tiny Usage section in the README.md.. it's rough to dive into it.. I just tried to install the software now that I think it can be useful .. otherwise, nothing says anywhere what it does, or doesn't do.

thanks a lot :)

go-oryx 并发9000个卡死

1.开启3个sb_rtmp_load进程 各播放3000个视频,视频会卡的不动了。内存占用达到64%(8G内存)
2.把3个压测进程关闭,内存没有释放,继续播放也是卡死。

RTMP: 程序运行后,推流时提示无法连接

使用go-srs,利用wiki里介绍的命令行推流,提示链接失败: Cannot open connection tcp://12.168.1.173:1935rtmp://12.168.1.173/live/livestream: Connection timed out
但是换成C++版本的srs的话,使用相同的命令行,是可以正常推流的。
另外,我没有办法kill掉 ./go-srs -c conf/srs.json进程,这个是为什么呢?

Streaming from Open Broadcasting Software

I've trying to stream from OBS (obsproject.com) to go-oryx but when I try with merely pointing to rtmp://localhost/live/feed I get this output log:

[oryx][trace] 2016/02/08 20:18:30 [30709][101] rtmp accept 192.168.86.168:49555
[oryx][trace] 2016/02/08 20:18:30 [30709][101] rollback to simple handshake.
[oryx][trace] 2016/02/08 20:18:30 [30709][101] input chunk size to 4096
[oryx][trace] 2016/02/08 20:18:30 [30709][101] connect at rtmp://192.168.86.151/live AMF0
[oryx][trace] 2016/02/08 20:18:30 [30709][101] output chunk size to 60000
[oryx][trace] 2016/02/08 20:18:30 [30709][101] client identified, type=fmle-publish, stream_name=feed, duration=0.00
[oryx][trace] 2016/02/08 20:18:30 [30709][101] redirect vhost 192.168.86.151 to __defaultVhost__
[oryx][trace] 2016/02/08 20:18:30 [30709][101] drop command message, name is @setDataFrame
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Audio
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Video
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Audio
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Video
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Audio
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Video
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Audio
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Video
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Audio
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Audio
[oryx][trace] 2016/02/08 20:18:31 [30709][101] drop unknown message, type is Video
...

with an on-going list of Audio and Video dropped messages.

Anything I can do to fix this ?

thanks for the software btw !

Skip port when listen failed.

When shell allocate port, the port maybe listened by other processes, we should check it, ignore the unavailable port.

RTMP: Support standard uri like http.

The rtmp uri is not standard, for example:

rtmp://127.0.0.1:1935/app?vhost=ossrs.net/stream

Which should support the standard uri like http, to pass the query in stream:

rtmp://127.0.0.1:1935/app/stream?vhost=ossrs.net

Resolve typos and spelling in conf

There are a few typos in the full.conf, most of which are only spelling related typos, however, there is a variable name typo in:

  • mr_latenct should be mr_latency

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.