centricular/gstcefsrc

trying to build for jetson nano

Closed this issue · 21 comments

lblabr commented

i have ubuntu 20.04 running on jetson nano and try to use it for livestreaming. i would like to make an overlay with an webpage...

so i tried to use gstcefsrc for that i compiled and try to run, but get the following error:

No such element or plugin 'cefsrc'
jetson@nano:~/.sources/gstcefsrc/build/Release$ gst-launch-1.0 cefsrc

(gst-plugin-scanner:67316): GStreamer-WARNING **: 23:45:03.954: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libcef.so': /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libcef.so: cannot allocate memory in static TLS block

(gst-plugin-scanner:67316): GStreamer-WARNING **: 23:45:04.022: Failed to load plugin '/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstcef.so': ./libcef.so: cannot allocate memory in static TLS block
ERROR: pipeline could not be constructed: no element "cefsrc".
jetson@nano:~/.sources/gstcefsrc/build/Release$

any idea/hint ??

thanks in advance

Lars

That doesn't sound like a cefsrc issue to be honest, have you tried simply googling for the error?

lblabr commented

yes i did, i had this kind of error also with obs. building with a libcef provided by obs (repo) helped there

any hints for doing similar with this project would be great

You can build with your own CEF version with such a command:

CEF_ROOT=/path/to/chromium/src/out/Release_GN_x64/ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..

I don't think there is much more I can do here, please propose a MR if you have a fix :)

lblabr commented

@MathieuDuponchelle just to have it correct for my build ...

`jetson@nano:~/.sources$ ls obs-build-dependencies/cef_binary_5060_linuxarm64
build cmake CMakeCache.txt CMakeFiles cmake_install.cmake CMakeLists.txt include libcef_dll libcef_dll_wrapper LICENSE.txt Makefile README.txt Release Resources

jetson@nano:~/.sources$ ls obs-build-dependencies/cef_binary_5060_linuxarm64/Release/
chrome-sandbox libcef.so libEGL.so libGLESv2.so libvk_swiftshader.so libvulkan.so.1 snapshot_blob.bin v8_context_snapshot.bin vk_swiftshader_icd.json`

CEF_ROOT=~/.sources/obs-build-dependencies/cef_binary_5060_linuxarm64
or a subdir of ~/.sources/obs-build-dependencies/cef_binary_5060_linuxarm64 ??

lblabr commented

with the provied command i get:

jetson@nano:/.sources/gstcefsrc/build$ CEF_ROOT=/.sources/obs-build-dependencies/cef_binary_5060_linuxarm64/Release/ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
-- The C compiler identification is GNU 8.4.0
-- The CXX compiler identification is GNU 8.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Downloading /home/jetson/.sources/gstcefsrc/third_party/cef/cef_binary_103.0.9%2Bgd0bbcbb%2Bchromium-103.0.5060.114_linuxarm64.tar.bz2.sha1...
-- Downloading /home/jetson/.sources/gstcefsrc/third_party/cef/cef_binary_103.0.9%2Bgd0bbcbb%2Bchromium-103.0.5060.114_linuxarm64.tar.bz2...
-- [download 0% complete]
-- [download 1% complete]
-- [download 2% complete]
-- [download 3% complete]

it seems not to take the provided libcef

lblabr commented

with absolute paths:

`jetson@nano:/.sources/gstcefsrc$ mkdir build && cd build
jetson@nano:
/.sources/gstcefsrc/build$ CEF_ROOT=/home/jetson/.sources/obs-build-dependencies/cef_binary_5060_linuxarm64/Release cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
-- The C compiler identification is GNU 8.4.0
-- The CXX compiler identification is GNU 8.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:49 (find_package):
By not providing "FindCEF.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "CEF", but
CMake did not find one.

Could not find a package configuration file provided by "CEF" with any of
the following names:

CEFConfig.cmake
cef-config.cmake

Add the installation prefix of "CEF" to CMAKE_PREFIX_PATH or set "CEF_DIR"
to a directory containing one of the above files. If "CEF" provides a
separate development package or SDK, be sure it has been installed.

-- Configuring incomplete, errors occurred!
See also "/home/jetson/.sources/gstcefsrc/build/CMakeFiles/CMakeOutput.log".
jetson@nano:~/.sources/gstcefsrc/build$ mc

jetson@nano:/.sources/gstcefsrc/build$ cd /home/jetson/.sources/obs-build-dependencies/
jetson@nano:
/.sources/obs-build-dependencies$ find . | grep cmake
./cef_binary_5060_linuxarm64/CMakeFiles/Makefile.cmake
./cef_binary_5060_linuxarm64/CMakeFiles/3.25.2/CMakeSystem.cmake
./cef_binary_5060_linuxarm64/CMakeFiles/3.25.2/CMakeCXXCompiler.cmake
./cef_binary_5060_linuxarm64/CMakeFiles/3.25.2/CMakeCCompiler.cmake
./cef_binary_5060_linuxarm64/CMakeFiles/cmake.check_cache
./cef_binary_5060_linuxarm64/CMakeFiles/CMakeDirectoryInformation.cmake
./cef_binary_5060_linuxarm64/cmake
./cef_binary_5060_linuxarm64/cmake/cef_macros.cmake
./cef_binary_5060_linuxarm64/cmake/FindCEF.cmake
./cef_binary_5060_linuxarm64/cmake/cef_variables.cmake
./cef_binary_5060_linuxarm64/libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cmake_clean.cmake
./cef_binary_5060_linuxarm64/libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/DependInfo.cmake
./cef_binary_5060_linuxarm64/libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cmake_clean_target.cmake
./cef_binary_5060_linuxarm64/libcef_dll_wrapper/CMakeFiles/CMakeDirectoryInformation.cmake
./cef_binary_5060_linuxarm64/libcef_dll_wrapper/cmake_install.cmake
./cef_binary_5060_linuxarm64/build/CMakeFiles/Makefile.cmake
./cef_binary_5060_linuxarm64/build/CMakeFiles/3.25.1/CMakeSystem.cmake
./cef_binary_5060_linuxarm64/build/CMakeFiles/3.25.1/CMakeCXXCompiler.cmake
./cef_binary_5060_linuxarm64/build/CMakeFiles/3.25.1/CMakeCCompiler.cmake
./cef_binary_5060_linuxarm64/build/CMakeFiles/cmake.check_cache
./cef_binary_5060_linuxarm64/build/CMakeFiles/CMakeDirectoryInformation.cmake
./cef_binary_5060_linuxarm64/build/libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cmake_clean.cmake
./cef_binary_5060_linuxarm64/build/libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/DependInfo.cmake
./cef_binary_5060_linuxarm64/build/libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cmake_clean_target.cmake
./cef_binary_5060_linuxarm64/build/libcef_dll_wrapper/CMakeFiles/CMakeDirectoryInformation.cmake
./cef_binary_5060_linuxarm64/build/libcef_dll_wrapper/cmake_install.cmake
./cef_binary_5060_linuxarm64/build/cmake_install.cmake
./cef_binary_5060_linuxarm64/cmake_install.cmake
jetson@nano:~/.sources/obs-build-dependencies$
`

@lblabr I don't know, just try to do as the error tells you? :)

lblabr commented

i'm not that expert.... (sry) played with the vaules for path but nothing solved the problem

lblabr commented

the named files

CEFConfig.cmake
cef-config.cmake

are not there...

lblabr commented

with:

jetson@nano:~/.sources/gstcefsrc/build$ CEF_ROOT=/home/jetson/.sources/obs-build-dependencies/cef_binary_5060_linuxarm64/ cmake -G "Unix Makefiles" -DCMAKE_MODULE_PATH=/home/jetson/.sources/obs-build-dependencies/cef_binary_5060_linuxarm64/cmake -DCMAKE_BUILD_TYPE=Release ..

CMake Error at /home/jetson/.sources/obs-build-dependencies/cef_binary_5060_linuxarm64/cmake/FindCEF.cmake:33 (message):
No CMake bootstrap found for CEF binary distribution at:
/home/jetson/.sources/gstcefsrc/third_party/cef/cef_binary_103.0.9+gd0bbcbb+chromium-103.0.5060.114_linuxarm64.
Call Stack (most recent call first):
CMakeLists.txt:49 (find_package)

-- Configuring incomplete, errors occurred!

why it looks again to third-party.

i do not ahve the knowledge to solve by my own

lblabr commented

Maybe this helps...

works:
image

does not work
image

Thanks a lot!

@lblabr can you expand on what worked and what didn't? I can't tell by the images tbh

lblabr commented

obs-browser plugin is used to "stream" a webpage more or less the same what i try to achive with gstreamer and your plugin.

obs-browser:
as you can see the library is not referenced by a link... (how ever this was achieved) build static?

libgstcef.so
libcef.so is referenced by an library (shared??) does not work

but as i sayed, i'm not a dev just have basic knwoledge about how to build... trying a lot sometimes it works some not

lblabr commented

might this help?
https://bitbucket.org/chromiumembedded/java-cef/issues/377/runsh-should-know-its-directory

according to this description:
https://stackoverflow.com/questions/34428037/how-to-interpret-the-output-of-the-ldd-program

for obs-browser the libcef is already in the memory, that's why there is no path in ldd output

how do achive that for cefsrc plugin?

lblabr commented

tried:

jetson@nano:~/.sources/gstcefsrc/build$ export LD_PRELOAD="/home/jetson/.sources/gstcefsrc/build/Release/libcef.so"

jetson@nano:~/.sources/gstcefsrc/build$ env | grep LD
LD_PRELOAD=/home/jetson/.sources/gstcefsrc/build/Release/libcef.so
LD_LIBRARY_PATH=/opt/ffmpeg-42/bin:/opt/ffmpeg-42/lib:
OLDPWD=/home/jetson

jetson@nano:~/.sources/gstcefsrc/build$ GST_PLUGIN_PATH=Release:$GST_PLUGIN_PATH gst-launch-1.0 cefsrc url="https://soundcloud.com/platform/sama" ! video/x-raw, width=1920, height=1080, framerate=60/1 ! cefdemux name=d d.video ! queue max-size-bytes=0 max-size-buffers=0 max-size-time=3000000000 ! videoconvert ! xvimagesink audiotestsrc do-timestamp=true is-live=true  volume=0.00 ! audiomixer name=mix ! queue max-size-bytes=0 max-size-buffers=0 max-size-time=3000000000 ! audioconvert ! pulsesink d.audio ! mix.
WARNING: erroneous pipeline: no element "cefsrc"

jetson@nano:~/.sources/gstcefsrc/build$ ls Release/
chrome_100_percent.pak  chrome-sandbox    icudtl.dat  libEGL.so     libgstcef.so          libvulkan.so.1  resources.pak      v8_context_snapshot.bin
chrome_200_percent.pak  gstcefsubprocess  libcef.so   libGLESv2.so  libvk_swiftshader.so  locales         snapshot_blob.bin  vk_swiftshader_icd.json

lblabr commented

i started from ...... /gstcefsrc/build$

needed to change GST_PLUGIN_PATH=Release => GST_PLUGIN_PATH=./Release

lblabr commented

with:
`
jetson@nano:~/.sources/gstcefsrc/build$ export LD_PRELOAD="/home/jetson/.sources/gstcefsrc/build/Release/libcef.so"

`
test:

GST_PLUGIN_PATH=./Release:$GST_PLUGIN_PATH gst-launch-1.0 \
    cefsrc url="https://soundcloud.com/platform/sama" ! \
    video/x-raw, width=1920, height=1080, framerate=60/1 ! cefdemux name=d d.video ! \
    queue max-size-bytes=0 max-size-buffers=0 max-size-time=3000000000 ! videoconvert ! \
    xvimagesink audiotestsrc do-timestamp=true is-live=true  volume=0.00 ! audiomixer name=mix ! \
    queue max-size-bytes=0 max-size-buffers=0 max-size-time=3000000000 ! audioconvert ! pulsesink \
    d.audio ! mix.

works!!

lblabr commented

is it possible to do an overlay to an video with that plugin like they do in:

https://www.youtube.com/watch?v=QNZJYOuVGiE
https://www.youtube.com/watch?v=no7rvUk8GqM (5:45)

?

yes it is, for overlays you would usually mix things together with a compositor element.

lblabr commented

i'm new with gstreamer, could you pls. share an example?

@lblabr I advise reading GStreamer's documentation.