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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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.
|