Coder Social home page Coder Social logo

mediasoup-broadcaster-demo's Introduction

mediasoup broadcaster demo (libmediasoupclient v3)

libmediasoupclient based application that produces artificial sound and video to the specified room in mediasoup-demo application. The video consists of some colored rectangles moving towards the lower-right corner of the image. Credit for the artificial media creation goes to the WEBRTC team (LICENSE).

Resources

Usage

Once installed (see Installation below):

SERVER_URL=https://my.mediasoup-demo.org:4443 ROOM_ID=broadcaster build/broadcaster

Environment variables:

  • SERVER_URL: The URL of the mediasoup-demo HTTP API server (required).
  • ROOM_ID: Room id (required).
  • USE_SIMULCAST: If "false" no simulcast will be used (defaults to "true").
  • ENABLE_AUDIO: If "false" no audio Producer is created (defaults to "true").
  • WEBRTC_DEBUG: Enable libwebrtc logging. Can be "info", "warn" or "error" (optional).
  • VERIFY_SSL: Verifies server side SSL certificate (defaults to "true") (optional).

Dependencies

  • libmediasoupclient (already included in the repository)
  • cpr (already included in the repository)
  • OpenSSL (must be installed in the system including its headers)

Installation

git clone https://github.com/versatica/mediasoup-broadcaster-demo.git

cmake . -Bbuild                                              \
  -DLIBWEBRTC_INCLUDE_PATH:PATH=${PATH_TO_LIBWEBRTC_SOURCES} \
  -DLIBWEBRTC_BINARY_PATH:PATH=${PATH_TO_LIBWEBRTC_BINARY}   \
  -DOPENSSL_INCLUDE_DIR:PATH=${PATH_TO_OPENSSL_HEADERS}      \
  -DCMAKE_USE_OPENSSL=ON

make -C build

Linkage Considerations (1)

[ 65%] Linking C shared library ../../../../lib/libcurl.dylib ld: cannot link directly with dylib/framework, your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [lib/libcurl.dylib] Error 1 make[1]: *** [cpr/opt/curl/lib/CMakeFiles/libcurl.dir/all] Error 2
make: *** [all] Error 2

The following error may happen if the linker is not able to find the openssl crypto library. In order to avoid this error, specify the crypto library path along with the openssl root directory using the OPENSSL_CRYPTO_LIBRARY flag. Ie:

-DOPENSSL_ROOT_DIR=/usr/local/Cellar/[email protected]/1.1.1h \
-DOPENSSL_CRYPTO_LIBRARY=/usr/local/Cellar/[email protected]/1.1.1h/lib/libcrypto.1.1.dylib

License

Some files contain specific license agreements, written in the beginning of the respective files.

NOTE 1: PATH_TO_OPENSSL_HEADERS is /usr/local/opt/openssl/include if you install OpenSSL using Homebrew in OSX.

mediasoup-broadcaster-demo's People

Contributors

copiltembel avatar iamshouvikmitra avatar ibc avatar im-sj avatar jmillan 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

mediasoup-broadcaster-demo's Issues

webrtc library needs to be build with tests

I guess because of the usage of "webrtc::FakePeriodicVideoTrackSource", the webrtc library needs to be build including tests. This is described here, but not specifically noted in this project, which cannot be build without it.

update to last libmediasoupclient v3 (libwebrtc m81)

I'm facing an issue when trying to upgrade to libmediasoupclient v3 which now uses libwebrtc m81 version.

After upgrading the files in our fakegenerators folder, which have changed in libwebrtc, I'm getting the following Undefined symbols linking error:

[ 72%] Linking CXX executable broadcaster
Undefined symbols for architecture x86_64:
  "webrtc::test::ResourcePath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      webrtc::test::(anonymous namespace)::TransformFilePath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in frame_generator_capturer.cc.o
  "webrtc::test::CreateSlideFrameGenerator(int, int, int)", referenced from:
      webrtc::test::FrameGeneratorCapturer::Create(webrtc::Clock*, webrtc::TaskQueueFactory&, webrtc::test::FrameGeneratorCapturerConfig::SquareSlides) in frame_generator_capturer.cc.o
  "webrtc::test::CreateSquareFrameGenerator(int, int, absl::optional<webrtc::test::FrameGeneratorInterface::OutputType>, absl::optional<int>)", referenced from:
      webrtc::FrameGeneratorCapturerVideoTrackSource::FrameGeneratorCapturerVideoTrackSource(webrtc::FrameGeneratorCapturerVideoTrackSource::Config, webrtc::Clock*, bool) in MediaStreamTrackFactory.cpp.o
      webrtc::test::FrameGeneratorCapturer::Create(webrtc::Clock*, webrtc::TaskQueueFactory&, webrtc::test::FrameGeneratorCapturerConfig::SquaresVideo) in frame_generator_capturer.cc.o
  "webrtc::test::CreateFromYuvFileFrameGenerator(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, unsigned long, unsigned long, int)", referenced from:
      webrtc::test::FrameGeneratorCapturer::Create(webrtc::Clock*, webrtc::TaskQueueFactory&, webrtc::test::FrameGeneratorCapturerConfig::VideoFile) in frame_generator_capturer.cc.o
      webrtc::test::FrameGeneratorCapturer::Create(webrtc::Clock*, webrtc::TaskQueueFactory&, webrtc::test::FrameGeneratorCapturerConfig::ImageSlides) in frame_generator_capturer.cc.o
  "webrtc::test::CreateScrollingInputFromYuvFilesFrameGenerator(webrtc::Clock*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, unsigned long, unsigned long, unsigned long, unsigned long, long long, long long)", referenced from:
      webrtc::test::FrameGeneratorCapturer::Create(webrtc::Clock*, webrtc::TaskQueueFactory&, webrtc::test::FrameGeneratorCapturerConfig::ImageSlides) in frame_generator_capturer.cc.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [broadcaster] Error 1
make[1]: *** [CMakeFiles/broadcaster.dir/all] Error 2
make: *** [all] Error 2

I can't spot the reason since libwebrtc is being compiled with the following args (see: rtc_include_tests:

[email protected]:~/src/webrtc-checkout/src ((HEAD detached at branch-heads/4044))$ cat out/4044/args.gn
is_debug = true
is_component_build = false
is_clang = true
rtc_include_tests = true
rtc_use_h264 = true
rtc_enable_protobuf = false
use_rtti = true
mac_deployment_target = "10.11"
use_custom_libcxx = false

I'm wondering if you could give it a shoot @copiltembel.

Thanks a lot.

mediasoup-broadcaster-demo for MacOS

step - 1:

cmake . -Bbuild \
  -DLIBWEBRTC_INCLUDE_PATH:PATH=~/webrtc/src \
  -DLIBWEBRTC_BINARY_PATH:PATH=~/webrtc/src/out/m84/obj   \
  -DOPENSSL_INCLUDE_DIR:PATH=/usr/local/Cellar/[email protected]/1.1.1h/include  \
  -DOPENSSL_ROOT_DIR=/usr/local/Cellar/[email protected]/1.1.1h \
  -DOPENSSL_CRYPTO_LIBRARY=/usr/local/Cellar/[email protected]/1.1.1h/lib/libcrypto.1.1.dylib \
  -DCMAKE_USE_OPENSSL=ON 

.step - 1's result : it's okay i think

-- Using CURL_LIBRARIES: libcurl.
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/said/mediasoup-broadcaster-demo/build

step - 2:
make -C build

step - 2's result: error header not found but i have added LIBWEBRTC_INCLUDE_PATH

said@Said-2 mediasoup-broadcaster-demo % make -C build    
[  0%] Building CXX object libwebrtc/CMakeFiles/webrtc_broadcaster.dir/api/test/create_frame_generator.cc.o
In file included from /Users/said/mediasoup-broadcaster-demo/deps/libwebrtc/api/test/create_frame_generator.cc:17:
/Users/said/mediasoup-broadcaster-demo/deps/libwebrtc/test/frame_generator.h:23:10: fatal error: 'rtc_base/critical_section.h' file not found
#include "rtc_base/critical_section.h"
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [libwebrtc/CMakeFiles/webrtc_broadcaster.dir/api/test/create_frame_generator.cc.o] Error 1
make[1]: *** [libwebrtc/CMakeFiles/webrtc_broadcaster.dir/all] Error 2
make: *** [all] Error 2

media_stream_interface

When I do make -C build, it shows:
In file included from /home/shengqi/mediasoup-broadcaster-demo/deps/libmediasoupclient/src/Consumer.cpp:4:0:
/home/shengqi/mediasoup-broadcaster-demo/deps/libmediasoupclient/include/Consumer.hpp:6:10: fatal error: api/media_stream_interface.h: no such a file or dic

I cannot find any media_stream_interface.h in my files, what does it mean? Should I customize it or pre-install other things? Thanks!

cmake: add_executable called with incorrect number of arguments

Building it as follows:

$ cmake . -Bbuild \
   -DLIBWEBRTC_INCLUDE_PATH:PATH=/Users/ibc/src/3rdparty/webrtc-checkout/src \
   -DLIBWEBRTC_BINARY_PATH:PATH=/Users/ibc/src/3rdparty/webrtc-checkout/src/out/M73/obj/libwebrtc.a \
   -DOPENSSL_INCLUDE_DIR:PATH=/usr/local/opt/openssl/include \
   -DCMAKE_USE_OPENSSL=ON

It fails with:

CMake Error at CMakeLists.txt:18 (add_executable):
  add_executable called with incorrect number of arguments

CMake Error at CMakeLists.txt:31 (target_link_libraries):
  Cannot specify link libraries for target "broadcaster" which is not built
  by this project.

The line in the CMakeLists.txt is as follows:

add_executable(${PROJECT_NAME} ${SOURCES})

Honestly I have no idea about what ${SOURCES} it.

I've cmake 3.9.4 which satisfies the required version.

Issue compiling: missing rtc_base/critical_section.h

I'm trying to compile this demo under macOS using webrtc branch 4606 (m94). It appears there is a missing file. Are we still using 4606 as described in the Mediasoup docs?

cmake . -Bbuild \
-DLIBWEBRTC_INCLUDE_PATH:PATH="~/Development/GitHub/webrtc-checkout/src" \
-DLIBWEBRTC_BINARY_PATH:PATH="~/Development/GitHub/webrtc-checkout/src/out/mac_x64" \
-DOPENSSL_INCLUDE_DIR:PATH="/usr/local/opt/openssl/include" \
-DOPENSSL_ROOT_DIR:PATH="/usr/local/opt/openssl/lib" \
-DCMAKE_USE_OPENSSL=ON

App crashed when execute auto response = nlohmann::json::parse(r.text)

baseUrl is https://v3demo.mediasoup.org/?roomId=zxqqt2ah&info=true.

The xml i got like this:
<!doctype html>

<title>mediasoup demo</title> <script src='/resources/js/antiglobal.js'></script> <script> window.localStorage.setItem('debug', '* -engine* -socket* -RIE* *WARN* *ERROR*');
		if (window.antiglobal)
		{
			window.antiglobal('___browserSync___oldSocketIo', 'io', '___browserSync___', '__core-js_shared__');
			setInterval(window.antiglobal, 180000);
		}
	</script>
	<script async src='/mediasoup-demo-app.js?v=foo2'></script>
</head>
<body>
	<div id='mediasoup-demo-app-container'></div>
	<div id='mediasoup-demo-app-media-query-detector'></div>
</body>

terminate called after throwing an instance of 'nlohmann::detail::parse_error'
what(): [json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: '<'
Aborted (core dumped)

Documentation for building the demo in ubuntu?

I am trying to build this demo on my linux machine and getting compilation errors:

=========== libmediasoupclient Build Configuration ===========

-- MEDIASOUPCLIENT_BUILD_TESTS : OFF
-- MEDIASOUPCLIENT_LOG_TRACE : OFF
-- MEDIASOUPCLIENT_LOG_DEV : OFF
-- LIBWEBRTC_INCLUDE_PATH : /home/sumitj/webrtc-checkout-m84/src
-- LIBWEBRTC_BINARY_PATH : /home/sumitj/webrtc-checkout-m84/src/out/m84/obj

**CMake Error at CMakeLists.txt:58 (target_include_directories):
Cannot specify include directories for target "broadcaster" which is not
built by this project.

CMake Error at CMakeLists.txt:65 (target_link_libraries):
Cannot specify link libraries for target "broadcaster" which is not built
by this project.**

My build specs:
Ubuntu 18.04
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
cmake version 3.10.2

I looked into the forums (#2) and upgraded the cmake version to 14.4 and got different errors now:
make: Entering directory '/home/sumitj/bodyline/third_party/mediasoup-broadcaster-demo/build'
make[1]: Entering directory '/home/sumitj/bodyline/third_party/mediasoup-broadcaster-demo/build'
make[2]: Entering directory '/home/sumitj/bodyline/third_party/mediasoup-broadcaster-demo/build'
make[2]: Leaving directory '/home/sumitj/bodyline/third_party/mediasoup-broadcaster-demo/build'
make[2]: Entering directory '/home/sumitj/bodyline/third_party/mediasoup-broadcaster-demo/build'
[ 0%] Building CXX object libwebrtc/CMakeFiles/webrtc_broadcaster.dir/test/testsupport/ios_file_utils.mm.o
c++: error trying to exec 'cc1objplus': execvp: No such file or directory
libwebrtc/CMakeFiles/webrtc_broadcaster.dir/build.make:205: recipe for target 'libwebrtc/CMakeFiles/webrtc_broadcaster.dir/test/testsupport/ios_file_utils.mm.o' failed
make[2]: *** [libwebrtc/CMakeFiles/webrtc_broadcaster.dir/test/testsupport/ios_file_utils.mm.o] Error 1
make[2]: Leaving directory '/home/sumitj/bodyline/third_party/mediasoup-broadcaster-demo/build'
CMakeFiles/Makefile2:1657: recipe for target 'libwebrtc/CMakeFiles/webrtc_broadcaster.dir/all' failed
make[1]: *** [libwebrtc/CMakeFiles/webrtc_broadcaster.dir/all] Error 2
make[1]: Leaving directory '/home/sumitj/bodyline/third_party/mediasoup-broadcaster-demo/build'
Makefile:129: recipe for target 'all' failed
make: *** [all] Error 2
make: Leaving directory '/home/sumitj/bodyline/third_party/mediasoup-broadcaster-demo/build'

As an FYI, I followed the documentation for libmediasoupclient for installing webrtc and exactly did what is mentioned here:
https://mediasoup.org/documentation/v3/libmediasoupclient/installation/. Is there another branch head I should be trying with instead of m84?

Possibly related issue I filed for libmediasoupclient: versatica/libmediasoupclient#89

which webrtc project use?

-DLIBWEBRTC_INCLUDE_PATH:PATH=${PATH_TO_LIBWEBRTC_SOURCES}
-DLIBWEBRTC_BINARY_PATH:PATH=${PATH_TO_LIBWEBRTC_BINARY} \

compile error on Mac - can't use built in openssl lib

Im trying to compile the lib on MacOS Catalina.

In the last step: make -C build
The process fails with the message:

[ 65%] Linking C shared library ../../../../lib/libcurl.dylib ld: cannot link directly with dylib/framework, your binary is not an allowed client of /usr/lib/libcrypto.dylib for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [lib/libcurl.dylib] Error 1 make[1]: *** [cpr/opt/curl/lib/CMakeFiles/libcurl.dir/all] Error 2 make: *** [all] Error 2
Note: I have set the PATH_TO_OPENSSL_HEADERS in the command to /usr/local/opt/openssl/include as instructed in the README

Any solutions to this?

Compilation fail

the result:
[ 86%] Linking CXX executable broadcaster
/usr/bin/ld: broadcaster: hidden symbol `DSA_get0_key' in /home/sdt/work/webrtc_m84/src/out/m84/obj/libwebrtc.a(dsa.o) is referenced by DSO
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

the process:
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync
cd src
git checkout -b m84 refs/remotes/branch-heads/4147
gclient sync
gn gen out/m84 --args='is_debug=false is_component_build=false is_clang=false rtc_include_tests=false rtc_use_h264=true use_rtti=true use_custom_libcxx=false rtc_enable_protobuf=false treat_warnings_as_errors=false use_ozone=true'
ninja -C out/m84

git clone https://github.com/versatica/libmediasoupclient.git
cmake . -Bbuild -DLIBWEBRTC_INCLUDE_PATH:PATH=/home/sdt/work/webrtc_m84/src -DLIBWEBRTC_BINARY_PATH:PATH=/home/sdt/work/webrtc_m84/src/out/m84/obj
make -C build/

Overlay stream trouble

Hi, I experimenting with this demo, sending generally works (a bit confusing how to control the bitrate, but I think I'll find the answer in the mediasoup documentation).

The problem occurred while trying to overlay a stream from mediasoup to another stream (udp, rtmp, etc.).

I understand that this is not a problem with this repository, but perhaps a fresh look and experience with mediaasoup will help localize the problem.

According to ffmpeg logs, it starts working, processes for a while and stops (line 957 of the log file)

I suspect there is something wrong with the stream from mediaasoup

Logs: https://gist.github.com/Able1991/b59bd18cc44a1b9b08c3df4cd5dbe08a

Start command:
ffmpeg -strict experimental -loglevel debug -protocol_whitelist pipe,udp,rtp -fflags +genpts -flags low_delay -f sdp -analyzeduration 2147483647 -probesize 2147483647 -i pipe:0 -fflags +nobuffer -analyzeduration 10000000 -probesize 10000000 -i rtmp://eu-02.re.stream.mvs.wtf:1936/monitor/pV2ErmcZIscDsaoU8AS4KuYYYZG_-wPDiH_sDeu6U58 -filter_complex [0:a]asetpts=PTS-STARTPTS[a0];[1:a]asetpts=PTS-STARTPTS[a1];[0:v]setpts=PTS-STARTPTS,scale=iw/3:ih/3[pip];[1:v]setpts=PTS-STARTPTS[v1];[v1][pip]overlay=0:0:shortest=0[vo];[a0][a1]amix=inputs=2[ao] -map [vo] -map [ao] -c:a aac -c:v h264 -s 640x480 -r 30 -x264opts keyint=60:keyint_min=60:no-scenecut -preset superfast -profile:v high -level:v 4.1 -tune zerolatency -f flv -max_muxing_queue_size 4096 rtmp://publish.stream.mvs.wtf/push/LFcDPV65OWznyhAjcSvOqhcxN9BRFBijP7jFakjweR0

sdp:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=FFmpeg
c=IN IP4 127.0.0.1
t=0 0
m=video 26692 RTP/AVP 101
a=rtpmap:101 VP8/90000
a=sendonly
m=audio 26267 RTP/AVP 100
a=rtpmap:100 opus/48000/2
a=sendonly

Missing include in Logger.cpp

Couldn't build out of the box because uint8_t was undefined and used in Ligger.hpp
#include
takes care of the issue. I guess opened and closed, but may help somebody.

mac linker error

I build demo on mac os
step 1:
cmake . -Bbuild
-DLIBWEBRTC_INCLUDE_PATH:PATH=/Users/hanson/webrtc-checkout/src
-DLIBWEBRTC_BINARY_PATH:PATH=/Users/hanson/webrtc-checkout/out/Release/obj
-DOPENSSL_INCLUDE_DIR:PATH=/opt//local/include
-DCMAKE_USE_OPENSSL=ON
step2:
cd build
make

error:
Undefined symbols for architecture x86_64:
"typeinfo for webrtc::VideoTrackSource", referenced from:
typeinfo for CapturerTrackSource in peerConnectionUtils.cpp.o
"typeinfo for webrtc::SetSessionDescriptionObserver", referenced from:
typeinfo for mediasoupclient::PeerConnection::SetSessionDescriptionObserver in Broadcaster.cpp.o
typeinfo for mediasoupclient::PeerConnection::SetSessionDescriptionObserver in main.cpp.o
typeinfo for mediasoupclient::PeerConnection::SetSessionDescriptionObserver in libmediasoupclient.a(mediasoupclient.cpp.o)
typeinfo for mediasoupclient::PeerConnection::SetSessionDescriptionObserver in libmediasoupclient.a(Transport.cpp.o)
typeinfo for mediasoupclient::PeerConnection::SetSessionDescriptionObserver in libmediasoupclient.a(PeerConnection.cpp.o)
typeinfo for mediasoupclient::PeerConnection::SetSessionDescriptionObserver in libmediasoupclient.a(Device.cpp.o)
typeinfo for mediasoupclient::PeerConnection::SetSessionDescriptionObserver in libmediasoupclient.a(Handler.cpp.o)
...
"typeinfo for webrtc::CreateSessionDescriptionObserver", referenced from:
typeinfo for mediasoupclient::PeerConnection::CreateSessionDescriptionObserver in Broadcaster.cpp.o
typeinfo for mediasoupclient::PeerConnection::CreateSessionDescriptionObserver in main.cpp.o
typeinfo for mediasoupclient::PeerConnection::CreateSessionDescriptionObserver in libmediasoupclient.a(mediasoupclient.cpp.o)
typeinfo for mediasoupclient::PeerConnection::CreateSessionDescriptionObserver in libmediasoupclient.a(Transport.cpp.o)
typeinfo for mediasoupclient::PeerConnection::CreateSessionDescriptionObserver in libmediasoupclient.a(PeerConnection.cpp.o)
typeinfo for mediasoupclient::PeerConnection::CreateSessionDescriptionObserver in libmediasoupclient.a(Device.cpp.o)
typeinfo for mediasoupclient::PeerConnection::CreateSessionDescriptionObserver in libmediasoupclient.a(Handler.cpp.o)
...
ld: symbol(s) not found for architecture x86_64

any idea? thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.