Installation on Windows (fully manual)


This pages details all of the manual steps to install our software on Windows. However, do note that we recommend to use our scripted installation instead: Installation on Windows.


Install dependency: Microsoft Visual C++ Redistributable

Executables and DLLs are self-contained and have no dependencies other than the Microsoft Visual C++ Redistributable for Visual Studio 2015, 2017 and 2019. Please install this package if you did not do so already:

Invoke-WebRequest -UseBasicParsing `
  -Uri "" `
  -OutFile vc_redist.x64.exe
# After downloading the package, run it to install it
.\vc_redist.x64.exe /install /quiet /norestart

Download and verify integrity of packages

You don't use a package manager to install our software on Windows, meaning you will need to verify the integrity of the packages you download. You can do this verify that the hash of a package corresponds with a checksum we provide for each package. You can do this like so ((where the value for $usp_tool should be the 'name' in the zip that you downloaded):

$repo = "stable"
$usp_tool = "mp4split"
$usp_version = "1.13.4"
$package = "$usp_tool-$"
$baseurl = "https://$"

Invoke-WebRequest -UseBasicParsing -Uri "$baseurl/$package" -OutFile $package
$checksum = (Invoke-WebRequest -UseBasicParsing `
  -Uri "$baseurl/win.sha256sum").rawcontent `
  -split "[`r`n]" | Select-String "$package"
$package_checksum = ($checksum.ToString().ToUpper() -split " ")[0]
(Get-FileHash $package).Hash -eq $package_checksum

This process verifies the integrity of the package against the checksum only. It doesn't verify that the checksum is authentic. If you want to check this as well, please see: Extra: How to verify the signature and prove the authenticity of our Windows packages.

Extra: How to verify the signature and prove the authenticity of our Windows packages

Verifying the integrity of our packages is relatively straightforward on Windows: Download and verify integrity of packages. However, if you also want to verify the authenticity of the checksums that can be used to check the integrity of our packages, things become more complicated because Windows does not offer the right tools for this.

You will need two Unix command-line tools to fully verify the authenticity of our Windows packages: openssl and sha256sum. And you will also need the following files from our repository:

  • List of checksums (hashes) per zipped package, per version: win.sha256sum

  • Signature of win.sha256sum: win.sha256sum.asc

  • Our public key to verify the signature's authenticity: usp-win-2019-public.pem

You can download these files from the following locations:

Invoke-WebRequest -UseBasicParsing -Uri -OutFile win.sha256sum
Invoke-WebRequest -UseBasicParsing -Uri -OutFile win.sha256sum.asc
Invoke-WebRequest -UseBasicParsing -Uri -OutFile usp-win-2019-public.pem

As both openssl and sha256sum are shipped with most Linux distributions, there are several options you have to check our Windows packages after you have downloaded them:

  • On a machine running Linux

  • On a machine running Windows, by running Linux using Windows Subsystem for Linux

  • On a machine running Windows, by running Cygwin (with both tools installed)

  • On 'any' machine, by using Docker to spin up Linux container

In all of the above scenarios you need to make sure the directory you downloaded the zipped package(s) also contains the file with checksums (win.sha256sum), the signature of that file (win.sha256sum.asc) and our public key (usp-win-2019-public.pem).

In the first three scenarios run the following two commands in this directory:


openssl dgst -sha256 -verify usp-win-2019-public.pem -signature win.sha256sum.asc win.sha256sum
sha256sum -c win.sha256sum 2>&1 | grep OK

In the fourth scenario using Docker, run the following in this directory:

$install_openssl = "apk add --no-cache openssl"
$verify_signature = "openssl dgst -sha256 -verify usp-win-2019-public.pem -signature win.sha256sum.asc win.sha256sum"
$verify_checksum = "sha256sum -c win.sha256sum 2>&1 | grep OK"
docker run --rm -v ${pwd}:/data -w /data alpine:latest sh -c "$install_openssl && $verify_signature && $verify_checksum"

All scenarios should result in a Verified OK message being printed to confirm the authenticity of the signature, followed by the name(s) of the zipped packages you have downloaded along with an OK. For example, when you are verifying the result should be:

Verified OK OK


Command-line tools 'mp4split', 'manifest_edit', 'unified_capture' and 'unified_remix'

To use Unified Packager or any of our other command-line tools when you don't need the Unified Origin or Unified Remix web server modules, install 'mp4split' and our other command-line tools will be installed as dependencies alongside it. Assuming you have already downloaded and verified the packages (see sections above), installing is done like so:

$usp_tool = "mp4split"
$usp_version = "1.13.4"
$package = "$usp-tool-$"
$target_dir = "C:\Program Files\Unified Streaming"

# Create a 'Unified Streaming' directory if it does not already exist
if ( -Not (Test-Path -PathType Container -Path $target_dir)) {
  New-Item -ItemType Directory $target_dir

# Expand archive package into the 'Unified Streaming' directory
Write-Host "Extracting $package into $target_dir"
Expand-Archive $package -DestinationPath $target_dir -Force

Add 'mp4split' and other command-line tools to system-wide path settings

In order to run 'mp4split' and the other Unified Streaming command-line tools without explicitly specifying the paths to their executables, you can add the path to where they are installed to the system-wide 'path' settings. To do this, follow the instructions below (but be aware that these will make changes to your registry):

$usp_path = "C:\Program Files\Unified Streaming"

# Get current system-wide 'path' settings, store them in variable and print result
(Get-ItemProperty `
  -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' `
  -Name PATH).path | `
  Set-Variable -Name "old_path" -PassThru | `
  Select-Object -ExpandProperty value

# Add the path to where 'mp4split' was installed to the system-wide 'path' settings and print result
Set-ItemProperty `
  -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' `
  -Name PATH -Value "$old_path;$usp_path" -PassThru | `
  Select-Object -ExpandProperty PATH

# Reload 'path' settings while maintaining the same shell session
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") `
  + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")

Unified Origin web server module ('mp4split' and 'mod_smooth_streaming')

To run Unified Origin, you need to:

  • Install 'mp4split' (which will also install our other command-line tools)

  • Install Apache

  • Install 'mod_smooth_streaming' module

  • Install 'mod_unified_s3_auth' if you need Amazon S3 authentication

How to install 'mp4split' is described in the section above.

Then, to install Apache:


Apache Lounge blocks downloads from a shell.

Finally, assuming you have already downloaded and verified the 'apache_mod_smooth_streaming' package, run the following:

$usp_tool = "apache_mod_smooth_streaming"
$usp_version = "1.13.4"
$package = "$usp-tool-$"
$apache_dir = "C:\Apache24"

# Expand archive package into 'modules' sub-directory of Apache installation
Write-Host "Extracting $package into $target_dir\modules"
Expand-Archive $package -DestinationPath $apache_dir\modules -Force

And, for 'mod_unified_s3_auth':

$usp_tool = "apache_mod_unified_s3_auth"
$usp_version = "1.13.4"
$package = "$usp-tool-$"
$apache_dir = "C:\Apache24"

# Expand archive package into 'modules' sub-directory of Apache installation
Write-Host "Extracting $package into $target_dir\modules"
Expand-Archive $package -DestinationPath $apache_dir\modules -Force

Configure Apache

After you have installed our software and Apache you still need to configure several things before you can successfully stream video. Please see the How to Configure (Unified Origin) section for the necessary information on how to do this.