Development

OBS Compilation Infos

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

Excerpt from INSTALL file

---------------------------------------------
Compiling
---------------------------------------------

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 http://doom10.org/index.php?topic=26.0

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.