OBS Compilation Infos

You will need a working Windows 8 SDK and DirectX SDK, files for VS 2013 are included.

Excerpt from INSTALL file


Required (and included) libraries:

  • libmp3lame - MP3 encoder - obs/lame
  • libfaac - AAC encoder - obs/libfaac
  • librtmp - RTMP protocol - obs/librtmp
  • libsamplerate - audio resampler - obs/libsamplerate
  • libx264 - x264 encoder - obs/x264

To compile OBS and all its sub-libraries, you can use OBS-All.sln and compile everything all at once, or you can compile everything individually yourself. x264 and libmp3lame are pre-compiled for convenience.

Windows SDK

It requires the latest windows SDK, as it uses features from Windows Vista, Windows 7 and 8. The Windows 8 SDK should also come with the latest DirectX includes and libraries.

Compiling LAME (if desired)

I compile lame through the VC makefile.

Command line: nmake -f Makefile.MSVC CPU=P3

Get nasm if you want to compile with assembly, otherwise use ASM=NO command line option. Use MSVCVER=Win64 to compile 64bit. View lame/makefile.msvc for more info.

Compiling x264 (if desired)

x264 is slightly more troublesome, primarily because it's written in C99, yasm, and compile configuration is totally dependent on bash scripts. Usually it's recommended to cross-compile on linux, but I just used msys and mingw for windows. There's a guide on how to get x264 compiled on windows at

Make sure to use the --enable-win32thread configuration option, though I suppose you could make it use posix threads with a bit of work, but it's fairly pointless and you'd probably have to add some more stuff to the Hacks.cpp file.

If compiling static (which I don't do anymore), please make sure to include the static libgcc.a that your mingw provides. Depending on your mingw version you may need to add/remove stuff from Hacks.cpp to get it properly working. It sucks, I know, but I'm not the one who decided to make x264 uncompilable on microsoft's C compiler.

Other notes

You may have noted that every single library I use is statically linked. Even the CRT is static on all projects. Personally, I despise having any outside DLL dependencies. Having to install the damn visual studio runtimes every single time you install an application is the most annoying thing on earth. Sure, I understand why they're used, and I know that there are often vulnerabilities that need to be patched, but I personally go around it by centralizing all such stuff in the utility library (see the Utility files in OBSApi). Generally when I get an application I like it to work right from the start with as little setup as possible. It's a personal preference.

If you need to allocate, use the Allocate and Free functions. new and delete is automatically wrapped to these as well.

At some point in time I will get around to some proper documentation of the utility library, but in the mean time, look around in the utility files of OBSApi if you wish.