Skip to content
Secure, Reliable, Transport
Branch: master
Clone or download
maxlovic and rndi [core] MSC C++11 attributes support.
noexcept, constexpr, override, final
Latest commit d967441 Jul 16, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
ATTIC Changed srt-multiplex to a testing application (#718) Jun 10, 2019
apps UriParser improvements (#743) Jul 16, 2019
common Fix build with MinGW v6.0.0 Jan 7, 2019
docs Added description of 4 lacking options (#722) Jul 3, 2019
examples Remove legacy references to stransmit (#725) Jun 10, 2019
haicrypt Added mbedtls encryption library choice for haicrypt (#748) Jul 15, 2019
scripts Remove legacy references to stransmit (#725) Jun 10, 2019
srtcore [core] MSC C++11 attributes support. Jul 16, 2019
submodules/pthread-win32 Initial commit Apr 21, 2017
test [tests] Improved epoll connection break test Jun 10, 2019
testing Fix a problem when a connection is rejected when the last handshake w… Jun 13, 2019
.appveyor.yml Added Unit tests, including test from issue #468 Oct 31, 2018
.travis.yml Fix mingw build. Dec 12, 2018
CMakeLists.txt Added mbedtls encryption library choice for haicrypt (#748) Jul 15, 2019 Change License to MPLv2.0 (#327) Apr 3, 2018
LICENSE Change License to MPLv2.0 (#327) Apr 3, 2018 Add link to SRT Protocol Technical Overview (#736) Jul 4, 2019
cmake_object_lib_support.c Support for CMake Object Library in XCode build. Oct 30, 2018
configure Change License to MPLv2.0 (#327) Apr 3, 2018
configure-data.tcl Added mbedtls encryption library choice for haicrypt (#748) Jul 15, 2019
srt-ffplay Remove legacy references to stransmit (#725) Jun 10, 2019


AppVeyor Build Status Build Status


Secure Reliable Transport (SRT) is an open source transport technology that optimizes streaming performance across unpredictable networks, such as the Internet.

Secure Encrypts video streams
Reliable Recovers from severe packet loss
Transport Dynamically adapts to changing network conditions

SRT is applied to contribution and distribution endpoints as part of a video stream workflow to deliver the best quality and lowest latency video at all times.

As audio/video packets are streamed from a source to a destination device, SRT detects and adapts to the real-time network conditions between the two endpoints. SRT helps compensate for jitter and bandwidth fluctuations due to congestion over noisy networks, such as the Internet. Its error recovery mechanism minimizes the packet loss typical of Internet connections. And SRT supports AES encryption for end-to-end security, keeping your streams safe from prying eyes.



  • cmake (as build system)
  • Tcl 8.5 (optional for user-friendly build system)
  • OpenSSL
  • Pthreads (for POSIX systems it's builtin, for Windows there's a library)

For Linux:

Install cmake and openssl-devel (or similar name) package. For pthreads there should be -lpthreads linker flag added.

Ubuntu 14

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install tclsh pkg-config cmake libssl-dev build-essential

CentOS 7

sudo yum update
sudo yum install tcl pkgconfig openssl-devel cmake gcc gcc-c++ make automake

CentOS 6

sudo yum update
sudo yum install tcl pkgconfig openssl-devel cmake gcc gcc-c++ make automake
sudo yum install centos-release-scl-rh devtoolset-3-gcc devtoolset-3-gcc-c++
scl enable devtoolset-3 bash
./configure --use-static-libstdc++ --with-compiler-prefix=/opt/rh/devtoolset-3/root/usr/bin/

For Mac (Darwin, iOS):

Homebrew supports "srt" formula.

brew update
brew install srt

If you prefer using a head commit of master branch, you should add --HEAD option to brew command.

brew install --HEAD srt

Also, SRT can be built with cmake and make on Mac. Install cmake and openssl with development files from "brew". Note that the system version of OpenSSL is inappropriate, although you should be able to use any newer version compiled from sources, if you prefer.

brew install cmake
brew install openssl
export OPENSSL_ROOT_DIR=$(brew --prefix openssl)
export OPENSSL_LIB_DIR=$(brew --prefix openssl)"/lib"
export OPENSSL_INCLUDE_DIR=$(brew --prefix openssl)"/include"

For Windows:

  1. Please download and install OpenSSL for Windows.

The 64-bit devel package can be downloaded from here:

(Note that the last letter or version number may be changed and older versions no longer available. If this isn't found, check here: )

It's expected to be installed in C:\OpenSSL-Win64 (see the above variables).

Note that this version is compiled most likely for Visual Studio 2013. For other versions you better download and compile the sources by yourself, from:

The instruction for Windows:

  1. Compile and install Pthreads for Windows from this submodule:


Please follow the steps:

a. Using Visual Studio 2013, please open this file:


b. Make sure to select configuration: Release and x64.

c. Make sure that the pthread_lib project will be built.

d. After building, find the pthread_lib.lib file (directory is probably: bin\x64_MSVC2013.Release). Copy this file to C:\pthread-win32\lib (or whatever other location you configured in variables).

e. Copy include files to C:\pthread-win32\include - the following ones:


(They are in the toplevel directory, there are actually no meaningful subdirs here) (NOTE: the win32 is part of the project name. It will become 32 or 64 depending on selection)

  1. Install cmake for Windows. The CMake GUI will help you configure the project.

It will try to find OpenSSL and pthreads. If you installed them in the default location, they will be found automatically. If not, you can define the following variables to help CMake find them:

OPENSSL_ROOT_DIR=<path to OpenSSL installation>
OPENSSL_LIBRARIES=<path to all the openssl libraries to link>
OPENSSL_INCLUDE_DIR=<path to the OpenSSL include dir>

PTHREAD_INCLUDE_DIR=<path to where pthread.h lies>
PTHREAD_LIBRARY=<path to pthread.lib>
  1. For the sake of cmake generation: When you want to have a 64-bit version, remember that cmake by some reason adds /machine:X86 to the linker options. There are about four variables ended with _LINKER_FLAGS in the CMakeCache.txt file (also available with Advanced checked in CMake GUI). Remove them, or change into /machine:X64.

Also, just after you generated the project for MSVC (if you fail or forget to do that before the first compiling, you'll have to delete and regenerate all project files) then open Configuration Manager exactly after generation from cmake and setup x86 platform with requesting to generate this for every subproject.

  1. IMPORTANT FOR DEVELOPERS AND CONTRIBUTORS: If you make any changes that fix something in the Windows version, remember to keep the project working also for all other platforms. To simplify the verification if you just would like to do it on the Windows machine, please install Cygwin and make another build for Cygwin, for example (remember that 'configure' script requires tcl8.5 package):

     mkdir build-cygwin
     cd build-cygwin
     ../configure --prefix=install --cygwin-use-posix

The Cygwin platform isn't any important target platform for this project, but it's very useful to check if the project wouldn't be build-broken on Linux.

You can’t perform that action at this time.