2
0

#WebRTC #networking #p2p #tcp #udp #rtcpeerconnection

Paul-Louis Ageneau fd99c35079 Fixed handling of stopping during connection 6 жил өмнө
include c778ad802a Fixes to C API 6 жил өмнө
src fd99c35079 Fixed handling of stopping during connection 6 жил өмнө
test c951a6ca86 Renamed setRemoteCandidate to addRemoteCandidate 6 жил өмнө
usrsctp @ 04d617c9c1 d7049e7322 Updated usrsctp 6 жил өмнө
.clang-format 611c53191c Added .clang-format and .editorconfig 6 жил өмнө
.editorconfig 611c53191c Added .clang-format and .editorconfig 6 жил өмнө
.gitignore f19a0aa6c7 Simple local test with two peer connections 6 жил өмнө
.gitmodules 1c0a97980b Added usrsctp submodule 6 жил өмнө
LICENSE f844c71e0f Initial commit 6 жил өмнө
Makefile 6e3ba6afd7 Reorganised project to separate public from private headers 6 жил өмнө
README.md 9114290898 Added license notice in Readme 6 жил өмнө

README.md

libdatachannel - C/C++ WebRTC DataChannels

libdatachannel is a simple implementation of WebRTC DataChannels in C++ with C bindings. Its API is modelled as a simplified version of the JavaScript WebRTC API, in order to ease the design of cross-environment applications.

This projet is originally inspired by librtcdcpp, however it is a complete rewrite from scratch, because the messy architecture of librtcdcpp made solving its implementation issues difficult.

Licensed under LGPLv2, see LICENSE.

Dependencies

Submodules:

Building

git submodule update --init --recursive
make

Example

Signal a PeerConnection

auto pc = std::make_shared<PeerConnection>();

pc->onLocalDescription([](const Description &sdp) {
    // Send the SDP to the remote peer
    MY_SEND_DESCRIPTION_TO_REMOTE(string(sdp));
});

pc->onLocalCandidate([](const optional<Candidate> &candidate) {
    if (candidate) {
        MY_SEND_CANDIDATE_TO_REMOTE(candidate->candidate(), candidate->mid());
    } else {
        // Gathering finished
    }
});

MY_ON_RECV_DESCRIPTION_FROM_REMOTE([pc](string sdp) {
    pc->setRemoteDescription(Description(sdp));
});

MY_ON_RECV_CANDIDATE_FROM_REMOTE([pc](string candidate, string mid) {
    pc->addRemoteCandidate(Candidate(candidate, mid));
});

Create a DataChannel

auto dc = pc->createDataChannel("test");
dc->onOpen([]() {
    cout << "Open" << endl;
});
dc->onMessage([](variant<binary, string> message) {
    if (holds_alternative<string>(message)) {
        cout << "Received: " << get<string>(message) << endl;
    }
});

Receive a DataChannel

pc->onDataChannel([&dc](shared_ptr<DataChannel> dc) {
    dc->send("Hello world!");
});