User Tools

Site Tools


embedded-web-interaction:wpe:webrtc

WebRTC on WPE

WebRTC is currently not shipping with the stable WPE (v2.24 at the time of writing).

However, it is present in an experimental form if compiling WPE from svn, even on the official release tag. For example, to get buildroot to compile it:

WPEWEBKIT_SITE_METHOD = svn
WPEWEBKIT_VERSION = 243536
WPEWEBKIT_SITE = "http://svn.webkit.org/repository/webkit/releases/WPE%20WebKit/webkit-2.24.0/"

WPEWEBKIT_CONF_OPTS += \
	-DENABLE_VIDEO=ON \
	-DENABLE_WEB_AUDIO=ON \
	-DENABLE_FULLSCREEN_API=ON \
	-DENABLE_MEDIA_SOURCE=ON \
	-DENABLE_WEB_RTC=ON \
	-DENABLE_MEDIA_STREAM=ON

When trying to compile this for RPi compilation fails because of 2 different issues:

1) While static linking libwebrtc.a, some symbols are being overwritten because of files that have the same name:

  • third_party/boringssl/src/crypto/err/err.c
  • third_party/libsrtp/crypto/kernel/err.c

The symbols are overwritten because libsrtp is appended in a separate ar command, because it is defined as:

 $<TARGET_OBJECTS:libsrtp>

Changing link.txt of webrtc.dir in CMakeFiles from this command:

arm-buildroot-linux-gnueabihf-ar rT ../../../lib/libwebrtc.a  ...

To this

arm-buildroot-linux-gnueabihf-ar qT ../../../lib/libwebrtc.a  ...

Appends the symbols instead of replacing ones with files in the same name and fixes the problem.

This should have already been fixed in CMake, but WebKit added the USE_THIN_ARCHIVES feature that introduced this issue.

2) Probably because of my gcc flags, the libyuv library was trying to use the Neon functions of the ARM processor (as it should). However, the *_neon.cc files were not included in CMakeLists.txt, I am not sure why. I had to manually add these:

    Source/third_party/libyuv/source/compare_neon.cc
    Source/third_party/libyuv/source/rotate_neon.cc
    Source/third_party/libyuv/source/rotate_neon.cc
    Source/third_party/libyuv/source/row_neon.cc
    Source/third_party/libyuv/source/scale_neon.cc
embedded-web-interaction/wpe/webrtc.txt · Last modified: 2019/04/02 11:51 by avnerus