INTRODUCTION liburtc is a small-footprint WebRTC native stack for embedded devices, such as IP cameras. 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) 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 for common embedded applications, such as smart cameras. * Minimal dependencies. Only dependency is OpenSSL. WHAT IS WEBRTC? 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. BOOTSTRAPPING If checking out this code via git, you first need to generate a 'configure' script: ./autogen.sh QUICKSTART To compile the library and usage example from source, you will need autoconf, automake, and libtool. Then: ./configure && make To test the library: make check Next, see 'example/README.md' for running a demo. CONCURRENCY MODEL 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.