The Symphony Media Bridge (SMB) is a media server application that handles audio, video and screen sharing media streams in an RTC conference system.
In RTC conferencing systems, when more than two participants are in a conference there is usually a media server component involved. Each participant in the conference will send their audio and video streams to the media server. The media server is then responsible for sending the correct media streams to each receiving participant.
Conferencing media servers are typically divided into two categories, multipoint conference units (MCU) and selective forwarding units (SFU). MCUs decode, mix and transcode media streams delivering a single or a few output streams to each receiver. SFUs do not decode or transcode media streams from participants, but forwards a selection of the incoming media streams to each receiver in some intelligent way. Not all incoming streams are forwarded, but typically more than one stream to each receiver.
SMB is an SFU at its core, but has some hybrid MCU like solutions. Video streams are forwarded and not transcoded, but participants can request a mixed, transcoded audio stream instead of forwarded streams. SMB can also be run in a mode where multiple streams are forwarded, but the contents of each stream can vary between different participants in the conference. This allows for larger conferences than SFUs can typically handle.
Written as a high performance native application with efficient resource management, SMB is designed to scale efficiently as the number of conferences and participants grow.
The Supported platforms for the release builds are
- Ubuntu Server 20.04 LTS
The following additional dependencies have to be installed:
apt-get install libc++-dev libc++abi-dev libsrtp2-1 libmicrohttpd12 libopus0
dpkg -i finos-rtc-smb_<version>.deb
smb /etc/finos-rtc-smb/config.json
setcap CAP_SYS_NICE+ep smb
./smb config.json
The Symphony Media Bridge is a cmake based project that can be built and run for development purposes on Linux as well as MacOSX. Here are instruction on what dependencies are needed to build and run locally. SMB currently only supports compiling with clang/llvm and linking with libc++ on both Linux and MacOSX.
apt-get install cmake llvm lld clang lldb python3 git libc++-dev libc++abi-dev libssl-dev libsrtp2-dev libmicrohttpd-dev libopus-dev libunwind-dev
export CC=clang && export CXX=clang++
cmake -DCMAKE_BUILD_TYPE=Debug .
brew install cmake srtp openssl@1.1 libmicrohttpd opus
cmake -DCMAKE_BUILD_TYPE=Debug -G "Unix Makefiles" .
cmake -G "Xcode" .
./smb config.json
./UnitTest
./UnitTest2
UnitTest2 contains integration tests that run in emulated network environment and emulated time. It is very close to end to end tests without adding external RTC agents.
- Fork it (https://github.com/finos/SymphonyMediaBridge/fork)
- Create your feature branch (
git checkout -b feature/fooBar
) - Read our contribution guidelines and Community Code of Conduct
- Commit your changes (
git commit -am 'Add some fooBar'
) - Push to the branch (
git push origin feature/fooBar
) - Create a new Pull Request
NOTE: Commits and pull requests to FINOS repositories will only be accepted from those contributors with an active, executed Individual Contributor License Agreement (ICLA) with FINOS OR who are covered under an existing and active Corporate Contribution License Agreement (CCLA) executed with FINOS. Commits from individuals not covered under an ICLA or CCLA will be flagged and blocked by the FINOS Clabot tool (or EasyCLA). Please note that some CCLAs require individuals/employees to be explicitly named on the CCLA.
Need an ICLA? Unsure if you are covered under an existing CCLA? Email help@finos.org
Copyright 2021 Symphony LLC
Distributed under the Apache License, Version 2.0.
SPDX-License-Identifier: Apache-2.0