summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
authorChris Hiszpanski <chris@hiszpanski.name>2019-04-18 00:55:30 -0700
committerChris Hiszpanski <chris@hiszpanski.name>2021-04-04 01:23:16 -0700
commit6d88c555019f32509f303e23dcfbba824fecd2ee (patch)
tree9d976063b4cb63e2e8ad4529c6d597b4470464c7 /README
Initial public commit.
mDNS and SDP are functional. Otherwise, library is still very much a work in progress. All tests pass.
Diffstat (limited to 'README')
-rw-r--r--README109
1 files changed, 109 insertions, 0 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..3a0833e
--- /dev/null
+++ b/README
@@ -0,0 +1,109 @@
+liburtc
+=======
+
+Real-time communication for microcontrollers
+
+The WebRTC reference implementation was designed for web browsers, namely
+Chromium. It requires specialized build tools, over 10GB of disk space for
+source code, and produces a binary with a large footprint. liburtc, on the
+other hand, is designed with the following goals in mind:
+
+* Small footprint. Under 100KB.
+* Portable. Implemented in C (C99) and works on nearly any architecture and
+ POSIX.1-2001 compliant operating system.
+* Easy to use. Straight-forward to compile and integrate into your code.
+* Standards compliant. Adheres to IETF specs to ensure interoperability.
+* Minimal. Only implements subset of protocols required for basic functionality
+ for common embedded applications, such as smart cameras.
+* Minimal dependencies. Only dependency is OpenSSL.
+
+
+Bootstrapping
+-------------
+
+If checking out this code via `git`, run `autoconf` to generate a `configure`
+script.
+
+
+Quickstart
+----------
+
+To compile the library and usage example from source, you will need autoconf,
+automake, and libtool. Use `autogen.sh` to create a `configure` script for
+configuring and making the library:
+
+ ./autogen.sh && ./configure && make
+
+To test the library:
+
+ make check
+
+Next, see `example/README.md` for running a demo.
+
+
+Features
+--------
+
+- Autotools based build process
+- POSIX.1-2001 compliant implementation
+
+/ sdp
+/ stun client
+- ice agent (state machine)
+ - aes cbc encipher / decipher (openssl)
+- v4l2
+- libx264
+- libopus
+- dtls (openssl?)
+- srtp
+
+- ANSI C compliant implementation (C99)
+- BSD sockets (winsock not supported)
+
+- Session Description Protocol (SDP)
+ - SHA-256 certificate fingerprint
+
+- Interactive Connectivity Establishment (ICE) agent
+ - STUN: RFC 5389 compliant client (no server capability)
+ - TURN: RFC 5766 compliant client (no server capability)
+
+- DTLS-SRTP transport
+ - RFC 5764 compliant implementation (using OpenSSL)
+
+- Video codecs:
+ - H.264
+ - Profiles: baseline, constrained baseline, main, high
+ - Levels: 3.1 and up
+ - H.265 not supported (few, if any, browsers support this)
+ - VP8/9 not supported (few embedded devices support this)
+
+- Video sources:
+ - Video4Linux2
+ - USB Video Class
+
+- Audio codecs:
+ - G.711
+ - Opus
+
+- Audio sources:
+ - ALSA
+ - PulseAudio
+
+
+Possible Future Improvements
+----------------------------
+
+- seamless handoff between network interfaces (e.g. cellular and wifi)
+
+Notes
+-----
+
+- A thread is used per peer connection. Each thread asynchronously handles
+ i/o events.
+
+
+Credits
+-------
+
+- Diego Elio Petteno (https://autotools.io) for the wonderful resource on
+ autoconf, automake, libtool, and other tools in the autotools suite.