EricssonResearch / openwebrtc

A cross-platform WebRTC client framework based on GStreamer
http://www.openwebrtc.org
BSD 2-Clause "Simplified" License
1.8k stars 537 forks source link

Build on Windows #626

Open MarvinMcFadin opened 8 years ago

MarvinMcFadin commented 8 years ago

I need a little help with building on Windows, unless there are pre-built binaries somewhere that I missed.

I think I have the environment setup correctly, but perhaps something is still missing. I cloned the openwebrtc repository.

So it begins building using this command from the build instructions, modified for Windows.

$ cd ~/cerbero && ./cerbero-uninstalled -c config/win32.cbc fetch-package --full-reset --reset-rdeps openwebrtc && ./cerbero-uninstalled -c config/win32.cbc bootstrap && ./cerbero-uninstalled -c config/win32.cbc package -f openwebrtc

It builds for some time then comes to this point and fails ...

-----> Installing wglext.h File C:/MinGW/msys/1.0/home/marvin/cerbero/build/mingw/w32/i686-w64-mingw32/include/GL/wglext.h already downloaded. -----> Installing Python headers Cloning into 'windows-external-sdk'... WARNING: Using default configuration because C:/MinGW/msys/1.0/home/marvin/.cerbero/cerbero.cbc is missing WARNING: Build currently fails on Windows! Do not import into Cerbero master! Building the following recipes: mingw-runtime gettext libiconv autoconf gettext-tools gettext-m4 automake m4 libtool pkg-config orc-tool libffi zlib glib gobject-introspection gnome-common gtk-doc-lite gperf intltool yasm [(1/20) mingw-runtime -> already built ] [(2/20) gettext -> already built ] [(3/20) libiconv -> already built ] [(4/20) autoconf -> already built ] [(5/20) gettext-tools -> already built ] [(6/20) gettext-m4 -> already built ] [(7/20) automake -> already built ] [(8/20) m4 -> already built ] [(9/20) libtool -> already built ] [(10/20) pkg-config -> already built ] [(11/20) orc-tool -> already built ] [(12/20) libffi -> already built ] [(13/20) zlib -> already built ] [(14/20) glib -> fetch ] -----> Step done [(14/20) glib -> extract ] -----> Step done [(14/20) glib -> configure ] You don't have gtk-doc installed, and thus won't be able to generate the documentation. autoreconf: Entering directory `.' autoreconf: configure.ac: not using Gettext autoreconf: running: aclocal --force -I m4macros ${ACLOCAL_FLAGS} ' is already registered with AC_CONFIG_FILES. ../../lib/autoconf/status.m4:288: AC_CONFIG_FILES is expanded from... configure.ac:3472: the top level /bin/m4: cannot remove temporary directory /tmp/ar6425.8188/m4-zAwup1: Directory not empty autom4te: /bin/m4 failed with exit status: 1 aclocal: error: echo failed with exit status: 1 autoreconf: aclocal failed with exit status: 1

Is there a setup step I am missing or an alteration to the recipe that will correct this?

Thanks in advance for any assistance you can provide.

marcin-sielski commented 8 years ago

Please explain what you are trying to achieve. I have managed to compile openwebrtc repo without docs and javascript bindings on Windows without using cerbero. I have used https://msys2.github.io/ development environment.

MarvinMcFadin commented 8 years ago

I just need win32 binaries to provide a webrtc endpoint in my Windows application, to allow audio connection from browser to my application. I will need both raw and Opus codec.

I could not find a simple webrtc implementation in either C++ or C# that supported the audio portion of peer to peer.

marcin-sielski commented 8 years ago

Ok, so my approach should fit your needs... Take msys2, install dependencies, compile and install openwebrtc-plugins, then compile openwebrtc. Please note that openwebrtc does not support windows audio and video sources. However that code you could take from gstreamer. Alternatively you may look at server side webrtc stack https://github.com/marcin-sielski/janus-gateway/releases.

MarvinMcFadin commented 8 years ago

Thanks for the tips. I'll look into those as well.

Forkest commented 7 years ago

@marcin-sielski, how did you disable javascript bindings?

UPDATE: found it, --disable-bridge.

Forkest commented 7 years ago

I'm still failing to build it, yet it failed on the step that GISCAN doesn't appreciate my non-ASCII username (UnicodeDecodeError: 'ascii' codec can't decode), maybe the following guide will be useful to you:

Install MSYS2, open msys2_shell, install dependencies: pacman -Sy perl autoconf automake gettext libtool pkg-config make mingw-w64-i686-gobject-introspection mingw-w64-i686-gobject-introspection-runtime mingw-w64-i686-gstreamer mingw-w64-i686-gst-plugins-bad mingw-w64-i686-gst-plugins-base mingw-w64-i686-gst-plugins-good mingw-w64-i686-icu mingw-w64-i686-json-glib mingw-w64-i686-libffi mingw-w64-i686-libiconv mingw-w64-i686-libnice mingw-w64-i686-libsoup mingw-w64-i686-libsrtp mingw-w64-i686-usrsctp mingw-w64-i686-libvpx mingw-w64-i686-libxml2 mingw-w64-i686-openh264 mingw-w64-i686-openssl mingw-w64-i686-opus mingw-w64-i686-orc mingw-w64-i686-zlib intltool

Close msys2_shell, open mingw32_shell, run:

export CPATH=/mingw32/include
export LPATH=/mingw32/lib

git clone https://github.com/EricssonResearch/openwebrtc-gst-plugins.git
cd openwebrtc-gst-plugins
./autogen.sh
./configure --prefix=/mingw32
make LDFLAGS=-no-undefined
make install
cd ..

Get OpenWebRTC source code, either from releases or from git directly.

Remove docs build:

  1. delete line with gtkdocize in autogen.sh
  2. delete lines starting with docs/ at the end of configure.ac

If you're using 0.3.0 release, you're done, if you're using the latest version from git, GCC compatibilty is broken by non-compatible Clang flag -Wno-parentheses-equality, remove lines with it from all files.

Now building:

cd openwebrtc
./autogen.sh --prefix=/mingw32 --disable-bridge LDFLAGS="-static"

I had some warnings about dynamic library so I decided to try static, you may drop LDFLAGS parameter.

make

It should build some files and then abort, saying 'enumerate_video_source_devices' and 'enumerate_audio_source_devices' are used but never defined. I believe this is what marcin kept in mind saying that it can be taken from GStreamer. So let's try to ignore these warnings by suppressing -Werror from makefiles using an environment variable:

export CFLAGS="-Wno-error"
make

Here I stuck with my username, but you may try it out, it should work.