// the find
awslabs/amazon-kinesis-video-streams-webrtc-sdk-c
Amazon Kinesis Video Streams Webrtc SDK is for developers to install and customize realtime communication between devices and enable secure streaming of video, audio to Kinesis Video Streams.
A pure-C WebRTC client SDK from AWS, purpose-built for streaming to Kinesis Video Streams from embedded and constrained devices. It implements the full WebRTC stack in C — DTLS, SRTP, ICE, STUN/TURN, signaling — so you can get video off a Raspberry Pi or ARMv5 board without pulling in a browser engine. The target audience is IoT and edge device developers who need sub-200k binary size and real control over the media pipeline.
The cross-compilation story is genuinely well thought out: every commit is cross-compiled in CI, BUILD_OPENSSL_PLATFORM/BUILD_LIBSRTP_HOST_PLATFORM flags exist specifically for embedded targets, and there are documented recipes for 32-bit Raspbian and M1 Mac. Memory tuning is explicit and API-driven — configureTransceiverRollingBuffer lets you set buffer duration and bitrate per transceiver, which matters on devices with 64MB RAM. The sanitizer coverage (ASAN, MSAN, TSAN, UBSan) is all wired into CMake flags and run in CI, which is more than most C projects bother with. The DTLS certificate pre-generation mechanism is a real engineering decision: it trades memory for startup latency on slow devices where openssl keygen takes 15 seconds.
The Windows build setup is genuinely painful — it requires Strawberry Perl, Chocolatey, a manual pthreads-win32 download from an FTP server, path gymnastics, and a batch file you may need to hand-edit for your VS install location. That FTP URL in the README is a reliability hazard. The OpenSSL version pin (= 1.1.1x) is a problem: 1.1.1 is EOL since September 2023 with no security patches, and the system-deps path will bite anyone on a current distro. The dependency graph (OpenSSL + libsrtp + libusrsctp + libwebsockets + libjsmn) means the from-source build pulls a lot of code at cmake time — fine for CI, fragile for air-gapped or offline environments. Signaling is KVS-only; there is no pluggable signaling interface, so if you want to use this stack against your own backend you are doing surgery.