C++14 evented IO libraries for high performance networking and media based applications

LibSourcey

C++ Networking Evolved

Circle CI Doxygen

LibSourcey is a collection of cross platform C++14 modules and classes that provide developers with an arsenal for rapidly developing high performance network based p2p and media streaming applications. Think of it as the power and performance of libuv combined with the features of FFmpeg, OpenCV and WebRTC, all integrated with the ease and readability of the stl (C++ Standard Library).

Basic features

  • Event-based IO — Core modules are built on top of libuv (the underlying C library that powers nodejs) and use event-based asynchronous IO throughout to maximize performance and minimize concurrency reliance for building mission critical native and server side apps.

  • Cross platform — The codebase is cross platform and should compile on any system with access to a modern C++14 compiler.

  • Modular libraries — Libraries are modular for easy integration into your existing projects, so you can just "include what you need" without incurring extra incumbent bloat.

  • Well tested — Core modules are well tested with unit tests and stress tested daily in production.

  • Clean and readable code — Modern C++ design principles have been adhered to throughout for clean and readable code.

  • Easy packaging and installation — LibSourcey can be compiled and installed on most platforms with CMake. For straight forward distribution and integration with existing projects the libraries be also packaged as a deb, rpm, tar.gz, zip, and more formats with a single command.

  • Docker images — Semantically versioned images are available on Docker Hub. Just type docker pull sourcey/libsourcey to grab the latest.

  • Solid networking layer — At the core of LibSourcey is a solid and blazing fast networking layer build on libuv and openssl primitives, with TCP, SSL and UDP socket implementations.

  • Web servers and clients — A HTTP stack is provided that includes servers, clients, WebSockets, media streaming, file transfers, and authentication. The HTTP parser is based on the super-fast C code used by nginx.

  • Media streaming and encoding — The av library consists of thin wrappers around FFmpeg and OpenCV for media capture, encoding, recording, streaming, analysis and more.

  • Realtime messaging — LibSourcey aims to bridge the gap between desktop, mobile and web by providing performance oriented messaging solutions that work across all platforms.

    • Socket.IO — Socket.IO C++ client that supports the latest protocol revision 4 (>= 1.0). Read more about Socket.IO.
    • Symple — Sourcey's home grown realtime messaging protocol that works over the top of Socket.IO to provide rostering, presence and many other features necessary for building online games and chat applications. More about Symple.
  • WebRTC support — WebRTC native support allows you to build p2p desktop and server side applications that inherit LibSourcey's realtime messaging and media capabilities. Take a look at the examples for how to stream live webcam and microphone streams to the browser, and also how to record live WebRTC streams on the server side.

Getting started

See the installation guides in the docs to get started playing with LibSourcey.

A few examples

What better way to get acquainted with a new library then with some tasty code examples.

HTTP echo server

Lets start with the classic HTTP echo server, which looks something like this:

http::Server srv{ "127.0.0.1", 1337 };
srv.Connection += [](http::ServerConnection::Ptr conn) {
    conn->Payload += [](http::ServerConnection& conn, const MutableBuffer& buffer) {
        conn.send(bufferCast<const char*>(buffer), buffer.size());
        conn.close();
    };
};
srv.start();

Pretty neat right? Its crazy fast too, especially on Linux kernel 3.9 or newer where its optimized to use of kernel level multicore socket load balancing. Don't take our word for it though, here are some benchmarks using wrk:

LibSourcey httpechoserver

$ wrk -d10s --timeout 2s http://localhost:1337
Running 10s test @ http://localhost:1337
  2 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   265.76us  472.62us  12.42ms   97.51%
    Req/Sec    18.84k     1.26k   21.57k    74.50%
  375060 requests in 10.01s, 20.39MB read
Requests/sec:  37461.50
Transfer/sec:      2.04MB

Nodejs echo server

$ wrk -d10s --timeout 2s http://localhost:1337
Running 10s test @ http://localhost:1337
  2 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   502.70us  715.11us  14.83ms   97.90%
    Req/Sec    11.69k     1.46k   14.52k    70.50%
  232667 requests in 10.01s, 21.97MB read
Requests/sec:  23236.33
Transfer/sec:      2.19MB

As you can see the httpechoserver is almost twice as fast as the dead simple nodejs echo server, which is not a bad performance gain over one of the web's leading technologies thats touted for it's performance. Check the httpechoserver sample for the full code, including the nodejs echo server we used for benchmarking.

Processes

Interacting with system processes and piping IO doesn't have to be painful. The following code will run the ping sourcey.com and with stdio and exit callbacks:

Process proc{ "ping", "sourcey.com" };
proc.onstdout = [](std::string line)
{
    // handle process output
};
proc.onexit = [](std::int64_t status)
{
    // handle process exit
};
proc.spawn();

// write some random data to the stdin pipe
proc.in() << "random data"

Packet Stream

A good starting point for learning LibSourcey is the PacketStream, which lets you create a dynamic delegate chain for piping, processing and outputting arbitrary data packets. This method of layering packet processors and makes it possible to develop complex data processing applications on the fly.

For example, the code below captures a live webcam stream, encodes it into H.264, and then finally broadcasts it in realtime over the internet:

// Create a PacketStream to pass packets from the
// input device captures -> encoder -> socket
PacketStream stream;

// Setup the encoder options
av::EncoderOptions options;
options.oformat = av::Format{"MP4", "mp4",
    { "H.264", "libx264", 640, 480, 25, 48000, 128000, "yuv420p" },
    { "AAC", "aac", 2, 44100, 64000, "fltp" }};

// Create a device manager instance to enumerate system devices
av::DeviceManager devman;
av::Device device;

// Create and attach the default video capture
av::VideoCapture::Ptr video;
if (devman.getDefaultCamera(device)) {
    video.open(device.id, 640, 480);
    video.getEncoderFormat(options.iformat);
    stream.attachSource(video, true);
}

// Create and attach the default audio capture
av::AudioCapture::Ptr audio;
if (devman.getDefaultMicrophone(device)) {
    audio.open(device.id, 2, 44100);
    audio.getEncoderFormat(options.iformat);
    stream.attachSource(audio, true);
}

// Create and attach the multiplex encoder
av::MultiplexPacketEncoder::Ptr encoder(options);
stream.attach(encoder);

// Attach the output net::Socket instance (instantiated elsewhere)
// to broadcast encoded packets over the network
stream.attach(socket);

// Start the stream
// This method call will start the device captures and begin
// pumping encoded media into the output socket
stream.start();

There are plenty more demos and sample code to play with over on the examples page.

Contributors

A massive thanks to everyone who has contributed to making LibSourcey awesome:

  • Kam Low (@auscaster) — Primary developer
  • Yury Shulbn (@yuryshubin) — iOS build toolchain and platform fixes
  • Vinci Xu (@VinciShark) — Windows documentation, testing and updates
  • Michael Fig (@michael-fig) — Fixed compiler flags to build without FFmpeg
  • Hyunuk Kim (@surinkim) — Fixed std::codecvt unicode character conversion on Windows
  • Damian Zelim (@ZelimDamian) — Fixed compiler flags for OS X build
  • Norm Ovenseri (@normano) — Added verbose logging output to build system
  • Alexey (@deilos) — Fixed cross-platform FFmpeg build script
  • Kryton (@Malesio) — Fixed segfaults in samples and tidied up Valgrind warnings

Contributing

Pull Requests are always welcome, so if you fix or make anything better then feel free to float a PR back upstream :)

  1. Fork LibSourcey on Github
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request
Comments
  • WebRTC recording with OpenCV integration?

    WebRTC recording with OpenCV integration?

    Bountysource

    Is there an example of using OpenCV to process frames from a live WebRTC video stream? As an example, say you wanted to perform some basic feature detection (e.g. canny edge detection) on frames as they streamed in from a WebRTC peer; how would you accomplish this with libsourcey?

    I noticed the WebRTC Native Video Recorder sample and this bit of code:

            Signaler app(options);
    
            Idler rtc(app.loop,
                      [](void* arg) {
                          // TraceL << "Running WebRTC loop" << endl;
                          auto thread = reinterpret_cast<rtc::Thread*>(arg);
                          thread->ProcessMessages(10);
                      },
                      rtc::Thread::Current());
    

    It's not clear to me though how I would integrate OpenCV to process frames as they were received. Is there something like a "frame received" event/object? Recording the stream is also desirable, so it seems like this example is a good place to start out, but I would also like to access the frames as images before they are recorded. Thanks.

  • macOS CMAKE error on symple app

    macOS CMAKE error on symple app

    When running CMAKE in macOS for the /libsourcey/src/symple app, see this error:

    CMake Error at CMakeLists.txt:1 (ask_build_sourcey_module): Unknown CMake command "ask_build_sourcey_module".

  • CMake error with FindWebRTC.cmake

    CMake error with FindWebRTC.cmake

    Hi, after #115 resolved, I pull the latest code. But it seems that release version of cmake have some prombles. I get the following error: CMake Error at cmake/FindWebRTC.cmake:114 (get_filename_component): get_filename_component called with incorrect number of arguments Call Stack (most recent call first): cmake/LibSourceyIncludes.cmake:47 (find_package) cmake/LibSourceyIncludes.cmake:90 (find_dependency) src/webrtc/CMakeLists.txt:4 (include_dependency) and Release of WEBRTC Variables looks like disk name is missing: -- Release Libraries: /Program Files (x86)/Microsoft Visual Studio 12.0/VC/lib/amd64/vccorlibd.lib;/Program Files (x86)/Microsoft Visual Studio 12.0/VC/lib/amd64/vcomp.lib;... So I think somewhere still have bugs?

  • Visual Studio 2015 compilation/linking errors

    Visual Studio 2015 compilation/linking errors

    Hello again, Thanks to the latest updates, I've been able to get further in building libsourcey, but I am still having difficulties at the final step. I can build WebRTC and have CMake detect it and generate the VS solution, but when I try to build the solution (in Debug or Release), I get a flurry of errors in several of the projects.

    I have successfully built WebRTC as described in https://github.com/sourcey/libsourcey/blob/master/doc/installation-windows.md (I am using branch-heads/57).

    Here is my CMake output:

    $ cmake .. -DCMAKE_BUILD_TYPE=DEBUG -DBUILD_SHARED_LIBS=ON -DBUILD_MODULES=ON -DBUILD_APPLICATIONS=ON -DBUILD_SAMPLES=ON -DBUILD_TESTS=ON -DWITH_FFMPEG=ON -DWITH_WEBRTC=ON -DWEBRTC_ROOT_DIR=E:/webrtc/003/webrtc-checkout/src
    -- Including module archo
    -- Including module test archotests
    -- Including dependency: FFmpeg
    -- Including module av
    -- Including dependency: FFmpeg
    -- Including module sample deviceenumerator
    -- Including dependency: FFmpeg
    -- Including module sample devicerecorder
    -- Including module test avtests
    -- Including module base
    -- Including module test basetests
    -- Including dependency: SSL
    -- Including BoringSSL
    -- Including dependency: WebRTC
    -- Including module crypto
    -- Including module test cryptotests
    -- Including dependency: SSL
    -- Including BoringSSL
    -- Including dependency: WebRTC
    -- Including module http
    -- Including module sample httpechoserver
    -- Including module test httptests
    -- Including module json
    -- Including dependency: SSL
    -- Including BoringSSL
    -- Including dependency: WebRTC
    -- Including module net
    -- Including module sample echoserver
    -- Including module test nettests
    -- Including module sched
    -- Including module test schedtests
    -- Including dependency: SSL
    -- Including BoringSSL
    -- Including dependency: WebRTC
    -- Including module socketio
    -- Including dependency: SSL
    -- Including BoringSSL
    -- Including dependency: WebRTC
    -- Including module test socketiotests
    -- Including dependency: SSL
    -- Including BoringSSL
    -- Including dependency: WebRTC
    -- Including module stun
    -- Including module test stuntests
    -- Including dependency: SSL
    -- Including BoringSSL
    -- Including dependency: WebRTC
    -- Including module symple
    -- Including module sample sympleconsole
    -- Including module test sympletests
    -- Including module turn
    -- Including module sample turnserver
    -- Including module test turnclienttest
    -- Including module util
    -- Including module uv
    -- Including dependency: WebRTC
    CMake Warning at src/webrtc/CMakeLists.txt:7 (message):
      Compiling WebRTC libraries with `BUILD_SHARED_LIBS=OFF` is recommended
    
    
    -- Including module webrtc
    -- Including dependency: WebRTC
    -- Including dependency: FFmpeg
    -- Including module sample webrtcstreamer
    -- Including dependency: WebRTC
    -- Including dependency: FFmpeg
    -- Including module sample webrtcrecorder
    -- Parsing 'libsourcey.h.cmake'
    --
    --   Platform:
    --     Host:                        Windows 10.0.14393 AMD64
    --     CMake:                       3.7.0-rc1
    --     CMake generator:             Visual Studio 14 2015 Win64
    --     CMake build tool:            C:/Program Files (x86)/MSBuild/14.0/bin/MSBuild.exe
    --     MSVC:                        1900
    --
    --   C/C++:
    --     Built as dynamic libs?:      YES
    --     C++ Compiler:                C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
    --     C++ flags (Release):         /DWIN32 /D_WINDOWS /W4 /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /wd4251 /MD /O2 /Ob2 /DNDEBUG   /Zi
    --     C++ flags (Debug):           /DWIN32 /D_WINDOWS /W4 /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /wd4251 /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
    --     C Compiler:                  C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/x86_amd64/cl.exe
    --     C flags (Release):           /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /MD /O2 /Ob2 /DNDEBUG  /Zi
    --     C flags (Debug):             /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
    --     Linker flags (Release):      /machine:x64  /SAFESEH:NO /INCREMENTAL:NO  /debug
    --     Linker flags (Debug):        /machine:x64  /SAFESEH:NO /debug /INCREMENTAL
    --
    --   Build Components:
    --
    --      Dependencies:               libuv;zlib;minizip;http_parser
    --      Modules:                    archo;av;base;crypto;http;json;net;sched;socketio;stun;symple;turn;util;uv;webrtc
    --      Applications:
    --      Samples:                    av;http;net;socketio;symple;turn;webrtc
    --      Tests:                      archo;av;base;crypto;http;net;sched;socketio;stun;symple;turn
    --
    --   Other third-party libraries:
    --
    --     Use OpenSSL:                 YES
    --     Use FFmpeg:                  YES
    --     Use OpenCV:                  NO
    --     Use WebRTC:                  YES
    --     Use Poco:                    NO
    --     Use wxWidgets:               NO
    --
    --     Install path:                E:/Libs/libsourcey/build/install
    --
    --     libsourcey.h is in:          E:/Libs/libsourcey/build/install/include/libsourcey.h
    -- -----------------------------------------------------------------
    --
    -- Configuring done
    -- Generating done
    -- Build files have been written to: E:/Libs/libsourcey/build
    

    Some of the libsourcey projects (e.g. "base") compile just fine, but others do not. Here is a sampling of the ~800 errors VS spits out at me:

    13>------ Build started: Project: basetests, Configuration: Debug x64 ------
    9>  cipher.cpp
    10>  configuration.cpp
    11>  audiobuffer.cpp
    12>  zipfile.cpp
    13>  basetests.cpp
    11>  audiocapture.cpp
    9>  crypto.cpp
    12>     Creating library E:/Libs/libsourcey/build/archo/Debug/scy_archod.lib and object E:/Libs/libsourcey/build/archo/Debug/scy_archod.exp
    12>zipfile.obj : error LNK2019: unresolved external symbol "public: __cdecl scy::LogStream::LogStream(enum scy::LogLevel,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,void const *,char const *)" ([email protected]@@[email protected]@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) referenced in function "public: void __cdecl scy::archo::ZipFile::extract(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected]@[email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z)
    12>zipfile.obj : error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl scy::fs::dirname(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) referenced in function "public: bool __cdecl scy::archo::ZipFile::extractCurrentFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" ([email protected]@[email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected])
    12>zipfile.obj : error LNK2019: unresolved external symbol "void __cdecl scy::fs::mkdirr(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) referenced in function "public: bool __cdecl scy::archo::ZipFile::extractCurrentFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" ([email protected]@[email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected])
    12>zipfile.obj : error LNK2019: unresolved external symbol "void __cdecl scy::fs::addnode(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) referenced in function "public: bool __cdecl scy::archo::ZipFile::extractCurrentFile(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,bool)" ([email protected]@[email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected])
    12>zipfile.obj : error LNK2019: unresolved external symbol "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl scy::fs::transcode(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected]@[email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z) referenced in function "public: void __cdecl scy::archo::ZipFile::open(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" ([email protected]@[email protected]@@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z)
    12>zipfile.obj : error LNK2001: unresolved external symbol "char const scy::fs::delimiter" ([email protected]@[email protected]@3DB)
    12>E:\Libs\libsourcey\build\archo\Debug\scy_archod.dll : fatal error LNK1120: 6 unresolved externals
    
    9>E:\Libs\libsourcey\src\crypto\include\scy/crypto/x509certificate.h(98): error C2039: 'set': is not a member of 'std'
    9>  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iostream(12): note: see declaration of 'std'
    9>E:\Libs\libsourcey\src\crypto\include\scy/crypto/x509certificate.h(98): error C2061: syntax error: identifier 'set'
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(229): error C2039: 'set': is not a member of 'std'
    9>  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\iostream(12): note: see declaration of 'std'
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(229): error C2061: syntax error: identifier 'set'
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(231): error C2065: 'domainNames': undeclared identifier
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(231): error C2228: left of '.clear' must have class/struct/union
    9>  E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(231): note: type is 'unknown-type'
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(240): error C2065: 'domainNames': undeclared identifier
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(240): error C2228: left of '.insert' must have class/struct/union
    9>  E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(240): note: type is 'unknown-type'
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(247): error C2065: 'domainNames': undeclared identifier
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(247): error C2228: left of '.empty' must have class/struct/union
    9>  E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(247): note: type is 'unknown-type'
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(248): error C2065: 'domainNames': undeclared identifier
    9>E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(248): error C2228: left of '.insert' must have class/struct/union
    9>  E:\Libs\libsourcey\src\crypto\src\x509certificate.cpp(248): note: type is 'unknown-type'
    

    I suspect there is something related to the recent work in exchanging OpenSSL with BoringSSL and trying to exclude these x509 certificates that was incomplete.

    Please let me know if there is more data/logs I can provide you. Thanks!

  • CMake cannot find custom WebRTC build

    CMake cannot find custom WebRTC build

    I built WebRTC in Gentoo with my own scripts, and trying to build with setting WEBRTC_ROOT_DIR, here it is:

    cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_SHARED_LIBS=OFF \
    -DBUILD_APPLICATIONS=OFF -DBUILD_MODULES=OFF \
    -DBUILD_SAMPLES=OFF -DBUILD_TESTS=ON \
    -DBUILD_MODULE_base=ON -DBUILD_MODULE_crypto=ON \
    -DBUILD_MODULE_http=ON -DBUILD_MODULE_json=ON \
    -DBUILD_MODULE_av=ON -DBUILD_MODULE_net=ON \
    -DBUILD_MODULE_socketio=ON -DBUILD_MODULE_stun=ON \
    -DBUILD_MODULE_symple=ON -DBUILD_MODULE_turn=ON \
    -DBUILD_MODULE_util=ON -DBUILD_MODULE_webrtc=ON \
    -DWITH_WEBRTC=ON -DWEBRTC_ROOT_DIR=/home/artem/webrtc-checkout/src \
    -DWITH_FFMPEG=OFF -DWITH_OPENCV=OFF \
    -DBUILD_MODULE_archo=OFF -DBUILD_MODULE_pacm=OFF \
    -DBUILD_MODULE_pluga=OFF -DBUILD_MODULE_sked=OFF
    
    ...
    
    -- Could NOT find WEBRTC (missing:  WEBRTC_LIBRARIES) 
    CMake Error at cmake/LibSourceyIncludes.cmake:72 (message):
      Failed to include dependency: WebRTC.  Please build and install
      dependencies before using CMake.
    Call Stack (most recent call first):
      LibSourcey.cmake:243 (find_dependency)
      CMakeLists.txt:35 (include)
    ...
    

    Commit 23e72cfd6c3e8369494fbf344433c64ecc255fe7 CMake 3.5.2

    And it seems that commenting this line helps: https://github.com/sourcey/libsourcey/blob/master/cmake/FindWebRTC.cmake#L168

  • Compile on Linux with SAMPLES_webrtc

    Compile on Linux with SAMPLES_webrtc

    Hello,

    I try to cmake with this command: (if building on the current master checkout)

    cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DWITH_WEBRTC=ON -DBUILD_SAMPLES_webrtc=ON -DWITH_FFMPEG=ON \ -DWEBRTC_ROOT_DIR=~/tmp/webrtcbuilds/out/webrtcbuilds-17821-fd68d65-linux-x64/ -DBUILD_SHARED_LIBS=OFF

    After running

    make

    I got Error:

    Linking CXX executable stuntests
    ~/tmp/webrtcbuilds/out/webrtcbuilds-17821-fd68d65-linux-x64/lib/x64/Release/libwebrtc_full.a: error adding symbols: Malformed archive
    

    If I used previous commit I got

    Linking CXX executable stuntests
    /usr/bin/ld: ~/tmp/webrtcbuilds/out/src/out/x64/Release/obj/third_party/boringssl/boringssl/cpu-intel.o: unrecognized relocation (0x2a) in section `.text.OPENSSL_cpuid_setup'
    /usr/bin/ld: final link failed: Bad value
    collect2: error: ld returned 1 exit status
    make[2]: *** [stun/tests/stuntests] Error 1
    make[1]: *** [stun/tests/CMakeFiles/stuntests.dir/all] Error 2
    make: *** [all] Error 2
    

    May be something wrong with my libc6?

    dpkg -l | grep libc6
    ii  libc6:amd64                           2.19-0ubuntu6.11                      amd64        Embedded GNU C Library: Shared libraries
    ii  libc6-dev:amd64                       2.19-0ubuntu6.11                      amd64        Embedded GNU C Library: Development Libraries and Header Files
    ii  libc6-i386                            2.19-0ubuntu6.11                      amd64        Embedded GNU C Library: 32-bit shared libraries for AMD64
    

    Thanks for any help.

  • WebRTC troubles

    WebRTC troubles

    Hi! That's not actually an issue, but could you please provide an external repo or just some archive with Debug and Release WebRTC binaries(Visual Studio 2015) that libsourcey could be linked with? Thanks!

  • Replacing adapters leads to crash (when overriding `onSocketRecv`)

    Replacing adapters leads to crash (when overriding `onSocketRecv`)

    Hello Kam,

    I've been testing some things with the HTTP module, and so I tried to implement some multi-request connection adapter thingy. The one-time use nature of the current implementation isn't really convenient, especially when dealing with a REST API. Although replacing the default ConnectionAdapter instance with a Websocket adapter works pretty well, this snippet leads to a segfault :

    ClientConnection::Ptr connection = createConnection(u);
    connection->replaceAdapter(new ConnectionAdapter(connection.get(), HTTP_RESPONSE));
    connection->request().setURI("/");
    connection->request().setHost(u.host(), u.port());
    connection->send();
    

    where u is here an instance of URL. I obviously call waitForShutdown so there isn't any destroyed pending operation. I also noticed that this replaceAdapter call is the same as the one in the ClientConnection constructor.

    More details about the crash

    Debugger reported that this is caused by dereferencing a null pointer, occuring in onSocketRecv of some SocketAdapter instance. The ptr member of ref is showed as a null pointer, even though the alive field is true. That means the pointer is deleted somewhere, and the alive flag isn't toggled to false.

    I'm tempted to think that something is broken in the replaceAdapter method, which sounds somewhat weird, mainly because the Websocket adapter is working just fine. I'll do some further investigation, though.

    Note: when run with Valgrind, the crash somehow doesn't seem to happen.

  • Cast from pointer to smaller type 'int' loses information

    Cast from pointer to smaller type 'int' loses information

    "In file scy/signal.h:160:26: Cast from pointer to smaller type 'int' loses information".

    From my point of view it's inappropriate conversion for 64bit architecture like this:

    void* empty = 0;
    int value = (int)empty;
    
  • MacOS 10.12 compile error

    MacOS 10.12 compile error

    Hi there, I'm trying to build libsourcy on MacOS 10.12 with WEBRTC ON, after changing the FindWebRTC.cmake, Makefile generated successful. Clang genenarated Unsupported platform error, BTW, I used the webrtcbuilds to compile webrtc. Added some #define WEBRTC_POSIX WEBRTC_MAC, error gone. Then comes the following

    In file included from /Users/qulyf/Github/libsourcey/src/webrtc/src/streamrecorder.cpp:12: In file included from /Users/qulyf/Github/libsourcey/src/webrtc/include/scy/webrtc/streamrecorder.h:21: In file included from /Users/qulyf/Github/libsourcey/src/av/include/scy/av/multiplexencoder.h:20: In file included from /Users/qulyf/Github/libsourcey/src/av/include/scy/av/audioencoder.h:21: In file included from /Users/qulyf/Github/libsourcey/src/av/include/scy/av/audiocontext.h:23: In file included from /Users/qulyf/Github/libsourcey/src/av/include/scy/av/fpscounter.h:16: In file included from /Users/qulyf/Github/libsourcey/src/base/include/scy/packetstream.h:19: In file included from /Users/qulyf/Github/libsourcey/src/base/include/scy/memory.h:18: /Users/qulyf/Github/libsourcey/src/base/include/scy/timer.h:52:10: warning: 'start' overrides a member function but is not marked 'override' [-Winconsistent-missing-override] void start(std::function<void()> func); ^ /Users/qulyf/Github/libsourcey/src/base/include/scy/runner.h:44:18: note: overridden virtual function is here virtual void start(std::function<void()> target) = 0; ^ In file included from /Users/qulyf/Github/libsourcey/src/webrtc/src/streamrecorder.cpp:12: In file included from /Users/qulyf/Github/libsourcey/src/webrtc/include/scy/webrtc/streamrecorder.h:21: /Users/qulyf/Github/libsourcey/src/av/include/scy/av/multiplexencoder.h:81:21: warning: 'options' overrides a member function but is not marked 'override' [-Winconsistent-missing-override] EncoderOptions& options(); ^ /Users/qulyf/Github/libsourcey/src/av/include/scy/av/iencoder.h:94:29: note: overridden virtual function is here virtual EncoderOptions& options() = 0; ^ /Users/qulyf/Github/libsourcey/src/webrtc/src/streamrecorder.cpp:92:67: error: no member named 'DataY' in 'webrtc::VideoFrameBuffer' frame->data[0] = (uint8_t*)yuvframe.video_frame_buffer()->DataY(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ /Users/qulyf/Github/libsourcey/src/webrtc/src/streamrecorder.cpp:93:67: error: no member named 'DataU' in 'webrtc::VideoFrameBuffer' frame->data[1] = (uint8_t*)yuvframe.video_frame_buffer()->DataU(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ /Users/qulyf/Github/libsourcey/src/webrtc/src/streamrecorder.cpp:94:67: error: no member named 'DataV' in 'webrtc::VideoFrameBuffer' frame->data[2] = (uint8_t*)yuvframe.video_frame_buffer()->DataV(); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ 5 warnings and 3 errors generated. make[2]: *** [webrtc/CMakeFiles/webrtc.dir/src/streamrecorder.cpp.o] Error 1 make[1]: *** [webrtc/CMakeFiles/webrtc.dir/all] Error 2 make: *** [all] Error 2

    Stucked. Any help would be much appreciated. Thanks

  • Fatal error in webrtcstreamer sample

    Fatal error in webrtcstreamer sample

    After building the webrtcstreamer example and running it I get the following error from webrtcstreamerd when trying to play the stream:

    [000:209] [32046] (channel.cc:1805): Changing voice state, recv=0 send=1
    
    
    #
    # Fatal error in ../../../webrtc/voice_engine/voe_base_impl.cc, line 91
    # last system error: 0
    # Check failed: 2 * number_of_channels == bytes_per_sample (4 vs. 2)
    # 
    #
    [000:209] [32046] (video_send_stream.cc:665): VideoSendStream::Start
    [000:209] [32068] (video_send_stream.cc:918): VideoSendStream::Start
    [000:209] [32046] (channel.cc:2063): Changing video state, send=1
    [000:210] [32077] (vie_encoder.cc:788): Video suspend state changed to: not suspended
    
    ==== C stack trace ===============================
    
    ./webrtcstreamerd(+0x4d17fb) [0x55e119f937fb]
    ./webrtcstreamerd(+0x9cfb40) [0x55e11a491b40]
    ./webrtcstreamerd(+0x9cff57) [0x55e11a491f57]
    ./webrtcstreamerd(+0xe92f7f) [0x55e11a954f7f]
     5: scy::wrtc::AudioPacketModule::sendFrameP()
     6: scy::wrtc::AudioPacketModule::processFrameP()
     7: scy::wrtc::AudioPacketModule::startProcessP()
     8: scy::wrtc::AudioPacketModule::OnMessage(rtc::Message*)
    ./webrtcstreamerd(+0x4a7030) [0x55e119f69030]
    ./webrtcstreamerd(+0x46fe1a) [0x55e119f31e1a]
    ./webrtcstreamerd(+0x46fd4a) [0x55e119f31d4a]
    ./webrtcstreamerd(+0x46fa97) [0x55e119f31a97]
    /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ca) [0x7f30f7a376ca]
    14: clone
    [1]    32043 abort (core dumped)  ./webrtcstreamerd
    
  • Bump engine.io from 1.8.5 to 6.2.1 in /src/av/samples/mediaserver/client

    Bump engine.io from 1.8.5 to 6.2.1 in /src/av/samples/mediaserver/client

    Bumps engine.io from 1.8.5 to 6.2.1.

    Release notes

    Sourced from engine.io's releases.

    6.2.1

    :warning: This release contains an important security fix :warning:

    A malicious client could send a specially crafted HTTP request, triggering an uncaught exception and killing the Node.js process:

    Error: read ECONNRESET
        at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
    Emitted 'error' event on Socket instance at:
        at emitErrorNT (internal/streams/destroy.js:106:8)
        at emitErrorCloseNT (internal/streams/destroy.js:74:3)
        at processTicksAndRejections (internal/process/task_queues.js:80:21) {
      errno: -104,
      code: 'ECONNRESET',
      syscall: 'read'
    }
    

    Please upgrade as soon as possible.

    Bug Fixes

    • catch errors when destroying invalid upgrades (#658) (425e833)

    6.2.0

    Features

    • add the "maxPayload" field in the handshake details (088dcb4)

    So that clients in HTTP long-polling can decide how many packets they have to send to stay under the maxHttpBufferSize value.

    This is a backward compatible change which should not mandate a new major revision of the protocol (we stay in v4), as we only add a field in the JSON-encoded handshake data:

    0{"sid":"lv_VI97HAXpY6yYWAAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000,"maxPayload":1000000}
    

    Links

    6.1.3

    Bug Fixes

    • typings: allow CorsOptionsDelegate as cors options (#641) (a463d26)
    • uws: properly handle chunked content (#642) (3367440)

    ... (truncated)

    Changelog

    Sourced from engine.io's changelog.

    6.2.1 (2022-11-20)

    :warning: This release contains an important security fix :warning:

    A malicious client could send a specially crafted HTTP request, triggering an uncaught exception and killing the Node.js process:

    Error: read ECONNRESET
        at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
    Emitted 'error' event on Socket instance at:
        at emitErrorNT (internal/streams/destroy.js:106:8)
        at emitErrorCloseNT (internal/streams/destroy.js:74:3)
        at processTicksAndRejections (internal/process/task_queues.js:80:21) {
      errno: -104,
      code: 'ECONNRESET',
      syscall: 'read'
    }
    

    Please upgrade as soon as possible.

    Bug Fixes

    • catch errors when destroying invalid upgrades (#658) (425e833)

    3.6.0 (2022-06-06)

    Bug Fixes

    Features

    • decrease the default value of maxHttpBufferSize (58e274c)

    This change reduces the default value from 100 mb to a more sane 1 mb.

    This helps protect the server against denial of service attacks by malicious clients sending huge amounts of data.

    See also: https://github.com/advisories/GHSA-j4f2-536g-r55m

    • increase the default value of pingTimeout (f55a79a)

    ... (truncated)

    Commits
    • 24b847b chore(release): 6.2.1
    • 425e833 fix: catch errors when destroying invalid upgrades (#658)
    • 99adb00 chore(deps): bump xmlhttprequest-ssl and engine.io-client in /examples/latenc...
    • d196f6a chore(deps): bump minimatch from 3.0.4 to 3.1.2 (#660)
    • 7c1270f chore(deps): bump nanoid from 3.1.25 to 3.3.1 (#659)
    • 535a01d ci: add Node.js 18 in the test matrix
    • 1b71a6f docs: remove "Vanilla JS" highlight from README (#656)
    • 917d1d2 refactor: replace deprecated String.prototype.substr() (#646)
    • 020801a chore: add changelog for version 3.6.0
    • ed1d6f9 test: make test script work on Windows (#643)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump engine.io from 1.8.5 to 6.2.1 in /src/webrtc/samples/webrtcstreamer/client

    Bump engine.io from 1.8.5 to 6.2.1 in /src/webrtc/samples/webrtcstreamer/client

    Bumps engine.io from 1.8.5 to 6.2.1.

    Release notes

    Sourced from engine.io's releases.

    6.2.1

    :warning: This release contains an important security fix :warning:

    A malicious client could send a specially crafted HTTP request, triggering an uncaught exception and killing the Node.js process:

    Error: read ECONNRESET
        at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
    Emitted 'error' event on Socket instance at:
        at emitErrorNT (internal/streams/destroy.js:106:8)
        at emitErrorCloseNT (internal/streams/destroy.js:74:3)
        at processTicksAndRejections (internal/process/task_queues.js:80:21) {
      errno: -104,
      code: 'ECONNRESET',
      syscall: 'read'
    }
    

    Please upgrade as soon as possible.

    Bug Fixes

    • catch errors when destroying invalid upgrades (#658) (425e833)

    6.2.0

    Features

    • add the "maxPayload" field in the handshake details (088dcb4)

    So that clients in HTTP long-polling can decide how many packets they have to send to stay under the maxHttpBufferSize value.

    This is a backward compatible change which should not mandate a new major revision of the protocol (we stay in v4), as we only add a field in the JSON-encoded handshake data:

    0{"sid":"lv_VI97HAXpY6yYWAAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000,"maxPayload":1000000}
    

    Links

    6.1.3

    Bug Fixes

    • typings: allow CorsOptionsDelegate as cors options (#641) (a463d26)
    • uws: properly handle chunked content (#642) (3367440)

    ... (truncated)

    Changelog

    Sourced from engine.io's changelog.

    6.2.1 (2022-11-20)

    :warning: This release contains an important security fix :warning:

    A malicious client could send a specially crafted HTTP request, triggering an uncaught exception and killing the Node.js process:

    Error: read ECONNRESET
        at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
    Emitted 'error' event on Socket instance at:
        at emitErrorNT (internal/streams/destroy.js:106:8)
        at emitErrorCloseNT (internal/streams/destroy.js:74:3)
        at processTicksAndRejections (internal/process/task_queues.js:80:21) {
      errno: -104,
      code: 'ECONNRESET',
      syscall: 'read'
    }
    

    Please upgrade as soon as possible.

    Bug Fixes

    • catch errors when destroying invalid upgrades (#658) (425e833)

    3.6.0 (2022-06-06)

    Bug Fixes

    Features

    • decrease the default value of maxHttpBufferSize (58e274c)

    This change reduces the default value from 100 mb to a more sane 1 mb.

    This helps protect the server against denial of service attacks by malicious clients sending huge amounts of data.

    See also: https://github.com/advisories/GHSA-j4f2-536g-r55m

    • increase the default value of pingTimeout (f55a79a)

    ... (truncated)

    Commits
    • 24b847b chore(release): 6.2.1
    • 425e833 fix: catch errors when destroying invalid upgrades (#658)
    • 99adb00 chore(deps): bump xmlhttprequest-ssl and engine.io-client in /examples/latenc...
    • d196f6a chore(deps): bump minimatch from 3.0.4 to 3.1.2 (#660)
    • 7c1270f chore(deps): bump nanoid from 3.1.25 to 3.3.1 (#659)
    • 535a01d ci: add Node.js 18 in the test matrix
    • 1b71a6f docs: remove "Vanilla JS" highlight from README (#656)
    • 917d1d2 refactor: replace deprecated String.prototype.substr() (#646)
    • 020801a chore: add changelog for version 3.6.0
    • ed1d6f9 test: make test script work on Windows (#643)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump engine.io from 1.8.5 to 6.2.1 in /src/webrtc/samples/webrtccapturer/client

    Bump engine.io from 1.8.5 to 6.2.1 in /src/webrtc/samples/webrtccapturer/client

    Bumps engine.io from 1.8.5 to 6.2.1.

    Release notes

    Sourced from engine.io's releases.

    6.2.1

    :warning: This release contains an important security fix :warning:

    A malicious client could send a specially crafted HTTP request, triggering an uncaught exception and killing the Node.js process:

    Error: read ECONNRESET
        at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
    Emitted 'error' event on Socket instance at:
        at emitErrorNT (internal/streams/destroy.js:106:8)
        at emitErrorCloseNT (internal/streams/destroy.js:74:3)
        at processTicksAndRejections (internal/process/task_queues.js:80:21) {
      errno: -104,
      code: 'ECONNRESET',
      syscall: 'read'
    }
    

    Please upgrade as soon as possible.

    Bug Fixes

    • catch errors when destroying invalid upgrades (#658) (425e833)

    6.2.0

    Features

    • add the "maxPayload" field in the handshake details (088dcb4)

    So that clients in HTTP long-polling can decide how many packets they have to send to stay under the maxHttpBufferSize value.

    This is a backward compatible change which should not mandate a new major revision of the protocol (we stay in v4), as we only add a field in the JSON-encoded handshake data:

    0{"sid":"lv_VI97HAXpY6yYWAAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000,"maxPayload":1000000}
    

    Links

    6.1.3

    Bug Fixes

    • typings: allow CorsOptionsDelegate as cors options (#641) (a463d26)
    • uws: properly handle chunked content (#642) (3367440)

    ... (truncated)

    Changelog

    Sourced from engine.io's changelog.

    6.2.1 (2022-11-20)

    :warning: This release contains an important security fix :warning:

    A malicious client could send a specially crafted HTTP request, triggering an uncaught exception and killing the Node.js process:

    Error: read ECONNRESET
        at TCP.onStreamRead (internal/stream_base_commons.js:209:20)
    Emitted 'error' event on Socket instance at:
        at emitErrorNT (internal/streams/destroy.js:106:8)
        at emitErrorCloseNT (internal/streams/destroy.js:74:3)
        at processTicksAndRejections (internal/process/task_queues.js:80:21) {
      errno: -104,
      code: 'ECONNRESET',
      syscall: 'read'
    }
    

    Please upgrade as soon as possible.

    Bug Fixes

    • catch errors when destroying invalid upgrades (#658) (425e833)

    3.6.0 (2022-06-06)

    Bug Fixes

    Features

    • decrease the default value of maxHttpBufferSize (58e274c)

    This change reduces the default value from 100 mb to a more sane 1 mb.

    This helps protect the server against denial of service attacks by malicious clients sending huge amounts of data.

    See also: https://github.com/advisories/GHSA-j4f2-536g-r55m

    • increase the default value of pingTimeout (f55a79a)

    ... (truncated)

    Commits
    • 24b847b chore(release): 6.2.1
    • 425e833 fix: catch errors when destroying invalid upgrades (#658)
    • 99adb00 chore(deps): bump xmlhttprequest-ssl and engine.io-client in /examples/latenc...
    • d196f6a chore(deps): bump minimatch from 3.0.4 to 3.1.2 (#660)
    • 7c1270f chore(deps): bump nanoid from 3.1.25 to 3.3.1 (#659)
    • 535a01d ci: add Node.js 18 in the test matrix
    • 1b71a6f docs: remove "Vanilla JS" highlight from README (#656)
    • 917d1d2 refactor: replace deprecated String.prototype.substr() (#646)
    • 020801a chore: add changelog for version 3.6.0
    • ed1d6f9 test: make test script work on Windows (#643)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump socket.io-parser and socket.io-client in /src/av/samples/mediaserver/client

    Bump socket.io-parser and socket.io-client in /src/av/samples/mediaserver/client

    Bumps socket.io-parser and socket.io-client. These dependencies needed to be updated together. Updates socket.io-parser from 2.2.2 to 4.2.1

    Release notes

    Sourced from socket.io-parser's releases.

    4.2.1

    Bug Fixes

    • check the format of the index of each attachment (b5d0cb7)

    Links

    4.2.0

    Features

    • allow the usage of custom replacer and reviver (#112) (b08bc1a)

    Links

    4.1.2

    Bug Fixes

    • allow objects with a null prototype in binary packets (#114) (7f6b262)

    Links

    4.1.1

    Links

    4.1.0

    Features

    • provide an ESM build with and without debug (388c616)

    Links

    4.0.5

    Bug Fixes

    • check the format of the index of each attachment (b559f05)

    Links

    ... (truncated)

    Changelog

    Sourced from socket.io-parser's changelog.

    4.2.1 (2022-06-27)

    Bug Fixes

    • check the format of the index of each attachment (b5d0cb7)

    4.2.0 (2022-04-17)

    Features

    • allow the usage of custom replacer and reviver (#112) (b08bc1a)

    4.1.2 (2022-02-17)

    Bug Fixes

    • allow objects with a null prototype in binary packets (#114) (7f6b262)

    4.1.1 (2021-10-14)

    4.1.0 (2021-10-11)

    Features

    • provide an ESM build with and without debug (388c616)

    4.0.4 (2021-01-15)

    Bug Fixes

    • allow integers as event names (1c220dd)

    4.0.3 (2021-01-05)

    4.0.2 (2020-11-25)

    ... (truncated)

    Commits
    • 5a2ccff chore(release): 4.2.1
    • b5d0cb7 fix: check the format of the index of each attachment
    • c7514b5 chore(release): 4.2.0
    • 931f152 chore: add Node.js 16 in the test matrix
    • 6c9cb27 chore: bump @​socket.io/component-emitter to version 3.1.0
    • b08bc1a feat: allow the usage of custom replacer and reviver (#112)
    • aed252c chore(release): 4.1.2
    • 89209fa chore: bump cached-path-relative from 1.0.2 to 1.1.0 (#113)
    • 0a3b556 chore: bump path-parse from 1.0.6 to 1.0.7 (#108)
    • 7f6b262 fix: allow objects with a null prototype in binary packets (#114)
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by darrachequesne, a new releaser for socket.io-parser since your current version.


    Updates socket.io-client from 2.0.4 to 4.5.3

    Release notes

    Sourced from socket.io-client's releases.

    4.5.3

    Bug Fixes

    • do not swallow user exceptions (2403b88)

    Links:

    Size of the bundles:

    min min+gzip
    socket.io.min.js 42.6 KB (-) 13.6 KB (-)
    socket.io.msgpack.min.js 47.7 KB (-) 14.6 KB (-)
    socket.io.esm.min.js 34.5 KB (-) 11.5 KB (-)

    4.5.2

    Bug Fixes

    • handle ill-formatted packet from server (c597023)

    Links:

    Size of the bundles:

    min min+gzip
    socket.io.min.js 42.6 KB (-) 13.6 KB (-)
    socket.io.msgpack.min.js 47.7 KB (-) 14.6 KB (-)
    socket.io.esm.min.js 34.5 KB (-) 11.5 KB (-)

    4.5.1

    There were some minor bug fixes on the server side, which mandate a client bump.

    Links:

    ... (truncated)

    Changelog

    Sourced from socket.io-client's changelog.

    4.5.3 (2022-10-15)

    Bug Fixes

    • do not swallow user exceptions (2403b88)

    4.5.2 (2022-09-02)

    Bug Fixes

    • handle ill-formatted packet from server (c597023)

    4.5.1 (2022-05-17)

    There were some minor bug fixes on the server side, which mandate a client bump.

    4.5.0 (2022-04-23)

    Features

    • add details to the disconnect event (b862924)

    The "disconnect" event will now include additional details to help debugging if anything has gone wrong.

    Example when a payload is over the maxHttpBufferSize value in HTTP long-polling mode:

    socket.on("disconnect", (reason, details) => {
      console.log(reason); // "transport error"
    

    // in that case, details is an error object console.log(details.message); "xhr post error" console.log(details.description); // 413 (the HTTP status of the response)

    // details.context refers to the XMLHttpRequest object console.log(details.context.status); // 413 console.log(details.context.responseText); // "" });

    • add support for catch-all listeners for outgoing packets (74e3e60)

    ... (truncated)

    Commits
    • 2eca8da chore(release): 4.5.3
    • 7c05688 docs: add jsdoc for each public method
    • 2403b88 fix: do not swallow user exceptions
    • 1098618 ci: temporarily remove iOS 16 from the test matrix
    • 2d70813 chore(release): 4.5.2
    • c597023 fix: handle ill-formatted packet from server
    • 8c659bc chore: regenerate lockfile
    • f0350a0 chore(release): 4.5.1
    • abdba07 chore(release): 4.5.0
    • faf68a5 chore: update default label for bug reports
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump socket.io-parser and socket.io-client in /src/webrtc/samples/webrtccapturer/client

    Bump socket.io-parser and socket.io-client in /src/webrtc/samples/webrtccapturer/client

    Bumps socket.io-parser and socket.io-client. These dependencies needed to be updated together. Updates socket.io-parser from 2.2.2 to 4.2.1

    Release notes

    Sourced from socket.io-parser's releases.

    4.2.1

    Bug Fixes

    • check the format of the index of each attachment (b5d0cb7)

    Links

    4.2.0

    Features

    • allow the usage of custom replacer and reviver (#112) (b08bc1a)

    Links

    4.1.2

    Bug Fixes

    • allow objects with a null prototype in binary packets (#114) (7f6b262)

    Links

    4.1.1

    Links

    4.1.0

    Features

    • provide an ESM build with and without debug (388c616)

    Links

    4.0.5

    Bug Fixes

    • check the format of the index of each attachment (b559f05)

    Links

    ... (truncated)

    Changelog

    Sourced from socket.io-parser's changelog.

    4.2.1 (2022-06-27)

    Bug Fixes

    • check the format of the index of each attachment (b5d0cb7)

    4.2.0 (2022-04-17)

    Features

    • allow the usage of custom replacer and reviver (#112) (b08bc1a)

    4.1.2 (2022-02-17)

    Bug Fixes

    • allow objects with a null prototype in binary packets (#114) (7f6b262)

    4.1.1 (2021-10-14)

    4.1.0 (2021-10-11)

    Features

    • provide an ESM build with and without debug (388c616)

    4.0.4 (2021-01-15)

    Bug Fixes

    • allow integers as event names (1c220dd)

    4.0.3 (2021-01-05)

    4.0.2 (2020-11-25)

    ... (truncated)

    Commits
    • 5a2ccff chore(release): 4.2.1
    • b5d0cb7 fix: check the format of the index of each attachment
    • c7514b5 chore(release): 4.2.0
    • 931f152 chore: add Node.js 16 in the test matrix
    • 6c9cb27 chore: bump @​socket.io/component-emitter to version 3.1.0
    • b08bc1a feat: allow the usage of custom replacer and reviver (#112)
    • aed252c chore(release): 4.1.2
    • 89209fa chore: bump cached-path-relative from 1.0.2 to 1.1.0 (#113)
    • 0a3b556 chore: bump path-parse from 1.0.6 to 1.0.7 (#108)
    • 7f6b262 fix: allow objects with a null prototype in binary packets (#114)
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by darrachequesne, a new releaser for socket.io-parser since your current version.


    Updates socket.io-client from 2.0.4 to 4.5.3

    Release notes

    Sourced from socket.io-client's releases.

    4.5.3

    Bug Fixes

    • do not swallow user exceptions (2403b88)

    Links:

    Size of the bundles:

    min min+gzip
    socket.io.min.js 42.6 KB (-) 13.6 KB (-)
    socket.io.msgpack.min.js 47.7 KB (-) 14.6 KB (-)
    socket.io.esm.min.js 34.5 KB (-) 11.5 KB (-)

    4.5.2

    Bug Fixes

    • handle ill-formatted packet from server (c597023)

    Links:

    Size of the bundles:

    min min+gzip
    socket.io.min.js 42.6 KB (-) 13.6 KB (-)
    socket.io.msgpack.min.js 47.7 KB (-) 14.6 KB (-)
    socket.io.esm.min.js 34.5 KB (-) 11.5 KB (-)

    4.5.1

    There were some minor bug fixes on the server side, which mandate a client bump.

    Links:

    ... (truncated)

    Changelog

    Sourced from socket.io-client's changelog.

    4.5.3 (2022-10-15)

    Bug Fixes

    • do not swallow user exceptions (2403b88)

    4.5.2 (2022-09-02)

    Bug Fixes

    • handle ill-formatted packet from server (c597023)

    4.5.1 (2022-05-17)

    There were some minor bug fixes on the server side, which mandate a client bump.

    4.5.0 (2022-04-23)

    Features

    • add details to the disconnect event (b862924)

    The "disconnect" event will now include additional details to help debugging if anything has gone wrong.

    Example when a payload is over the maxHttpBufferSize value in HTTP long-polling mode:

    socket.on("disconnect", (reason, details) => {
      console.log(reason); // "transport error"
    

    // in that case, details is an error object console.log(details.message); "xhr post error" console.log(details.description); // 413 (the HTTP status of the response)

    // details.context refers to the XMLHttpRequest object console.log(details.context.status); // 413 console.log(details.context.responseText); // "" });

    • add support for catch-all listeners for outgoing packets (74e3e60)

    ... (truncated)

    Commits
    • 2eca8da chore(release): 4.5.3
    • 7c05688 docs: add jsdoc for each public method
    • 2403b88 fix: do not swallow user exceptions
    • 1098618 ci: temporarily remove iOS 16 from the test matrix
    • 2d70813 chore(release): 4.5.2
    • c597023 fix: handle ill-formatted packet from server
    • 8c659bc chore: regenerate lockfile
    • f0350a0 chore(release): 4.5.1
    • abdba07 chore(release): 4.5.0
    • faf68a5 chore: update default label for bug reports
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

  • Bump socket.io-parser from 2.2.2 to 4.2.1 in /src/webrtc/samples/webrtcstreamer/client

    Bump socket.io-parser from 2.2.2 to 4.2.1 in /src/webrtc/samples/webrtcstreamer/client

    Bumps socket.io-parser from 2.2.2 to 4.2.1.

    Release notes

    Sourced from socket.io-parser's releases.

    4.2.1

    Bug Fixes

    • check the format of the index of each attachment (b5d0cb7)

    Links

    4.2.0

    Features

    • allow the usage of custom replacer and reviver (#112) (b08bc1a)

    Links

    4.1.2

    Bug Fixes

    • allow objects with a null prototype in binary packets (#114) (7f6b262)

    Links

    4.1.1

    Links

    4.1.0

    Features

    • provide an ESM build with and without debug (388c616)

    Links

    4.0.5

    Bug Fixes

    • check the format of the index of each attachment (b559f05)

    Links

    ... (truncated)

    Changelog

    Sourced from socket.io-parser's changelog.

    4.2.1 (2022-06-27)

    Bug Fixes

    • check the format of the index of each attachment (b5d0cb7)

    4.2.0 (2022-04-17)

    Features

    • allow the usage of custom replacer and reviver (#112) (b08bc1a)

    4.1.2 (2022-02-17)

    Bug Fixes

    • allow objects with a null prototype in binary packets (#114) (7f6b262)

    4.1.1 (2021-10-14)

    4.1.0 (2021-10-11)

    Features

    • provide an ESM build with and without debug (388c616)

    4.0.4 (2021-01-15)

    Bug Fixes

    • allow integers as event names (1c220dd)

    4.0.3 (2021-01-05)

    4.0.2 (2020-11-25)

    ... (truncated)

    Commits
    • 5a2ccff chore(release): 4.2.1
    • b5d0cb7 fix: check the format of the index of each attachment
    • c7514b5 chore(release): 4.2.0
    • 931f152 chore: add Node.js 16 in the test matrix
    • 6c9cb27 chore: bump @​socket.io/component-emitter to version 3.1.0
    • b08bc1a feat: allow the usage of custom replacer and reviver (#112)
    • aed252c chore(release): 4.1.2
    • 89209fa chore: bump cached-path-relative from 1.0.2 to 1.1.0 (#113)
    • 0a3b556 chore: bump path-parse from 1.0.6 to 1.0.7 (#108)
    • 7f6b262 fix: allow objects with a null prototype in binary packets (#114)
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by darrachequesne, a new releaser for socket.io-parser since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

Nov 27, 2022
EASTL stands for Electronic Arts Standard Template Library. It is an extensive and robust implementation that has an emphasis on high performance.

EA Standard Template Library EASTL stands for Electronic Arts Standard Template Library. It is a C++ template library of containers, algorithms, and i

Dec 1, 2022
C++ Parallel Computing and Asynchronous Networking Engine

As Sogou`s C++ server engine, Sogou C++ Workflow supports almost all back-end C++ online services of Sogou, including all search services, cloud input method,online advertisements, etc., handling more than 10 billion requests every day. This is an enterprise-level programming engine in light and elegant design which can satisfy most C++ back-end development requirements.

Nov 25, 2022
A collection of single-file C libraries. (generic containers, random number generation, argument parsing and other functionalities)

cauldron A collection of single-file C libraries and tools with the goal to be portable and modifiable. Libraries library description arena-allocator.

Oct 26, 2022
Abseil Common Libraries (C++)

Abseil - C++ Common Libraries The repository contains the Abseil C++ library code. Abseil is an open-source collection of C++ code (compliant to C++11

Nov 23, 2022
Basic Development Environment - a set of foundational C++ libraries used at Bloomberg.

BDE Libraries This repository contains the BDE libraries, currently BSL (Basic Standard Library), BDL (Basic Development Library), BAL (Basic Applicat

Nov 24, 2022
stb single-file public domain libraries for C/C++

stb single-file public domain (or MIT licensed) libraries for C/C++ Noteworthy: image loader: stb_image.h image writer: stb_image_write.h image resize

Nov 28, 2022
JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, RTAS and AAX audio plug-ins.
JUCE is an open-source cross-platform C++ application framework for desktop and mobile applications, including VST, VST3, AU, AUv3, RTAS and AAX audio plug-ins.

JUCE is an open-source cross-platform C++ application framework used for rapidly developing high quality desktop and mobile applications, including VS

Dec 1, 2022
A toolkit for making real world machine learning and data analysis applications in C++

dlib C++ library Dlib is a modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real worl

Nov 24, 2022
hypertextcpp - is a hyperfast HTML templating system for C++ applications.
hypertextcpp - is a hyperfast HTML templating system for C++ applications.

It provides a highly readable .htcpp template file format and a command line utility that transpiles it to C++ HTML rendering code. Include a generated C++ header file in your project, then setup a build system to update it when necessary, and you're all set.

Oct 18, 2022
An open-source C++ library developed and used at Facebook.

Folly: Facebook Open-source Library What is folly? Folly (acronymed loosely after Facebook Open Source Library) is a library of C++14 components desig

Nov 23, 2022
Functional Programming Library for C++. Write concise and readable C++ code.
Functional Programming Library for C++. Write concise and readable C++ code.

FunctionalPlus helps you write concise and readable C++ code. Table of contents Introduction Usage examples Type deduction and useful error messages T

Nov 28, 2022
Easy to use, header only, macro generated, generic and type-safe Data Structures in C
Easy to use, header only, macro generated, generic and type-safe Data Structures in C

C Macro Collections Easy to use, header only, macro generated, generic and type-safe Data Structures in C. Table of Contents Installation Contributing

Nov 23, 2022
Idle is an asynchronous and hot-reloadable C++ dynamic component framework
Idle is an asynchronous and hot-reloadable C++ dynamic component framework

Idle is an asynchronous, hot-reloadable, and highly reactive dynamic component framework similar to OSGI that is: ?? Modular: Your program logic is en

Nov 29, 2022
TengineGst is a streaming media analytics framework, based on GStreamer multimedia framework, for creating varied complex media analytics pipelines.
TengineGst is a streaming media analytics framework, based on GStreamer multimedia framework, for creating varied complex media analytics pipelines.

TengineGst is a streaming media analytics framework, based on GStreamer multimedia framework, for creating varied complex media analytics pipelines. It ensures pipeline interoperability and provides optimized media, and inference operations using Tengine Toolkit Inference Engine backend, across varied architecture - CPU, iGPU and VPU.

Nov 22, 2022
Kodi is an award-winning free and open source software media player and entertainment hub for digital media
Kodi is an award-winning free and open source software media player and entertainment hub for digital media

website • docs • community • add-ons Welcome to Kodi Home Theater Software! Kodi is an award-winning free and open source software media player and en

Dec 1, 2022
Smartstreaming is a high-performance and scalable streaming media server.

1. introduction Smartstreaming is a high-performance and scalable streaming media server. 2. design | io | Coroutine | | transport | tcp/udp/srt/quic

Jan 7, 2022
Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on OpenGL 1.x-4.x supporting Windows, Linux and Mac OS X.

Visualization Library 2.2 Gallery About Visualization Library is a C++ middleware for high-performance 2D and 3D graphics applications based on the in

Nov 8, 2022
WAFer is a C language-based software platform for scalable server-side and networking applications. Think node.js for C programmers.

WAFer WAFer is a C language-based ultra-light scalable server-side web applications framework. Think node.js for C programmers. Because it's written i

Nov 19, 2022
WAFer is a C language-based software platform for scalable server-side and networking applications. Think node.js for C programmers.

WAFer WAFer is a C language-based ultra-light scalable server-side web applications framework. Think node.js for C programmers. Because it's written i

Nov 19, 2022