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.
|