diff options
-rw-r--r-- | AUTHORS | 2 | ||||
-rw-r--r-- | COPYING | 23 | ||||
-rw-r--r-- | LICENSE | 21 | ||||
-rw-r--r-- | README | 115 |
4 files changed, 57 insertions, 104 deletions
@@ -1 +1 @@ -liburtc is written and maintained by Chris Hiszpanski <chris@hiszpanski.name>. +Chris Hiszpanski <chris@liburtc.org> @@ -0,0 +1,23 @@ +Copyright (c) 2019-2021 Chris Hiszpanski. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT +SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +OF SUCH DAMAGE. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index eff0eb0..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright 2019-2021 Chris Hiszpanski - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. @@ -1,16 +1,17 @@ -liburtc -======= +INTRODUCTION -Real-time communication for microcontrollers +liburtc is a small-footprint WebRTC native stack for embedded devices, such as +IP cameras. -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: +Google's WebRTC reference implementation was designed for web browsers, namely +Chromium. It requires specialized Google build tools (i.e. Bazel), over 10GB of +disk space for the source code alone, resulting in a large binary tens of +megabytes in size. 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. +* Portable. Implemented in C (C99) to work on nearly any architecture, + POSIX.1-2001 compliant operating system, and environment. * 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 @@ -18,92 +19,42 @@ other hand, is designed with the following goals in mind: * Minimal dependencies. Only dependency is OpenSSL. -Bootstrapping -------------- +WHAT IS WEBRTC? -If checking out this code via `git`, run `autoconf` to generate a `configure` -script. +In a nutshell, it is a Voice-over-IP videophone that can be actuated via +Javascript (i.e. RTCPeerConnection API). It is a the only form of real-time +communication (< 300ms end-to-end latency) ubiquitously supported by web +browsers. +For example, liburtc enables a web browser to view video from an IP camera +with sub-300ms latency over wide-area networks. It also supports bi-directional +audio and data, for instance for a smart cameras or teleoperated devices. -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 --------- +BOOTSTRAPPING -- Autotools based build process -- POSIX.1-2001 compliant implementation +If checking out this code via git, you first need to generate a 'configure' +script: -/ sdp -/ stun client -- ice agent (state machine) - - aes cbc encipher / decipher (openssl) -- v4l2 -- libx264 -- libopus -- dtls (openssl?) -- srtp + ./autogen.sh -- 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 +QUICKSTART +To compile the library and usage example from source, you will need autoconf, +automake, and libtool. Then: -Possible Future Improvements ----------------------------- + ./configure && make -- seamless handoff between network interfaces (e.g. cellular and wifi) +To test the library: -Notes ------ + make check -- A thread is used per peer connection. Each thread asynchronously handles - i/o events. +Next, see 'example/README.md' for running a demo. -Credits -------- +CONCURRENCY MODEL -- Diego Elio Petteno (https://autotools.io) for the wonderful resource on - autoconf, automake, libtool, and other tools in the autotools suite. +A new thread is used for each peer connection. All network i/o and timer events +related to the peer connection are then processed via a select/poll/epoll event +loop on the thread. |