|
@@ -5,13 +5,11 @@ It can be compiled with multiple backends:
|
|
|
- The security layer can be provided through [OpenSSL](https://www.openssl.org/) or [GnuTLS](https://www.gnutls.org/).
|
|
|
- The connectivity for WebRTC can be provided through my ad-hoc ICE library [libjuice](https://github.com/paullouisageneau/libjuice) as submodule or through [libnice](https://github.com/libnice/libnice).
|
|
|
|
|
|
-This projet is originally inspired by [librtcdcpp](https://github.com/chadnickbok/librtcdcpp), however it is a complete rewrite from scratch, because the messy architecture of librtcdcpp made solving its implementation issues difficult.
|
|
|
-
|
|
|
Licensed under LGPLv2, see [LICENSE](https://github.com/paullouisageneau/libdatachannel/blob/master/LICENSE).
|
|
|
|
|
|
## Compatibility
|
|
|
|
|
|
-The library aims at implementing the following communication protocols:
|
|
|
+The library implements the following communication protocols:
|
|
|
|
|
|
### WebRTC Data Channels and Media Transport
|
|
|
|
|
@@ -47,91 +45,22 @@ Features:
|
|
|
|
|
|
## Dependencies
|
|
|
|
|
|
-Dependencies:
|
|
|
-- GnuTLS: https://www.gnutls.org/ or OpenSSL: https://www.openssl.org/
|
|
|
+Only [GnuTLS](https://www.gnutls.org/) or [OpenSSL](https://www.openssl.org/) are necessary.
|
|
|
+
|
|
|
+Optionally, [libnice](https://nice.freedesktop.org/) can be selected as an alternative ICE backend instead of libjuice.
|
|
|
|
|
|
Submodules:
|
|
|
- libjuice: https://github.com/paullouisageneau/libjuice
|
|
|
- usrsctp: https://github.com/sctplab/usrsctp
|
|
|
- libsrtp: https://github.com/cisco/libsrtp
|
|
|
|
|
|
-Optional dependencies:
|
|
|
-- libnice: https://nice.freedesktop.org/ (if selected as ICE backend instead of libjuice)
|
|
|
-- libsrtp: https://github.com/cisco/libsrtp (if selected instead of the submodule)
|
|
|
-
|
|
|
## Building
|
|
|
|
|
|
-### Clone repository and submodules
|
|
|
-
|
|
|
-```bash
|
|
|
-$ git clone https://github.com/paullouisageneau/libdatachannel.git
|
|
|
-$ cd libdatachannel
|
|
|
-$ git submodule update --init --recursive
|
|
|
-```
|
|
|
-
|
|
|
-### Building with CMake
|
|
|
-
|
|
|
-The CMake library targets `libdatachannel` and `libdatachannel-static` respectively correspond to the shared and static libraries. The default target will build tests and examples. The option `USE_GNUTLS` allows to switch between OpenSSL (default) and GnuTLS, and the option `USE_NICE` allows to switch between libjuice as submodule (default) and libnice.
|
|
|
-
|
|
|
-If you only need Data Channels, the option `NO_MEDIA` allows to make the library lighter by removing media support. Similarly, `NO_WEBSOCKET` removes WebSocket support.
|
|
|
-
|
|
|
-#### POSIX-compliant operating systems (including Linux and Apple macOS)
|
|
|
-```bash
|
|
|
-$ cmake -B build -DUSE_GNUTLS=1 -DUSE_NICE=0
|
|
|
-$ cd build
|
|
|
-$ make -j2
|
|
|
-```
|
|
|
-
|
|
|
-#### Apple macOS with XCode project
|
|
|
-
|
|
|
-```bash
|
|
|
-$ cmake -B "$BUILD_DIR" -DUSE_GNUTLS=0 -DUSE_NICE=0 -G Xcode
|
|
|
-```
|
|
|
-
|
|
|
-Xcode project is generated in *build/* directory.
|
|
|
-
|
|
|
-##### Solving **Could NOT find OpenSSL** error
|
|
|
-
|
|
|
-You need to add OpenSSL root directory if your build fails with the following message:
|
|
|
-
|
|
|
-```
|
|
|
-Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
|
|
|
-system variable OPENSSL_ROOT_DIR (missing: OPENSSL_CRYPTO_LIBRARY
|
|
|
-OPENSSL_INCLUDE_DIR)
|
|
|
-```
|
|
|
-
|
|
|
-for example:
|
|
|
-```bash
|
|
|
-$ cmake -B build -DUSE_GNUTLS=0 -DUSE_NICE=0 -G Xcode -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl\@1.1/1.1.1h/
|
|
|
-```
|
|
|
-
|
|
|
-#### Microsoft Windows with MinGW cross-compilation
|
|
|
-```bash
|
|
|
-$ cmake -B build -DCMAKE_TOOLCHAIN_FILE=/usr/share/mingw/toolchain-x86_64-w64-mingw32.cmake # replace with your toolchain file
|
|
|
-$ cd build
|
|
|
-$ make -j2
|
|
|
-```
|
|
|
-
|
|
|
-#### Microsoft Windows with Microsoft Visual C++
|
|
|
-```bash
|
|
|
-$ cmake -B build -G "NMake Makefiles"
|
|
|
-$ cd build
|
|
|
-$ nmake
|
|
|
-```
|
|
|
-
|
|
|
-### Building directly with Make (Linux only)
|
|
|
-
|
|
|
-The option `USE_GNUTLS` allows to switch between OpenSSL (default) and GnuTLS, and the option `USE_NICE` allows to switch between libjuice as submodule (default) and libnice.
|
|
|
-
|
|
|
-If you only need Data Channels, the option `NO_MEDIA` removes media support. Similarly, `NO_WEBSOCKET` removes WebSocket support.
|
|
|
-
|
|
|
-```bash
|
|
|
-$ make USE_GNUTLS=1 USE_NICE=0
|
|
|
-```
|
|
|
+See [BUILDING.md](https://github.com/paullouisageneau/libdatachannel/blob/master/BUILDING.md) for building instructions.
|
|
|
|
|
|
## Examples
|
|
|
|
|
|
-See [examples](https://github.com/paullouisageneau/libdatachannel/blob/master/examples/) for a complete usage example with signaling server (under GPLv2).
|
|
|
+See [examples](https://github.com/paullouisageneau/libdatachannel/blob/master/examples/) for complete usage examples with signaling server (under GPLv2).
|
|
|
|
|
|
Additionnaly, you might want to have a look at the [C API](https://github.com/paullouisageneau/libdatachannel/blob/master/include/rtc/rtc.h).
|
|
|
|