summaryrefslogtreecommitdiff
path: root/README
blob: 7bbc317a1736ff26ec62e34e7bb95626270233a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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.