The C++ wrapper of librist is creating a thin C++ layer around librist.
Requires cmake version >= 3.10, C++17, meson, ninja and googletest
The project is currently building on Linux and MacOS.
Release:
cmake -DCMAKE_BUILD_TYPE=Release .
cmake --build .
Debug:
cmake -DCMAKE_BUILD_TYPE=Debug .
cmake --build .
Output:
libristnet.a
A static RIST C++ wrapper library
rist_cpp
rist_cpp (executable) runs trough the unit tests and returns EXIT_SUCESS if all unit tests pass.
The rist-cpp > RISTNet class is divided into Receiver/Sender. The Receiver/Sender creation and configuration is detailed below.
Receiver:
//Create the receiver
RISTNetReceiver myRISTNetReceiver;
//Register the callbacks
//validate the connecting client
myRISTNetReceiver.validateConnectionCallback =
std::bind(&validateConnection, std::placeholders::_1, std::placeholders::_2);
//receive data from the client
myRISTNetReceiver.networkDataCallback =
std::bind(&dataFromSender, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4);
//Generate a vector of RIST URL's, ip(name), ports, RIST URL output, listen(true) or send mode (false)
std::string lURL;
std::vector<std::string> interfaceListReceiver;
if (RISTNetTools::buildRISTURL("0.0.0.0", "8000", lURL, true)) {
interfaceListReceiver.push_back(lURL);
}
if (RISTNetTools::buildRISTURL("0.0.0.0", "9000", lURL, true)) {
interfaceListReceiver.push_back(lURL);
}
//Populate the settings
RISTNetReceiver::RISTNetReceiverSettings myReceiveConfiguration;
//Initialize the receiver
if (!myRISTNetReceiver.initReceiver(interfaceListReceiver, myReceiveConfiguration)) {
std::cout << "Failed starting the server" << std::endl;
return EXIT_FAILURE;
}
Sender:
//Create a sender.
RISTNetSender myRISTNetSender;
//Generate a vector of RIST URL's, ip(name), ports, RIST URL output, listen(true) or send mode (false)
std::string lURL;
std::vector<std::tuple<std::string, int>> interfaceListSender;
if (RISTNetTools::buildRISTURL("127.0.0.1", "8000", lURL, false)) {
interfaceListSender.push_back(std::tuple<std::string, int>(lURL,5));
}
//Populate the settings
RISTNetSender::RISTNetSenderSettings mySendConfiguration;
myRISTNetSender.initSender(interfaceListSender, mySendConfiguration);
//Send data
myRISTNetSender.sendData((const uint8_t *) mydata.data(), mydata.size());
- Step1
Add this in your CMake file.
#Include libristnet
ExternalProject_Add(project_libristnet
GIT_REPOSITORY https://code.videolan.org/rist/rist-cpp.git
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ristwrap
BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ristwrap
GIT_PROGRESS 1
BUILD_COMMAND cmake --build ${CMAKE_CURRENT_SOURCE_DIR}/ristwrap --config ${CMAKE_BUILD_TYPE} --target ristnet
STEP_TARGETS build
EXCLUDE_FROM_ALL TRUE
INSTALL_COMMAND ""
)
add_library(ristnet STATIC IMPORTED)
set_property(TARGET ristnet PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/ristwrap/libristnet.a)
add_dependencies(ristnet project_libristnet)
#Pass information about where to find headers
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ristwrap/)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ristwrap/rist/inc/)
- Step2
Link your library or executable.
target_link_libraries((your target) ristnet ${CMAKE_CURRENT_SOURCE_DIR}/ristwrap/rist/librist.a (the rest you want to link))
- Step3
Add header file to your project.
#include "RISTNet.h"
You should now be able to use libristnet in your project and use any CMake supported IDE