Aaron Boxer
January 28, 2021
Reading time:
Note: In September 2021, the GStreamer project merged all its git repositories into a single, unified repository, often called monorepo
. The build system referred in this post as "gst-build" is now in the root of this combined/mono repository.
Earlier this week, WebRTC became an official W3C and IETF standard for enabling real time communication (RTC) between browsers and other mobile applications via a set of simple APIs. GStreamer has a powerful and rapidly maturing WebRTC implementation. So, the obvious question is: how do we build this on Windows?
There are two ways of building GStreamer on Windows - either with cerbero or gst-build. For a simple GStreamer install with WebRTC support, cerbero will just work out of the box. However, for a more flexible solution that builds significantly faster, we use gst-build
. Unfortunately, it's not just a matter of using gst-build. You also need the OpenSSL dependency so that gst-build
will build the WebRTC element.
Here's how to add this support:
If you haven't already followed my previous guide on GStreamer and Windows, please follow the steps there to build GStreamer from source.
Next, we will need to clone and build OpenSSL
PATH
git clone https://github.com/openssl/openssl.git
c:/bin/OpenSSl
as our OpenSSL install directory, but this is easily changed to the directory of your choice.> cd openssl > set PATH=%PATH%;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin > perl Configure VC-WIN64A --prefix=c:/bin/OpenSSL > nmake > nmake test > nmake install
Now, download the OpenSSL pkg-config
folder here and place it in the lib
directory of your OpenSSL install directory.
Next, we need to add the OpenSSL install directory to the PKG_CONFIG_PATH
environment variable that we set in my previous post:
Set PKG_CONFIG_PATH
equal to %GSTREAMER_1_0_ROOT_X86_64%lib\pkgconfig;C:\bin\OpenSSL\lib\pkg-config
We also need to add the OpenSSL bin directory C:\bin\OpenSSL\bin
to the Windows path.
And finally, we open a new 64 bit VS command shell and execute the following:
> cd %SOURCE_DIR%gst-build > meson build --reconfigure --prefix=%GSTREAMER_1_0_ROOT_X86_64% -Dtls=disabled -Ddevtools=disabled && ninja -C build install
And now:
> gst-inspect-1.0 webrtcbin
should find the webrtcbin plugin!
If you have any questions about GStreamer WebRTC support on Windows or any other platform, please contact us!
08/10/2024
Having multiple developers work on pre-merge testing distributes the process and ensures that every contribution is rigorously tested before…
15/08/2024
After rigorous debugging, a new unit testing framework was added to the backend compiler for NVK. This is a walkthrough of the steps taken…
01/08/2024
We're reflecting on the steps taken as we continually seek to improve Linux kernel integration. This will include more detail about the…
27/06/2024
With each board running a mainline-first Linux software stack and tested in a CI loop with the LAVA test framework, the Farm showcased Collabora's…
26/06/2024
WirePlumber 0.5 arrived recently with many new and essential features including the Smart Filter Policy, enabling audio filters to automatically…
12/06/2024
Part 3 of the cmtp-responder series with a focus on USB gadgets explores several new elements including a unified build environment with…
Comments (6)
Andrey:
Apr 02, 2021 at 11:28 AM
I wonder if prebuild OpenSSL from Github Releases will do. The build doesn't seem to be always easy:
Microsoft (R) Program Maintenance Utility Version 14.28.29913.0
Copyright (C) Microsoft Corporation. All rights reserved.
"nasm" -Ox -f win64 -DNEAR -g -o crypto\bn\libcrypto-shlib-rsaz-avx512.obj "crypto\bn\rsaz-avx512.asm"
crypto\bn\rsaz-avx512.asm:17: error: section alignment changed during code generation
crypto\bn\rsaz-avx512.asm:436: error: section alignment changed during code generation
crypto\bn\rsaz-avx512.asm:848: error: section alignment changed during code generation
Reply to this comment
Reply to this comment
Andrey:
Apr 02, 2021 at 11:39 AM
Turned out to be necessary for successful OpenSSL build:
git checkout OpenSSL_1_1_1-stable
Reply to this comment
Reply to this comment
Aaron Boxer:
Apr 02, 2021 at 04:56 PM
Thanks, Andrey. Yes, you need to checkout out a stable release of OpenSSL. We
will update the blog post to mention that.
Reply to this comment
Reply to this comment
Andrey:
Apr 03, 2021 at 02:51 PM
These are getting built ok:
- webrtcbin
- gst-examples repo
Binaries from gst-examples/webrtc are there but do not work though:
Required gstreamer plugin 'vpx' not found
Required gstreamer plugin 'dtls' not found
Required gstreamer plugin 'srtp' not found
I guess dtls and srtp need OpenSSL?
A bit confused about this line:
> meson build --reconfigure --prefix=%GSTREAMER_1_0_ROOT_X86_64% -Dtls=disabled -Ddevtools=disabled
It should be -Dtls=enabled instead? Enabling makes glib-network unhappy at ninja build, though.
Reply to this comment
Reply to this comment
Andrey:
Apr 03, 2021 at 04:05 PM
With dtls, installing pkg-config with msys2 and adding in to path helped.
Reply to this comment
Reply to this comment
Aaron Boxer:
Apr 07, 2021 at 05:01 PM
Thanks, Andrey. My apologies for the confusion - were you able to build with dtls using pkg-config ?
Reply to this comment
Reply to this comment
Add a Comment