#WebRTC #networking #p2p #tcp #udp #rtcpeerconnection
|
%!s(int64=6) %!d(string=hai) anos | |
---|---|---|
include | %!s(int64=6) %!d(string=hai) anos | |
src | %!s(int64=6) %!d(string=hai) anos | |
test | %!s(int64=6) %!d(string=hai) anos | |
usrsctp @ 04d617c9c1 | %!s(int64=6) %!d(string=hai) anos | |
.clang-format | %!s(int64=6) %!d(string=hai) anos | |
.editorconfig | %!s(int64=6) %!d(string=hai) anos | |
.gitignore | %!s(int64=6) %!d(string=hai) anos | |
.gitmodules | %!s(int64=6) %!d(string=hai) anos | |
LICENSE | %!s(int64=6) %!d(string=hai) anos | |
Makefile | %!s(int64=6) %!d(string=hai) anos | |
README.md | %!s(int64=6) %!d(string=hai) anos |
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.
Submodules:
git submodule update --init --recursive
make
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));
});
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;
}
});
pc->onDataChannel([&dc](shared_ptr<DataChannel> dc) {
dc->send("Hello world!");
});