GithubHelp home page GithubHelp logo

gstcefsrc's Introduction

gstcefsrc

Build

mkdir build && cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
make

Optional CMake variables

  • CEF_VERSION allows to override the default CEF version
  • CEF_BUILDS_HOMEPAGE_URL allows to configure the URL of the website hosting CEF binaries. Default is https://cef-builds.spotifycdn.com

Third-party CEF builds

The official CEF builds hosted by Spotify do not support patent-encumbered codecs such as H.264. If that is a feature you need in your project or for some reason you need to customize the Chromium build flags, you need to rebuild CEF yourself. Thankfully at least two projects can help you with that daunting task:

Run

The element can then be tested with:

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.

Record website video + audio (with audiomixer)

GST_PLUGIN_PATH=Release:$GST_PLUGIN_PATH gst-launch-1.0 -e \
    cefsrc url="https://soundcloud.com/platform/sama" ! \
    video/x-raw, width=1920, height=1080, framerate=60/1 ! \
    cefdemux name=demux ! queue ! videoconvert ! \
    queue max-size-bytes=0 max-size-buffers=0 max-size-time=3000000000 ! x264enc ! queue ! \
    mp4mux name=muxer ! filesink location='test.mp4' \
    audiotestsrc do-timestamp=true is-live=true  volume=0.0 ! audiomixer name=mix ! \
    queue max-size-bytes=0 max-size-buffers=0 max-size-time=3000000000 ! audioconvert ! \
    audiorate ! audioresample ! faac bitrate=128000 ! queue ! muxer. \
    demux. ! queue ! mix.

This will work with sites with no audio as well

cefsrc requires an X server environment on Linux, if none is available you can run the previous commands with xvfb-run:

xvfb-run --server-args="-screen 0 1920x1080x60" gst-launch-1.0 ...

In addition, a wrapper bin is exposed, wrapping cefsrc and cefdemux, and handling web+http, web+https and web+file protocols:

GST_PLUGIN_PATH=Release:$GST_PLUGIN_PATH gst-launch-1.0 \
    cefbin name=cef cefsrc::url="https://soundcloud.com/platform/sama" \
    cef.video ! video/x-raw, width=1920, height=1080, framerate=60/1 ! videoconvert ! xvimagesink \
    cef.audio ! audioconvert ! audiomixer ! autoaudiosink
gst-launch-1.0 playbin uri=web+https://www.soundcloud.com/platform/sama

Docker GPU Acceleration

This is simply a hint/note for those who want to use this plugin in a docker container with GPU acceleration. Your particular setup may vary. The following was tested on Ubuntu 22.04 with a Nvidia GPU. This assumes you have installed the Nvidia drivers, docker, and the Nvidia Container Toolkit. You may also need to configure your xorg.conf within the container to use the Nvidia GPU.

  • xserver-xorg-video-dummy is required in the container

Running docker with the following flags will allow the container to access the host's GPU:

docker run --gpus all -v /usr/local/cuda:/usr/local/cuda --device=/dev/dri/card0 --rm \
-e DISPLAY=:1 -v /tmp/X11-unix:/tmp/.X11 -it <image> /bin/bash

Inside the container run:

Xorg -noreset +extension GLX +extension RANDR \+extension RENDER -logfile ./xserver.log vt1 :1 &

Test that the GPU is accessible by running:

gst-launch-1.0 -e cefsrc url="chrome://gpu" gpu=true \
chrome-extra-flags="use-gl=egl, enable-gpu-rasterization,ignore-gpu-blocklist" \
! video/x-raw, width=1920, height=8080, framerate=1/1 \
! cefdemux name=demux ! queue ! videoconvert \
! pngenc ! multifilesink location="frame%d.png"

It is also helpful to run nvidia-smi or nvtop to verify the GPU is being used. Note it is possible to use the GPU within a kube pod as well. This has been tested and runs in a production environment on GKE using Container Optimized OS.

gstcefsrc's People

Contributors

aiden-jeffrey avatar amotzte avatar fraxinas avatar ghostnumber7 avatar mathieuduponchelle avatar ocrete avatar philn avatar pyldin601 avatar rationalsa avatar reinismu avatar stevemcfarlin avatar thierrygayet avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gstcefsrc's Issues

gstcefsubprocess usage

Hi,

May i know the usage of the gstcefsubprocess binary with the gstcef module ?

How is it used with the gst pipeline ?

thanks in advance for your reply.

BR
Thierry

Gst Demux Audio Caps

Hey,

I wanted to say big thank you for this project.

On the side note. I'was building pipeline with decklink video and audio sinks which are taken from the cefsrc plugin, but I found an issue with audio caps, in the plugin inspect and in the dot fiels I see format to be F32BE, but when I actually add it in the caps it shows me that it failed to negotiate.

Some code:

    cef_audio_filter.set_property("caps", &gst::Caps::builder("audio/x-raw")
        // here is a bug with invalid format, shows that it is F32BE, but when added in the caps fails to negotiate
        // .field("format", &"F32BE")
        .field("rate", &44100)
        .field("channels", &2)
        .field("layout", &"interleaved")
        .build()
    ).unwrap();

Some logs:

0:00:05.547767871 903835 0x561f142ca180 WARN                 basesrc gstbasesrc.c:3072:gst_base_src_loop:<cefsrc0> error: Internal data stream error.
0:00:05.547796675 903835 0x561f142ca180 WARN                 basesrc gstbasesrc.c:3072:gst_base_src_loop:<cefsrc0> error: streaming stopped, reason not-negotiated (-4)
Error received Some("/GstPipeline:pipeline0/GstCefSrc:cefsrc0"): Internal data stream error.

If I don't add the field, it works fine.

[question] h264 CEF?

How could we use a build of CEF that has all codecs, like H264?

I noticed this commit changin remote port numbers, but is there one to tell CEF to use a different Chromium build? Or has CEF to be built completely from scratch?

Invalid readme build commands after latest PR

After #31 developers following readme won't be able to run examples

Setting pipeline to PAUSED ...
[0917/180736.657175:ERROR:context.cc(108)] The browser_subprocess_path directory (Release/gstcefsubprocess) is not an absolute path. Defaulting to empty.
[0917/180736.657298:ERROR:context.cc(108)] The locales_dir_path directory (Release/locales) is not an absolute path. Defaulting to empty.
Error initializing: Unknown option --type=zygote
Error initializing: Unknown option --type=zygote
Error initializing: Unknown option --type=utility
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
[0917/180736.694625:FATAL:gpu_data_manager_impl_private.cc(407)] GPU process isn't usable. Goodbye.
Error initializing: Unknown option --type=utility
[1]    299009 trace trap (core dumped)  GST_PLUGIN_PATH=Release:$GST_PLUGIN_PATH gst-launch-1.0 cefsrc  ! video/x-raw

Broken Linux x64 build

The following PR broke the x64 Linux build: #67

[ 96%] Building CXX object CMakeFiles/gstcefsubprocess.dir/gstcefsubprocess.cc.o
make[2]: *** No rule to make target 'libcef_lib-NOTFOUND', needed by 'Release/gstcefsubprocess'.  Stop.
make[1]: *** [CMakeFiles/Makefile2:102: CMakeFiles/gstcefsubprocess.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

Reverting to the prior commit fixes the build.

trying to build for jetson nano

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

Question about cefdemux with sound usage

Hi Mathieu,

I have a question of substance to ask you on the CEF demuxer.

Indeed, once the demux done, I transcode separately audio and video before sending it to a live site like facebook, twitch or youtube.

If I use the pipeline that you put on the gitbub page of gstcef:

gst-launch-1.0 cefsrc url = "https://soundcloud.com/platform/sama"! tail! cefdemux name = d \
  d.video! video / x-raw! tail! videoconvert! autovideosink \
  d. ! audio / x-raw! tail! audioconvert! autoaudiosink async-handling = true

your_pipeline

In this pipeline, once the cefsrc module that generates an audio and video stream muxed from a url, we pass it to the demuxer cefdemux, then each stream (audio) ouis (video) is played on a local sink. Until it's perfect.

In my case, once the demuxage done, I have to transcode the audio (to AAC-LC/MPEG4) and the video (to H264) separately before putting it back in flv to a tier like twitch:

gst-launch-1.0  -v cefsrc url="https://soundcloud.com/platform/sama" ! queue ! cefdemux name=d \
> d.video ! video/x-raw,format=BGRA,framerate=30/1 ! queue ! videoconvert ! videorate max-rate=3000 ! videoscale ! x264enc tune=zerolatency ! mux. \
> d. ! queue ! decodebin ! voaacenc bitrate=96000 ! audio/mpeg ! aacparse ! audio/mpeg, mpegversion=4  ! mux. \
> flvmux streamable=true name=mux ! \
> rtmpsink location="rtmp://live-cdg.twitch.tv/app/live_452134949_IbkVFGvmV50qounKaLE1085nOGTt7R"
$ gst-launch-1.0  -v cefsrc url="https://soundcloud.com/platform/sama" ! queue ! cefdemux name=d \
> d.video ! video/x-raw,format=BGRA,framerate=30/1 ! queue ! videoconvert ! videorate max-rate=3000 ! videoscale ! x264enc tune=zerolatency ! mux. \
> d. ! queue ! decodebin ! voaacenc bitrate=96000 ! audio/mpeg ! aacparse ! audio/mpeg, mpegversion=4  ! mux. \
> flvmux streamable=true name=mux ! \
> rtmpsink location="rtmp://live-cdg.twitch.tv/app/live_452134949_IbkVFGvmV50qounKaLE1085nOGTt7R"
Setting pipeline to PAUSED ...
0:00:00.062106389  5887 0x55676a31f4a0 WARN              aggregator gstaggregator.c:1717:gst_aggregator_query_latency_unlocked:<mux> Latency query failed
0:00:00.110082790  5887 0x55676a3dd940 FIXME                default gstutils.c:3981:gst_pad_create_stream_id_internal:<cefsrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
Pipeline is live and does not need PREROLL ...
/GstPipeline:pipeline0/GstCefSrc:cefsrc0.GstPad:src: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCefDemux:d.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstCefDemux:d.GstPad:video: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoRate:videorate0.GstPad:src: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoScale:videoscale0.GstPad:src: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
Redistribute latency...
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:sink: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoScale:videoscale0.GstPad:sink: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoRate:videorate0.GstPad:sink: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
0:00:00.158992160  5887 0x55676a31f4a0 WARN              aggregator gstaggregator.c:1717:gst_aggregator_query_latency_unlocked:<mux> Latency query failed
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:src: caps = video/x-h264, codec_data=(buffer)01f4001fffe1001c67f4001f91964014016ec05a808080a0000003002000000791e3064901000568ebcc4480, stream-format=(string)avc, alignment=(string)au, level=(string)3.1, profile=(string)high-4:4:4, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
0:00:00.159200006  5887 0x55676a31f4a0 WARN              aggregator gstaggregator.c:1717:gst_aggregator_query_latency_unlocked:<mux> Latency query failed
/GstPipeline:pipeline0/GstFlvMux:mux.GstFlvMuxPad:sink_0: caps = video/x-h264, codec_data=(buffer)01f4001fffe1001c67f4001f91964014016ec05a808080a0000003002000000791e3064901000568ebcc4480, stream-format=(string)avc, alignment=(string)au, level=(string)3.1, profile=(string)high-4:4:4, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
0:00:00.159225953  5887 0x55676a31f4a0 WARN              aggregator gstaggregator.c:1717:gst_aggregator_query_latency_unlocked:<mux> Latency query failed
0:00:00.159244066  5887 0x55676a31f4a0 WARN              aggregator gstaggregator.c:1717:gst_aggregator_query_latency_unlocked:<mux> Latency query failed
0:00:00.159265250  5887 0x55676a31f4a0 WARN              aggregator gstaggregator.c:1717:gst_aggregator_query_latency_unlocked:<mux> Latency query failed
0:00:00.159282382  5887 0x55676a31f4a0 WARN              aggregator gstaggregator.c:1717:gst_aggregator_query_latency_unlocked:<mux> Latency query failed
(...)

pipeline-with-audio-and-video

When I request the generation of the .dot file, I see that I demuxer is detached from the audio part. which generates a stream without sound.

However, if instead of demux.audio I use audiotestsrc, the flow included this time a sound:

gst-launch-1.0  -v cefsrc url="https://soundcloud.com/platform/sama" ! queue ! cefdemux name=d d.video ! video/x-raw,format=BGRA,framerate=30/1 ! queue ! videoconvert ! videorate max-rate=3000 ! videoscale ! x264enc tune=zerolatency ! mux. audiotestsrc ! queue ! audioconvert ! audiorate ! voaacenc bitrate=96000 ! audio/mpeg ! aacparse ! audio/mpeg, mpegversion=4  ! mux. flvmux streamable=true name=mux ! rtmpsink location="rtmp://live-cdg.twitch.tv/app/live_452134949_IbkVFGvmV50qounKaLE1085nOGTt7R"
$ gst-launch-1.0  -v cefsrc url="https://soundcloud.com/platform/sama" ! queue ! cefdemux name=d \
> d.video ! video/x-raw,format=BGRA,framerate=30/1 ! queue ! videoconvert ! videorate max-rate=3000 ! videoscale ! x264enc tune=zerolatency ! mux. \
> audiotestsrc ! queue ! audioconvert ! audiorate ! voaacenc bitrate=96000 ! audio/mpeg ! aacparse ! audio/mpeg, mpegversion=4  ! mux. \
> flvmux streamable=true name=mux ! \
> rtmpsink location="rtmp://live-cdg.twitch.tv/app/live_452134949_IbkVFGvmV50qounKaLE1085nOGTt7R"
Setting pipeline to PAUSED ...
0:00:00.066099343  5539 0x5590542da320 WARN              aggregator gstaggregator.c:1717:gst_aggregator_query_latency_unlocked:<mux> Latency query failed
0:00:00.066291012  5539 0x559054315e30 FIXME                default gstutils.c:3981:gst_pad_create_stream_id_internal:<audiotestsrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:00.066381147  5539 0x5590542da320 WARN              aggregator gstaggregator.c:1717:gst_aggregator_query_latency_unlocked:<mux> Latency query failed
0:00:00.110671359  5539 0x5590543d1630 FIXME                default gstutils.c:3981:gst_pad_create_stream_id_internal:<cefsrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
Pipeline is live and does not need PREROLL ...
/GstPipeline:pipeline0/GstAudioTestSrc:audiotestsrc0.GstPad:src: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1
/GstPipeline:pipeline0/GstQueue:queue2.GstPad:sink: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1
/GstPipeline:pipeline0/GstQueue:queue2.GstPad:src: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1
/GstPipeline:pipeline0/GstAudioRate:audiorate0.GstPad:src: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1
/GstPipeline:pipeline0/GstVoAacEnc:voaacenc0.GstPad:sink: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1
/GstPipeline:pipeline0/GstAudioRate:audiorate0.GstPad:sink: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = audio/x-raw, format=(string)S16LE, layout=(string)interleaved, rate=(int)44100, channels=(int)1
/GstPipeline:pipeline0/GstVoAacEnc:voaacenc0.GstPad:src: caps = audio/mpeg, mpegversion=(int)4, channels=(int)1, rate=(int)44100, level=(string)2, base-profile=(string)lc, profile=(string)lc, stream-format=(string)raw, codec_data=(buffer)1208
/GstPipeline:pipeline0/GstCapsFilter:capsfilter1.GstPad:src: caps = audio/mpeg, mpegversion=(int)4, channels=(int)1, rate=(int)44100, level=(string)2, base-profile=(string)lc, profile=(string)lc, stream-format=(string)raw, codec_data=(buffer)1208
/GstPipeline:pipeline0/GstAacParse:aacparse0.GstPad:src: caps = audio/mpeg, mpegversion=(int)4, channels=(int)1, rate=(int)44100, level=(string)2, base-profile=(string)lc, profile=(string)lc, stream-format=(string)raw, codec_data=(buffer)1208, framed=(boolean)true
/GstPipeline:pipeline0/GstCapsFilter:capsfilter2.GstPad:src: caps = audio/mpeg, mpegversion=(int)4, channels=(int)1, rate=(int)44100, level=(string)2, base-profile=(string)lc, profile=(string)lc, stream-format=(string)raw, codec_data=(buffer)1208, framed=(boolean)true
/GstPipeline:pipeline0/GstFlvMux:mux.GstFlvMuxPad:sink_1: caps = audio/mpeg, mpegversion=(int)4, channels=(int)1, rate=(int)44100, level=(string)2, base-profile=(string)lc, profile=(string)lc, stream-format=(string)raw, codec_data=(buffer)1208, framed=(boolean)true
/GstPipeline:pipeline0/GstCapsFilter:capsfilter2.GstPad:sink: caps = audio/mpeg, mpegversion=(int)4, channels=(int)1, rate=(int)44100, level=(string)2, base-profile=(string)lc, profile=(string)lc, stream-format=(string)raw, codec_data=(buffer)1208, framed=(boolean)true
/GstPipeline:pipeline0/GstAacParse:aacparse0.GstPad:sink: caps = audio/mpeg, mpegversion=(int)4, channels=(int)1, rate=(int)44100, level=(string)2, base-profile=(string)lc, profile=(string)lc, stream-format=(string)raw, codec_data=(buffer)1208
/GstPipeline:pipeline0/GstCapsFilter:capsfilter1.GstPad:sink: caps = audio/mpeg, mpegversion=(int)4, channels=(int)1, rate=(int)44100, level=(string)2, base-profile=(string)lc, profile=(string)lc, stream-format=(string)raw, codec_data=(buffer)1208
/GstPipeline:pipeline0/GstCefSrc:cefsrc0.GstPad:src: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCefDemux:d.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstCefDemux:d.GstPad:video: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstQueue:queue1.GstPad:src: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoRate:videorate0.GstPad:src: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoScale:videoscale0.GstPad:src: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
Redistribute latency...
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:sink: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoScale:videoscale0.GstPad:sink: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoRate:videorate0.GstPad:sink: caps = video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, format=(string)Y444
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps = video/x-raw, format=(string)BGRA, width=(int)1280, height=(int)720, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstX264Enc:x264enc0.GstPad:src: caps = video/x-h264, codec_data=(buffer)01f4001fffe1001c67f4001f91964014016ec05a808080a0000003002000000791e3064901000568ebcc4480, stream-format=(string)avc, alignment=(string)au, level=(string)3.1, profile=(string)high-4:4:4, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
/GstPipeline:pipeline0/GstFlvMux:mux.GstFlvMuxPad:sink_0: caps = video/x-h264, codec_data=(buffer)01f4001fffe1001c67f4001f91964014016ec05a808080a0000003002000000791e3064901000568ebcc4480, stream-format=(string)avc, alignment=(string)au, level=(string)3.1, profile=(string)high-4:4:4, width=(int)1280, height=(int)720, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1, interlace-mode=(string)progressive, colorimetry=(string)bt709, chroma-site=(string)mpeg2
0:00:00.157024237  5539 0x5590542da320 FIXME               basesink gstbasesink.c:3145:gst_base_sink_default_event:<rtmpsink0> stream-start event without group-id. Consider implementing group-id handling in the upstream elements
/GstPipeline:pipeline0/GstFlvMux:mux.GstAggregatorPad:src: caps = video/x-flv
/GstPipeline:pipeline0/GstRTMPSink:rtmpsink0.GstPad:sink: caps = video/x-flv
/GstPipeline:pipeline0/GstFlvMux:mux.GstAggregatorPad:src: caps = video/x-flv, streamheader=(buffer)< 464c5601050000000900000000, 1200012c0000000000000002000a6f6e4d65746144617461080000000b000c766964656f636f646563696400401c000000000000000577696474680040940000000000000006686569676874004086800000000000000c417370656374526174696f58003ff0000000000000000c417370656374526174696f59003ff000000000000000096672616d657261746500403e000000000000000d766964656f64617461726174650040a0000000000000000c617564696f636f6465636964004024000000000000000d617564696f6461746172617465000000000000000000000f6d6574616461746163726561746f7202001a4753747265616d657220312e31342e3520464c56206d75786572000c6372656174696f6e64617465020017467269204e6f7620382030383a35343a3133203230313900000900000137, 0900003100000000000000170000000001f4001fffe1001c67f4001f91964014016ec05a808080a0000003002000000791e3064901000568ebcc44800000003c, 0800000400000000000000af0012080000000f >
/GstPipeline:pipeline0/GstRTMPSink:rtmpsink0.GstPad:sink: caps = video/x-flv, streamheader=(buffer)< 464c5601050000000900000000, 1200012c0000000000000002000a6f6e4d65746144617461080000000b000c766964656f636f646563696400401c000000000000000577696474680040940000000000000006686569676874004086800000000000000c417370656374526174696f58003ff0000000000000000c417370656374526174696f59003ff000000000000000096672616d657261746500403e000000000000000d766964656f64617461726174650040a0000000000000000c617564696f636f6465636964004024000000000000000d617564696f6461746172617465000000000000000000000f6d6574616461746163726561746f7202001a4753747265616d657220312e31342e3520464c56206d75786572000c6372656174696f6e64617465020017467269204e6f7620382030383a35343a3133203230313900000900000137, 0900003100000000000000170000000001f4001fffe1001c67f4001f91964014016ec05a808080a0000003002000000791e3064901000568ebcc44800000003c, 0800000400000000000000af0012080000000f >
0:00:01.732939317  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_1> Got backwards dts! (0:00:00.023000000 < 0:00:00.033000000)
0:00:01.733435252  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_1> Got backwards dts! (0:00:00.069000000 < 0:00:00.100000000)
0:00:01.733623093  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_1> Got backwards dts! (0:00:00.092000000 < 0:00:00.100000000)
0:00:01.759836701  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.133000000 < 0:00:01.578000000)
0:00:01.783009898  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.166000000 < 0:00:01.602000000)
0:00:01.783047479  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.200000000 < 0:00:01.602000000)
0:00:01.806704207  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.233000000 < 0:00:01.625000000)
0:00:01.829652540  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.266000000 < 0:00:01.648000000)
0:00:01.829732890  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.300000000 < 0:00:01.648000000)
0:00:01.829763609  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.333000000 < 0:00:01.648000000)
0:00:01.852771316  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.366000000 < 0:00:01.671000000)
0:00:01.852830769  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.400000000 < 0:00:01.671000000)
0:00:01.875917725  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.433000000 < 0:00:01.695000000)
0:00:01.875962499  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.466000000 < 0:00:01.695000000)
0:00:01.875974198  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.500000000 < 0:00:01.695000000)
0:00:01.899238758  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.533000000 < 0:00:01.718000000)
0:00:01.899321029  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.566000000 < 0:00:01.718000000)
0:00:01.922437932  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.600000000 < 0:00:01.741000000)
0:00:01.922577644  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.633000000 < 0:00:01.741000000)
0:00:01.922593249  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.666000000 < 0:00:01.741000000)
0:00:01.945720980  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.700000000 < 0:00:01.764000000)
0:00:01.945907338  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.733000000 < 0:00:01.764000000)
0:00:01.968746270  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.766000000 < 0:00:01.787000000)
0:00:01.968778268  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.800000000 < 0:00:01.787000000)
0:00:01.968790102  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.833000000 < 0:00:01.787000000)
0:00:01.991975555  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.866000000 < 0:00:01.811000000)
0:00:01.992023448  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.900000000 < 0:00:01.811000000)
0:00:01.992038739  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.933000000 < 0:00:01.811000000)
0:00:02.015338490  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:00.966000000 < 0:00:01.834000000)
0:00:02.015400084  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.000000000 < 0:00:01.834000000)
0:00:02.038403783  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.033000000 < 0:00:01.857000000)
0:00:02.038435279  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.066000000 < 0:00:01.857000000)
0:00:02.038446200  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.100000000 < 0:00:01.857000000)
0:00:02.061748276  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.133000000 < 0:00:01.880000000)
0:00:02.061826128  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.166000000 < 0:00:01.880000000)
0:00:02.084934081  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.200000000 < 0:00:01.904000000)
0:00:02.084967203  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.233000000 < 0:00:01.904000000)
0:00:02.108097245  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.266000000 < 0:00:01.927000000)
0:00:02.108128019  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.300000000 < 0:00:01.927000000)
0:00:02.108141979  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.333000000 < 0:00:01.927000000)
0:00:02.131333070  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.366000000 < 0:00:01.950000000)
0:00:02.131382255  5539 0x5590542da320 WARN                  flvmux gstflvmux.c:1082:gst_flv_mux_buffer_to_tag_internal:<mux:sink_0> Got backwards dts! (0:00:01.400000000 < 0:00:01.950000000)
(...)

pipeline-with-audio-test

For me, the structure of my pipeline is correct but when I want to transcode the sound but also the video out from demux to give it to a muxer and although it does not work because I have only the video without any sound.

Would you have an idea that could explain why I do this behavior with your demuxer? Indeed, if I transpose with another demuxer it works too. I only have this problem with your demuxer.

I think it could be an issue of the cefdemux.

Thank you in advance for your return.

BR

Thierry

crash of the libcef runnin a gstcef pipeline on a VM

Hi,

Because i wanted to upgrade the cef version i needed to add the h264 support for webrtc usage.

I have used the following version :

  • CEF 76.0.1+g763dfe6+chromium-76.0.3809.62
  • Chromium 76.0.3809.62

The build of this cef version that include the h264 support works fine.

Your gstcef module works fine with the cef version that you declare within your CMakelist.txt buy when i overrride yours by replacing your cef files by ours it work file on a computer, not on an Amazon server (Virtualized).

When i start your pipeline test, i always crash with the following trace 👍

gst-launch-1.0 cefsrc url="https://soundcloud.com/platform/sama" ! queue ! cefdemux name=d   d.video ! video/x-raw ! queue ! videoconvert ! fakesink dump=true
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Received signal 11 SEGV_MAPERR 000000000020
#0 0x7fac4492f489 base::debug::CollectStackTrace()
#1 0x7fac448899b3 base::debug::StackTrace::StackTrace()
#2 0x7fac4492f001 base::debug::(anonymous namespace)::StackDumpSignalHandler()
#3 0x7fac3f523890 <unknown>
#4 0x7fac3f51afa0 <unknown>
#5 0x7fac4493a3c8 base::internal::LockImpl::Lock()
#6 0x7fac447b41ba CefFrameHostImpl::RefreshAttributes()
#7 0x7fac44789941 CefBrowserHostImpl::DidFinishNavigation()
#8 0x7fac434a1000 content::WebContentsImpl::DidFinishNavigation()
#9 0x7fac431d4609 content::NavigationHandleImpl::~NavigationHandleImpl()
#10 0x7fac431d491e content::NavigationHandleImpl::~NavigationHandleImpl()
#11 0x7fac431d80dc content::NavigationRequest::~NavigationRequest()
#12 0x7fac431d856e content::NavigationRequest::~NavigationRequest()
#13 0x7fac431afb7d content::FrameTreeNode::ResetNavigationRequest()
#14 0x7fac431d8cf2 content::NavigationRequest::OnRequestFailedInternal()
#15 0x7fac431dd366 content::NavigationRequest::OnRequestFailed()
#16 0x7fac4329ffb0 content::NavigationURLLoaderImpl::OnComplete()
#17 0x7fac448dceca base::TaskAnnotator::RunTask()
#18 0x7fac448ec0be base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl()
#19 0x7fac448ebcfe base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoSomeWork()
#20 0x7fac448a3fb6 base::MessagePumpGlib::Run()
#21 0x7fac448ecab9 base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run()
#22 0x7fac448bf927 base::RunLoop::RunWithTimeout()
#23 0x7fac44797f40 CefDoMessageLoopWork()
#24 0x7fac3637ec82 cef_do_work_func()
#25 0x7fac3f77cd03 <unknown>
#26 0x7fac3f77c285 g_main_context_dispatch
#27 0x7fac3f77c650 <unknown>
#28 0x7fac3f77c962 g_main_loop_run
#29 0x7fac3fce09f3 gst_bus_poll
#30 0x560794d31bb3 <unknown>
#31 0x560794d30a1e <unknown>
#32 0x7fac3f141b97 __libc_start_main
#33 0x560794d310da <unknown>
 r8: 0000000000000000  r9: 00007ffdcafed101 r10: 0000000000000000 r11: 000005e96d22da80
r12: 0000000000000000 r13: 000005e96d1d5e40 r14: 00007ffdcafed098 r15: 000005e96d1a2600
 di: 0000000000000010  si: 00007fac4493a3ae  bp: 00007ffdcafed0c0  bx: 0000000000000010
 dx: 0000000000000010  ax: 00007fac4493a3ae  cx: 0000000000000001  sp: 00007ffdcafed088
 ip: 00007fac3f51afa0 efl: 0000000000010202 cgf: 002b000000000033 erf: 0000000000000004
trp: 000000000000000e msk: 0000000000000000 cr2: 0000000000000020
[end of stack trace]
Calling _exit(1). Core file will not be generated.

And the core dump say :

gdb gst-launch-1.0 /data/cores/core.gst-launch-1.0.23910
bt

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `gst-launch-1.0 cefsrc url=https://soundcloud.com/platform/sama ! queue ! cefdem'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  __GI___pthread_mutex_lock (mutex=0x10) at ../nptl/pthread_mutex_lock.c:65
65      ../nptl/pthread_mutex_lock.c: No such file or directory.
[Current thread is 1 (Thread 0x7fbe8e0fd740 (LWP 23910))]
(gdb) bt
#0  0x00007fbe8d448fa0 in __GI___pthread_mutex_lock (mutex=0x10) at ../nptl/pthread_mutex_lock.c:65
#1  0x00007fbe874aa188 in base::internal::LockImpl::Lock() () at ./libcef.so
#2  0x00007fbe8732413a in CefFrameHostImpl::RefreshAttributes() () at ./libcef.so
#3  0x00007fbe872f98c1 in CefBrowserHostImpl::DidFinishNavigation(content::NavigationHandle*) () at ./libcef.so
#4  0x00007fbe86010dd0 in content::WebContentsImpl::DidFinishNavigation(content::NavigationHandle*) () at ./libcef.so
#5  0x00007fbe85d443d9 in content::NavigationHandleImpl::~NavigationHandleImpl() () at ./libcef.so
#6  0x00007fbe85d446ee in content::NavigationHandleImpl::~NavigationHandleImpl() () at ./libcef.so
#7  0x00007fbe85d47eac in content::NavigationRequest::~NavigationRequest() () at ./libcef.so
#8  0x00007fbe85d4833e in content::NavigationRequest::~NavigationRequest() () at ./libcef.so
#9  0x00007fbe85d1f94d in content::FrameTreeNode::ResetNavigationRequest(bool, bool) () at ./libcef.so
#10 0x00007fbe85d48ac2 in content::NavigationRequest::OnRequestFailedInternal(network::URLLoaderCompletionStatus const&, bool, base::Optional<std::__1::basic_string<char, std::__1::char_traits<char>, std:
:__1::allocator<char> > > const&, bool) () at ./libcef.so
#11 0x00007fbe85d4d136 in content::NavigationRequest::OnRequestFailed(network::URLLoaderCompletionStatus const&) () at ./libcef.so
#12 0x00007fbe85e0fd80 in content::NavigationURLLoaderImpl::OnComplete(network::URLLoaderCompletionStatus const&) () at ./libcef.so
#13 0x00007fbe8744cd8a in base::TaskAnnotator::RunTask(char const*, base::PendingTask*) () at ./libcef.so
#14 0x00007fbe8745bf7e in base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::sequence_manager::LazyNow*, bool*) () at ./libcef.so
#15 0x00007fbe8745bbbe in base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoSomeWork() () at ./libcef.so
#16 0x00007fbe8741cd37 in base::(anonymous namespace)::WorkSourceDispatch(_GSource*, int (*)(void*), void*) () at ./libcef.so
#17 0x00007fbe8d6aa417 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#18 0x00007fbe8d6aa650 in  () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#19 0x00007fbe8d6aa6dc in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#20 0x00007fbe87413e5e in base::MessagePumpGlib::Run(base::MessagePump::Delegate*) () at ./libcef.so
#21 0x00007fbe8745c979 in non-virtual thunk to base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool, base::TimeDelta) () at ./libcef.so
#22 0x00007fbe8742f7e7 in base::RunLoop::RunWithTimeout(base::TimeDelta) () at ./libcef.so
#23 0x00007fbe87307ec0 in CefDoMessageLoopWork() () at ./libcef.so
#24 0x00007fbe8bf73c82 in cef_do_work_func(_GstCefSrc*) () at /overlay/cef-gstreamer/Release/libgstcef.so
#25 0x00007fbe8d6aad03 in  () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#26 0x00007fbe8d6aa285 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#27 0x00007fbe8d6aa650 in  () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#28 0x00007fbe8d6aa962 in g_main_loop_run () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#29 0x00007fbe8dc0e9f3 in gst_bus_poll () at /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#30 0x000055820a0b0bb3 in  ()
#31 0x000055820a0afcb7 in  ()
#32 0x00007fbe8d06fb97 in __libc_start_main (main=0x55820a0af460, argc=17, argv=0x7fffc028bce8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffc028bcd8)
   at ../csu/libc-start.c:310
#33 0x000055820a0b00da in  ()

As far i know, google told me that it can be reproduce with a virtualbox image.

The problem seen that one :

I have declare a CEF issue :

Any idea of the problem ?

BR

Thierry

RTMP SINK GSTREAMER

Hello,

In order to send the video and audio from the cefsrc module to facebook or twitch , i'm using this gstreamer pipeline:

gst-launch-1.0 cefsrc url="file:///home/…." ! queue ! 
cefdemux name=d d.video ! video/x-raw,format=BGRA,width=1280,height=720,framerate=30/1 ! queue !
videoconvert ! videorate max-rate=3000 ! videoscale ! x264enc tune=zerolatency speed-preset=superfast key-int-max=60 ref=2 !
mux. d.audio_0 ! 
audio/x-raw,rate=48000 ! queue ! audioconvert ! audiorate ! voaacenc bitrate=96000 ! 
flvmux streamable=true name=mux ! queue ! 
rtmpsink location="rtmps://live-api-s.facebook.com:443/rtmp/<facebook key> live=1"

Therefore, it does not connect to facebook (offline status)
On the other hand, when I send the video of the cefsrc module and a test audio as follows:

gst-launch-1.0 cefsrc url="file:///home/…." ! queue ! 
cefdemux name=d d.video ! video/x-raw,format=BGRA,width=1280,height=720,framerate=30/1 ! queue !
videoconvert ! videorate max-rate=3000 ! videoscale ! x264enc tune=zerolatency speed-preset=superfast key-int-max=60 ref=2 !
mux. audiotestsrc ! 
audio/x-raw,rate=48000 ! queue ! audioconvert ! audiorate ! voaacenc bitrate=96000 ! 
flvmux streamable=true name=mux ! queue ! 
rtmpsink location="rtmps://live-api-s.facebook.com:443/rtmp/<facebook key> live=1"

I can see the video and I hear the sound of audiotestsrc.

Is there anyone who would have a gstreamer based functional pipeline to push an Audio + Video muxed stream, of cefsrc module, using the rtmpsink module.

Thank you

Best regards

Rare negotiation errors are happening between cefsrc and cefdemux

Sometimes pipeline fails to construct because of some strange caps negotiation error between cefsrc and cefdemux.

In our logs we see:

gstpad.c:3235:gst_pad_query_accept_caps_default
cefdemux_overlay:sink
caps: video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, format=(string)BGRA were not compatible with: video/x-raw, width=(int)1280, height=(int)720, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, format=(string)BGRA, interlace-mode=(string)progressive

I have dug a bit into gstpad.c and seen that this happens because gst_caps_can_intersect (caps, allowed) or gst_caps_is_subset (caps, allowed) checks fail.

Unfortunately, I can't provide a simple reproduction case, because it's not reproducible in gst-launch1.0 and rarely happens only in our production.

No video output with `gtk4paintablesink` and `clappersink`

Hi! First of all, thanks for the work on this Gstreamer plugin.

Background

I want to use gstcefsrc to render webpages in a Gtk4 app. To integrate GStreamer into Gtk4, currently, there are 2 possible solutions:

  1. By using gtk4paintablesink developed by GStreamer developers.
  2. By using clappersink that is distributed with Clapper.

Issue

gstcefsrc works fine with xvimagesink. However, this isn't the case for gtk4paintablesink and clappersink.
When using gstcefsrc with gtk4paintablesink, the pipeline will go to the PLAYING state. (Tested with gst-launch-1.0. Nothing will be shown but audio will be played.) However, when integrated into Gtk4, it shows nothing.
When using gstcefsrc with clappersink, the pipeline will stuck at the PAUSED state forever. When integrated into Gtk4, it shows nothing as well.

Reproduce

To demonstrate the issue, I wrote a minimal Gtk4 video player app in Gjs. You can check it here:
https://github.com/jeffshee/web-renderer-test

Thanks.

Not compiling on macOS Ventura on MacBook M1

Can't compile the plugin on MacBook Pro M1 (macOS Ventura):

Here's full build cast:
asciicast

Have all gstreamer-related dependencies installed. During cmake run, I saw this warning several times:

IMPORTED_LOCATION not set for imported target "libcef_lib" configuration
  "Release".

UPD: Found possible reason. This build https://cef-builds.spotifycdn.com/index.html#macosarm64 has only sandboxed version of module cef_sandbox.a and CMakeLists.txt has no support if CEF sandboxed. Because in that case, env with paths to that module have a bit different names.

Crash while while running gstcef in debug mode

HI,

I have (re)build your module in debug mode with success. Indeed, I wanted to be able to investigate thanks to my debugger.

Indeed, two configurations types are defined within the CMakeList.txt file:

set(CMAKE_CONFIGURATION_TYPES Debug Release)

For that purpose, I have regenerated a cmake environment for the debug target.

The compilation succeed :

$ git clone https://github.com/centricular/gstcefsrc.git
$ cd gstcefsrc/
$ mkdir build-dbg && cd build-dbg
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug ..
$ make

but the the runtime generate crashes :

$ GST_PLUGIN_PATH=$PWD/Debug:$GST_PLUGIN_PATH gst-launch-1.0 cefsrc url="https://soundcloud.com/platform/sama" ! queue ! cefdemux name=d   d.video ! video/x-raw ! queue ! videoconvert ! autovideosink   d. ! audio/x-raw ! queue ! audioconvert ! autoaudiosink async-handling=true
Setting pipeline to PAUSED ...
[1029/173958.135954:FATAL:resource_bundle.cc(953)] Check failed: false. 
Trace/breakpoint trap (core dumped)

Any idea of the problem?

Did you experiment with this issue on your side too?

BR

Thierry

CefAudioHandler API reverted upstream

Hi Mathieu,

I am trying to build the CEF Version 77.1.14+g4fb61d2+chromium-77.0.3865.120 from spotify (http://opensource.spotify.com/cefbuilds/index.html).

For that purpose i have modified the CMakeList.txt as follow :

set(CEF_VERSION "77.1.14+g4fb61d2+chromium-77.0.3865.120")
set(CEF_ESCAPED_VERSION "77.1.14%2Bg4fb61d2%2Bchromium-77.0.3865.120")

Then, i have followed the several steps :

$ mkdir build && cd build/
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
 -- The C compiler identification is GNU 7.4.0
 -- The CXX compiler identification is GNU 7.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 /data/gstcefsrc/third_party/cef/cef_binary_77.1.14%2Bg4fb61d2%2Bchromium-77.0.3865.120_linux64.tar.bz2.sha1...
 -- Downloading /data/gstcefsrc/third_party/cef/cef_binary_77.1.14%2Bg4fb61d2%2Bchromium-77.0.3865.120_linux64.tar.bz2...
 -- [download 0% complete]
 -- [download 1% complete]
 -- [download 2% complete]
 -- [download 3% complete]
 -- [download 4% complete]
 -- [download 5% complete]
 -- [download 6% complete]
 -- [download 7% complete]
 -- [download 8% complete]
 -- [download 9% complete]
 -- [download 10% complete]
 -- [download 11% complete]
 -- [download 12% complete]
 -- [download 13% complete]
 -- [download 14% complete]
 -- [download 15% complete]
 -- [download 16% complete]
 -- [download 17% complete]
 -- [download 18% complete]
 -- [download 19% complete]
 -- [download 20% complete]
 -- [download 21% complete]
 -- [download 22% complete]
 -- [download 23% complete]
 -- [download 24% complete]
 -- [download 25% complete]
 -- [download 26% complete]
 -- [download 27% complete]
 -- [download 28% complete]
 -- [download 29% complete]
 -- [download 30% complete]
 -- [download 31% complete]
 -- [download 32% complete]
 -- [download 33% complete]
 -- [download 34% complete]
 -- [download 35% complete]
 -- [download 36% complete]
 -- [download 37% complete]
 -- [download 38% complete]
 -- [download 39% complete]
 -- [download 40% complete]
 -- [download 41% complete]
 -- [download 42% complete]
 -- [download 43% complete]
 -- [download 44% complete]
 -- [download 45% complete]
 -- [download 46% complete]
 -- [download 47% complete]
 -- [download 48% complete]
 -- [download 49% complete]
 -- [download 50% complete]
 -- [download 51% complete]
 -- [download 52% complete]
 -- [download 53% complete]
 -- [download 54% complete]
 -- [download 55% complete]
 -- [download 56% complete]
 -- [download 57% complete]
 -- [download 58% complete]
 -- [download 59% complete]
 -- [download 60% complete]
 -- [download 61% complete]
 -- [download 62% complete]
 -- [download 63% complete]
 -- [download 64% complete]
 -- [download 65% complete]
 -- [download 66% complete]
 -- [download 67% complete]
 -- [download 68% complete]
 -- [download 69% complete]
 -- [download 70% complete]
 -- [download 71% complete]
 -- [download 72% complete]
 -- [download 73% complete]
 -- [download 74% complete]
 -- [download 75% complete]
 -- [download 76% complete]
 -- [download 77% complete]
 -- [download 78% complete]
 -- [download 79% complete]
 -- [download 80% complete]
 -- [download 81% complete]
 -- [download 82% complete]
 -- [download 83% complete]
 -- [download 84% complete]
 -- [download 85% complete]
 -- [download 86% complete]
 -- [download 87% complete]
 -- [download 88% complete]
 -- [download 89% complete]
 -- [download 90% complete]
 -- [download 91% complete]
 -- [download 92% complete]
 -- [download 93% complete]
 -- [download 94% complete]
 -- [download 95% complete]
 -- [download 96% complete]
 -- [download 97% complete]
 -- [download 98% complete]
 -- [download 99% complete]
 -- [download 100% complete]
 -- Extracting /data/gstcefsrc/third_party/cef/cef_binary_77.1.14%2Bg4fb61d2%2Bchromium-77.0.3865.120_linux64.tar.bz2...
 -- Performing Test COMPILER_SUPPORTS_NO_UNDEFINED_VAR_TEMPLATE
 -- Performing Test COMPILER_SUPPORTS_NO_UNDEFINED_VAR_TEMPLATE - Success
 -- Performing Test COMPILER_SUPPORTS_NO_UNUSED_LOCAL_TYPEDEFS
 -- Performing Test COMPILER_SUPPORTS_NO_UNUSED_LOCAL_TYPEDEFS - Success
 -- Performing Test COMPILER_SUPPORTS_NO_LITERAL_SUFFIX
 -- Performing Test COMPILER_SUPPORTS_NO_LITERAL_SUFFIX - Success
 -- Performing Test COMPILER_SUPPORTS_NO_NARROWING
 -- Performing Test COMPILER_SUPPORTS_NO_NARROWING - Success
 -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
 -- Checking for modules 'gstreamer-1.0;gstreamer-video-1.0;gstreamer-audio-1.0'
 --   Found gstreamer-1.0, version 1.14.5
 --   Found gstreamer-video-1.0, version 1.14.5
 --   Found gstreamer-audio-1.0, version 1.14.5
 -- Configuring done
 -- Generating done
 -- Build files have been written to: /data/gstcefsrc/build
 $ make
 Scanning dependencies of target libcef_dll_wrapper
 [  1%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/shutdown_checker.cc.o
 [  2%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/transfer_util.cc.o
 [  2%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_atomicops_x86_gcc.cc.o
 [  3%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_bind_helpers.cc.o
 [  3%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_callback_helpers.cc.o
 [  4%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_callback_internal.cc.o
 [  4%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_lock.cc.o
 [  5%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_lock_impl.cc.o
 [  6%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_logging.cc.o
 [  6%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_ref_counted.cc.o
 [  7%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_string16.cc.o
 [  7%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_thread_checker_impl.cc.o
 [  8%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_weak_ptr.cc.o
 [  8%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/accessibility_handler_cpptoc.cc.o
 [  9%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/app_cpptoc.cc.o
 [  9%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/base_ref_counted_cpptoc.cc.o
 [ 10%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/base_scoped_cpptoc.cc.o
 [ 11%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/browser_process_handler_cpptoc.cc.o
 [ 11%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/client_cpptoc.cc.o
 [ 12%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/completion_callback_cpptoc.cc.o
 [ 12%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/context_menu_handler_cpptoc.cc.o
 regarde[ 13%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/cookie_access_filter_cpptoc.cc.o
  en b[ 13%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/cookie_visitor_cpptoc.cc.o
 as
 [ 14%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/delete_cookies_callback_cpptoc.cc.o
 [ 15%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/dialog_handler_cpptoc.cc.o
 [ 15%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/display_handler_cpptoc.cc.o
 [ 16%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/domvisitor_cpptoc.cc.o
 [ 16%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/download_handler_cpptoc.cc.o
 [ 17%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/download_image_callback_cpptoc.cc.o
 [ 17%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/drag_handler_cpptoc.cc.o
 [ 18%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/end_tracing_callback_cpptoc.cc.o
 [ 19%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/extension_handler_cpptoc.cc.o
 [ 19%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/find_handler_cpptoc.cc.o
 [ 20%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/focus_handler_cpptoc.cc.o
 [ 20%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/jsdialog_handler_cpptoc.cc.o
 [ 21%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/keyboard_handler_cpptoc.cc.o
 [ 21%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/life_span_handler_cpptoc.cc.o
 [ 22%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/load_handler_cpptoc.cc.o
 [ 22%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/menu_model_delegate_cpptoc.cc.o
 [ 23%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/navigation_entry_visitor_cpptoc.cc.o
 [ 24%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/pdf_print_callback_cpptoc.cc.o
 [ 24%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/print_handler_cpptoc.cc.o
 [ 25%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/read_handler_cpptoc.cc.o
 [ 25%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/register_cdm_callback_cpptoc.cc.o
 [ 26%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/render_handler_cpptoc.cc.o
 [ 26%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/render_process_handler_cpptoc.cc.o
 [ 27%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/request_context_handler_cpptoc.cc.o
 [ 28%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/request_handler_cpptoc.cc.o
 [ 28%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/resolve_callback_cpptoc.cc.o
 [ 29%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/resource_bundle_handler_cpptoc.cc.o
 [ 29%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/resource_handler_cpptoc.cc.o
 [ 30%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/resource_request_handler_cpptoc.cc.o
 [ 30%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/response_filter_cpptoc.cc.o
 [ 31%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/run_file_dialog_callback_cpptoc.cc.o
 [ 32%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/scheme_handler_factory_cpptoc.cc.o
 [ 32%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/server_handler_cpptoc.cc.o
 [ 33%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/set_cookie_callback_cpptoc.cc.o
 [ 33%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/string_visitor_cpptoc.cc.o
 [ 34%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/task_cpptoc.cc.o
 [ 34%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/urlrequest_client_cpptoc.cc.o
 [ 35%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/v8accessor_cpptoc.cc.o
 [ 35%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/v8array_buffer_release_callback_cpptoc.cc.o
 [ 36%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/v8handler_cpptoc.cc.o
 [ 37%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/v8interceptor_cpptoc.cc.o
 [ 37%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/web_plugin_info_visitor_cpptoc.cc.o
 [ 38%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/web_plugin_unstable_callback_cpptoc.cc.o
 [ 38%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/write_handler_cpptoc.cc.o
 [ 39%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/test/translator_test_ref_ptr_client_child_cpptoc.cc.o
 [ 39%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/test/translator_test_ref_ptr_client_cpptoc.cc.o
 [ 40%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/test/translator_test_scoped_client_child_cpptoc.cc.o
 [ 41%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/test/translator_test_scoped_client_cpptoc.cc.o
 [ 41%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/browser_view_delegate_cpptoc.cc.o
 [ 42%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/button_delegate_cpptoc.cc.o
 [ 42%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/menu_button_delegate_cpptoc.cc.o
 [ 43%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/panel_delegate_cpptoc.cc.o
 [ 43%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/textfield_delegate_cpptoc.cc.o
 [ 44%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/view_delegate_cpptoc.cc.o
 [ 45%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/window_delegate_cpptoc.cc.o
 [ 45%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/auth_callback_ctocpp.cc.o
 [ 46%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/before_download_callback_ctocpp.cc.o
 [ 46%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/binary_value_ctocpp.cc.o
 [ 47%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/browser_ctocpp.cc.o
 [ 47%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/browser_host_ctocpp.cc.o
 [ 48%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/callback_ctocpp.cc.o
 [ 48%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/command_line_ctocpp.cc.o
 [ 49%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/context_menu_params_ctocpp.cc.o
 [ 50%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/cookie_manager_ctocpp.cc.o
 [ 50%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/dictionary_value_ctocpp.cc.o
 [ 51%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/domdocument_ctocpp.cc.o
 [ 51%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/domnode_ctocpp.cc.o
 [ 52%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/download_item_callback_ctocpp.cc.o
 [ 52%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/download_item_ctocpp.cc.o
 [ 53%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/drag_data_ctocpp.cc.o
 [ 54%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/extension_ctocpp.cc.o
 [ 54%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/file_dialog_callback_ctocpp.cc.o
 [ 55%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/frame_ctocpp.cc.o
 [ 55%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/get_extension_resource_callback_ctocpp.cc.o
 [ 56%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/image_ctocpp.cc.o
 [ 56%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/jsdialog_callback_ctocpp.cc.o
 [ 57%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/list_value_ctocpp.cc.o
 [ 58%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/menu_model_ctocpp.cc.o
 [ 58%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/navigation_entry_ctocpp.cc.o
 [ 59%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/post_data_ctocpp.cc.o
 [ 59%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/post_data_element_ctocpp.cc.o
 [ 60%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/print_dialog_callback_ctocpp.cc.o
 [ 60%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/print_job_callback_ctocpp.cc.o
 [ 61%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/print_settings_ctocpp.cc.o
 [ 61%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/process_message_ctocpp.cc.o
 [ 62%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/request_callback_ctocpp.cc.o
 [ 63%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/request_context_ctocpp.cc.o
 [ 63%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/request_ctocpp.cc.o
 [ 64%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/resource_bundle_ctocpp.cc.o
 [ 64%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/resource_read_callback_ctocpp.cc.o
 [ 65%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/resource_skip_callback_ctocpp.cc.o
 [ 65%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/response_ctocpp.cc.o
 [ 66%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/run_context_menu_callback_ctocpp.cc.o
 [ 67%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/scheme_registrar_ctocpp.cc.o
 [ 67%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/select_client_certificate_callback_ctocpp.cc.o
 [ 68%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/server_ctocpp.cc.o
 [ 68%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/sslinfo_ctocpp.cc.o
 [ 69%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/sslstatus_ctocpp.cc.o
 [ 69%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/stream_reader_ctocpp.cc.o
 [ 70%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/stream_writer_ctocpp.cc.o
 [ 71%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/task_runner_ctocpp.cc.o
 [ 71%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/thread_ctocpp.cc.o
 [ 72%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/urlrequest_ctocpp.cc.o
 [ 72%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8context_ctocpp.cc.o
 [ 73%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8exception_ctocpp.cc.o
 [ 73%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8stack_frame_ctocpp.cc.o
 [ 74%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8stack_trace_ctocpp.cc.o
 [ 74%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8value_ctocpp.cc.o
 [ 75%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/value_ctocpp.cc.o
 [ 76%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/waitable_event_ctocpp.cc.o
 [ 76%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/web_plugin_info_ctocpp.cc.o
 [ 77%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/x509cert_principal_ctocpp.cc.o
 [ 77%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/x509certificate_ctocpp.cc.o
 [ 78%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/xml_reader_ctocpp.cc.o
 [ 78%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/zip_reader_ctocpp.cc.o
 [ 79%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_ctocpp.cc.o
 [ 80%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_ref_ptr_library_child_child_ctocpp.cc.o
 [ 80%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_ref_ptr_library_child_ctocpp.cc.o
 [ 81%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_ref_ptr_library_ctocpp.cc.o
 [ 81%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_scoped_library_child_child_ctocpp.cc.o
 [ 82%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_scoped_library_child_ctocpp.cc.o
 [ 82%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_scoped_library_ctocpp.cc.o
 [ 83%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/box_layout_ctocpp.cc.o
 [ 84%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/browser_view_ctocpp.cc.o
 [ 84%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/button_ctocpp.cc.o
 [ 85%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/display_ctocpp.cc.o
 [ 85%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/fill_layout_ctocpp.cc.o
 [ 86%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/label_button_ctocpp.cc.o
 [ 86%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/layout_ctocpp.cc.o
 [ 87%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/menu_button_ctocpp.cc.o
 [ 87%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/menu_button_pressed_lock_ctocpp.cc.o
 [ 88%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/panel_ctocpp.cc.o
 [ 89%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/scroll_view_ctocpp.cc.o
 [ 89%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/textfield_ctocpp.cc.o
 [ 90%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/view_ctocpp.cc.o
 [ 90%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/window_ctocpp.cc.o
 [ 91%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_byte_read_handler.cc.o
 [ 91%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_closure_task.cc.o
 [ 92%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_message_router.cc.o
 [ 93%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_resource_manager.cc.o
 [ 93%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_scoped_temp_dir.cc.o
 [ 94%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_stream_resource_handler.cc.o
 [ 94%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_xml_object.cc.o
 [ 95%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_zip_archive.cc.o
 [ 95%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/libcef_dll_wrapper.cc.o
 [ 96%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/libcef_dll_wrapper2.cc.o
 [ 97%] Linking CXX static library libcef_dll_wrapper.a
 [ 97%] Built target libcef_dll_wrapper
 Scanning dependencies of target gstcefsubprocess
 [ 98%] Building CXX object CMakeFiles/gstcefsubprocess.dir/gstcefsubprocess.cc.o
 [ 98%] Linking CXX executable Release/gstcefsubprocess
 [ 98%] Built target gstcefsubprocess
 Scanning dependencies of target gstcef
 [ 98%] Building CXX object CMakeFiles/gstcef.dir/gstcef.cc.o
 [ 99%] Building CXX object CMakeFiles/gstcef.dir/gstcefsrc.cc.o
 /data/gstcefsrc/gstcefsrc.cc:88:1: error: expected class-name before ‘{’ token
  {
  ^
 /data/gstcefsrc/gstcefsrc.cc:103:29: error: ‘ChannelLayout’ has not been declared
                              ChannelLayout channel_layout,
                              ^~~~~~~~~~~~~
 /data/gstcefsrc/gstcefsrc.cc:100:8: error: ‘void AudioHandler::OnAudioStreamStarted(CefRefPtr<CefBrowser>, int, int, int, int, int)’ marked ‘override’, but does not override
    void OnAudioStreamStarted(CefRefPtr<CefBrowser> browser,
         ^~~~~~~~~~~~~~~~~~~~
 /data/gstcefsrc/gstcefsrc.cc:121:8: error: ‘void AudioHandler::OnAudioStreamPacket(CefRefPtr<CefBrowser>, int, const float**, int, int64_t)’ marked ‘override’, but does not override
    void OnAudioStreamPacket(CefRefPtr<CefBrowser> browser,
         ^~~~~~~~~~~~~~~~~~~
 /data/gstcefsrc/gstcefsrc.cc:163:8: error: ‘void AudioHandler::OnAudioStreamStopped(CefRefPtr<CefBrowser>, int)’ marked ‘override’, but does not override
    void OnAudioStreamStopped(CefRefPtr<CefBrowser> browser,
         ^~~~~~~~~~~~~~~~~~~~
 In file included from /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/cef_app.h:41:0,
                  from /data/gstcefsrc/gstcefsrc.cc:5:
 /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/cef_base.h:128:8: error: ‘void AudioHandler::AddRef() const’ marked ‘override’, but does not override
    void AddRef() const OVERRIDE { ref_count_.AddRef(); }              \
         ^
 /data/gstcefsrc/gstcefsrc.cc:180:5: note: in expansion of macro ‘IMPLEMENT_REFCOUNTING’
      IMPLEMENT_REFCOUNTING(AudioHandler);
      ^~~~~~~~~~~~~~~~~~~~~
 /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/cef_base.h:129:8: error: ‘bool AudioHandler::Release() const’ marked ‘override’, but does not override
    bool Release() const OVERRIDE {                                    \
         ^
 /data/gstcefsrc/gstcefsrc.cc:180:5: note: in expansion of macro ‘IMPLEMENT_REFCOUNTING’
      IMPLEMENT_REFCOUNTING(AudioHandler);
      ^~~~~~~~~~~~~~~~~~~~~
 /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/cef_base.h:136:8: error: ‘bool AudioHandler::HasOneRef() const’ marked ‘override’, but does not override
    bool HasOneRef() const OVERRIDE { return ref_count_.HasOneRef(); } \
         ^
 /data/gstcefsrc/gstcefsrc.cc:180:5: note: in expansion of macro ‘IMPLEMENT_REFCOUNTING’
      IMPLEMENT_REFCOUNTING(AudioHandler);
      ^~~~~~~~~~~~~~~~~~~~~
 /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/cef_base.h:137:8: error: ‘bool AudioHandler::HasAtLeastOneRef() const’ marked ‘override’, but does not override
    bool HasAtLeastOneRef() const OVERRIDE {                           \
         ^
 /data/gstcefsrc/gstcefsrc.cc:180:5: note: in expansion of macro ‘IMPLEMENT_REFCOUNTING’
      IMPLEMENT_REFCOUNTING(AudioHandler);
      ^~~~~~~~~~~~~~~~~~~~~
 /data/gstcefsrc/gstcefsrc.cc:187:63: error: ‘CefAudioHandler’ was not declared in this scope
      BrowserClient(CefRefPtr<CefRenderHandler> rptr, CefRefPtr<CefAudioHandler> aptr) :
                                                                ^~~~~~~~~~~~~~~
 /data/gstcefsrc/gstcefsrc.cc:187:63: note: suggested alternative: ‘AudioHandler’
      BrowserClient(CefRefPtr<CefRenderHandler> rptr, CefRefPtr<CefAudioHandler> aptr) :
                                                                ^~~~~~~~~~~~~~~
                                                                AudioHandler
 /data/gstcefsrc/gstcefsrc.cc:187:78: error: template argument 1 is invalid
      BrowserClient(CefRefPtr<CefRenderHandler> rptr, CefRefPtr<CefAudioHandler> aptr) :
                                                                               ^
 /data/gstcefsrc/gstcefsrc.cc:198:23: error: ‘CefAudioHandler’ was not declared in this scope
      virtual CefRefPtr<CefAudioHandler> GetAudioHandler() override
                        ^~~~~~~~~~~~~~~
 /data/gstcefsrc/gstcefsrc.cc:198:23: note: suggested alternative: ‘AudioHandler’
      virtual CefRefPtr<CefAudioHandler> GetAudioHandler() override
                        ^~~~~~~~~~~~~~~
                        AudioHandler
 /data/gstcefsrc/gstcefsrc.cc:198:38: error: template argument 1 is invalid
      virtual CefRefPtr<CefAudioHandler> GetAudioHandler() override
                                       ^
 /data/gstcefsrc/gstcefsrc.cc:206:15: error: ‘CefAudioHandler’ was not declared in this scope
      CefRefPtr<CefAudioHandler> audio_handler;
                ^~~~~~~~~~~~~~~
 /data/gstcefsrc/gstcefsrc.cc:206:15: note: suggested alternative: ‘GetAudioHandler’
      CefRefPtr<CefAudioHandler> audio_handler;
                ^~~~~~~~~~~~~~~
                GetAudioHandler
 /data/gstcefsrc/gstcefsrc.cc:206:30: error: template argument 1 is invalid
      CefRefPtr<CefAudioHandler> audio_handler;
                               ^
 /data/gstcefsrc/gstcefsrc.cc:198:40: error: ‘virtual int BrowserClient::GetAudioHandler()’ marked ‘override’, but does not override
      virtual CefRefPtr<CefAudioHandler> GetAudioHandler() override
                                         ^~~~~~~~~~~~~~~
 /data/gstcefsrc/gstcefsrc.cc: In function ‘gboolean gst_cef_src_start(GstBaseSrc*)’:
 /data/gstcefsrc/gstcefsrc.cc:308:64: error: invalid user-defined conversion from ‘CefRefPtr<AudioHandler> {aka scoped_refptr<AudioHandler>}’ to ‘int’ [-fpermissive]
    browserClient = new BrowserClient(renderHandler, audioHandler);
                                                                 ^
 In file included from /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/internal/cef_ptr.h:35:0,
                  from /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/cef_base.h:39,
                  from /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/cef_app.h:41,
                  from /data/gstcefsrc/gstcefsrc.cc:5:
 /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/base/cef_ref_counted.h:322:3: note: candidate is: scoped_refptr<T>::operator T*() const [with T = AudioHandler] <near match>
    operator T*() const { return ptr_; }
    ^~~~~~~~
 /data/gstcefsrc/third_party/cef/cef_binary_77.1.14+g4fb61d2+chromium-77.0.3865.120_linux64/include/base/cef_ref_counted.h:322:3: note:   no known conversion from ‘AudioHandler*’ to ‘int’
 /data/gstcefsrc/gstcefsrc.cc:187:5: note:   initializing argument 2 of ‘BrowserClient::BrowserClient(CefRefPtr<CefRenderHandler>, int)’
      BrowserClient(CefRefPtr<CefRenderHandler> rptr, CefRefPtr<CefAudioHandler> aptr) :
      ^~~~~~~~~~~~~
 At global scope:
 cc1plus: error: unrecognized command line option ‘-Wno-undefined-var-template’ [-Werror]
 cc1plus: all warnings being treated as errors
 CMakeFiles/gstcef.dir/build.make:86: recipe for target 'CMakeFiles/gstcef.dir/gstcefsrc.cc.o' failed
 make[2]: *** [CMakeFiles/gstcef.dir/gstcefsrc.cc.o] Error 1
 CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/gstcef.dir/all' failed
 make[1]: *** [CMakeFiles/gstcef.dir/all] Error 2
 Makefile:83: recipe for target 'all' failed
 make: *** [all] Error 2

But it seem that there is some change with the audio that make the build crash. Maybe a modification with the latest CEF audio api ?

Did you see that problem on your side too ?

Thanks in advance of your reply.

BR
Thierry

Sandbox

Is it possible to enable the sandbox?

Deadlock when mixing Audio and Video

My issue is very similar to #59. The difference is my state flow is different.

gstreamer 1.20.3
gstcefsrc master with this patch applied: philn@3b9d7eb

My coded pipeline is identical to the one in the README. I enter into PAUSED to preload a web page. After it has loaded I enter into PLAYING. This will cause a deadlock when trying to send an EOS on the message bus. If I remove the audio then everything works as expected. Also replacing gstcefsrc/demux with a simple audio and video test source works fine. I did try setting queues to leaky, but this ends up causing AV sync issues.

My only thoughts are to maybe dynamically configure the output to the pipeline prior to going into PLAYING state, or modifying gstcefsrc to monitor the states and simply dump all AV data unless in PLAYING state. I really need the page to be preloaded and data flowing but not recording while in the PAUSED state. Maybe using a splitmuxsink might work. I am totally open to any ideas anyone may have.

Cef Segmentation fault

I have been running cefsrc in docker for a while now. Everything was fine until recently I updated docker images and it segfaults :( I assume issue is in this repo or https://github.com/restreamio/docker-gstreamer not sure.

Command to test

Xvfb :0 -screen 0 1920x1080x24 &

export GST_DEBUG=5
export GST_PLUGIN_PATH=/usr/cef:$GST_PLUGIN_PATH
export DISPLAY=:0

gst-launch-1.0 -e cefsrc url=https://soundcloud.com/platform/sama num-buffers=135000 gpu=false do-timestamp=true log-severity=1 ! \
    video/x-raw,width=1920,height=1080,framerate=50/1 ! cefdemux name=demux ! \
    queue max-size-bytes=4294967295 max-size-buffers=5000 max-size-time=18446744073709551615 ! \
    videoconvert ! x264enc ! mp4mux ! filesink location=output.mp4
ARG GST_PLUGINS_RS_TAG=main

FROM catthehacker/ubuntu:rust-22.04 as builder

# https://ryandaniels.ca/blog/docker-dockerfile-arg-from-arg-trouble/
ARG GST_PLUGINS_RS_TAG

WORKDIR /usr/src/gst-plugins-rs

ENV DEST_DIR /opt/gst-plugins-rs
ENV CARGO_PROFILE_RELEASE_DEBUG false

RUN apt update \
    && apt install -yq --no-install-recommends \
	libgstreamer-plugins-base1.0-dev \
	libgstreamer1.0-dev \
        libcsound64-dev \
	libclang-11-dev \
 	libpango1.0-dev  \
	libdav1d-dev  
	# libgtk-4-dev # Only in bookworm

RUN git clone -c advice.detachedHead=false \
	--branch ${GST_PLUGINS_RS_TAG} \
	--single-branch https://github.com/sdroege/gst-plugin-rs \
	/usr/src/gst-plugins-rs

RUN export CSOUND_LIB_DIR="/usr/lib/$(uname -m)-linux-gnu" && \
    export PLUGINS_DIR=$(pkg-config --variable=pluginsdir gstreamer-1.0) && \
    export SO_SUFFIX=so && \
    cargo build --release  \
   --package gst-plugin-png \
	&&  \
    install -v -d ${DEST_DIR}/${PLUGINS_DIR} && \
    install -v -m 755 target/release/*.${SO_SUFFIX} ${DEST_DIR}${PLUGINS_DIR}


from restreamio/gstreamer:x86_64-latest-prod

COPY --from=builder /opt/gst-plugins-rs/ /

WORKDIR /usr/recorder

RUN apt update && \
    apt install -yq --no-install-recommends curl xvfb && \
    curl -s https://deb.nodesource.com/setup_16.x | bash && \
    apt-get install -y nodejs

ENV CEFSRC_PLUGIN_DIR /usr/cef

COPY . .

CMD ./run.sh
#!/bin/bash
export DISPLAY=:0

while :
do
    Xvfb :0 -screen 0 1920x1080x24
    echo "Xvfb has Crashed"
    sleep 1
done &

npm start

Debug log

0:00:00.561307153    12 0x55eee5cffb00 INFO                  cefsrc gstcefsrc.cc:713:run_cef: Initializing CEF
[0505/140854.168528:VERBOSE1:cdm_registration.cc(189)] Widevine enabled but no library found
[0505/140854.168530:VERBOSE1:cdm_registration.cc(189)] Widevine enabled but no library found
[0505/140854.168578:INFO:cpu_info.cc(53)] Available number of cores: 32
[0505/140854.168582:INFO:cpu_info.cc(53)] Available number of cores: 32
[0505/140854.168588:VERBOSE1:zygote_main_linux.cc(218)] ZygoteMain: initializing 0 fork delegates
[0505/140854.168586:VERBOSE1:zygote_main_linux.cc(218)] ZygoteMain: initializing 0 fork delegates
[0505/140854.172348:VERBOSE1:pref_proxy_config_tracker_impl.cc(187)] 0x7f8a08019d40: set chrome proxy config service to 0x7f8a08050180
[0505/140854.172524:VERBOSE1:cdm_registration.cc(189)] Widevine enabled but no library found
[0505/140854.173899:VERBOSE1:pulse_util.cc(236)] Failed to connect to the context.  Error: Connection refused
[0505/140854.173916:WARNING:audio_manager_linux.cc(60)] Falling back to ALSA for audio output. PulseAudio is not available or could not be initialized.
[0505/140854.173955:VERBOSE1:webrtc_internals.cc(120)] Could not get the download directory.
[0505/140854.174124:VERBOSE1:media_stream_manager.cc(1065)] MSM::InitializeMaybeAsync([this=0x7f8a08003990])
[0505/140854.174137:VERBOSE1:media_stream_manager.cc(1065)] MDM::MediaDevicesManager()
[0505/140854.174140:VERBOSE1:media_stream_manager.cc(1065)] MSM::MediaStreamManager([this=0x7f8a08003990]))
[0505/140854.175577:VERBOSE1:first_party_sets_handler_impl.cc(432)] Empty path. Failed loading serialized First-Party Sets file.
[0505/140854.175579:VERBOSE1:component_installer.cc(285)] StartRegistration for Widevine Content Decryption Module
[0505/140854.175800:VERBOSE1:component_installer.cc(441)] FinishRegistration for Widevine Content Decryption Module
[0505/140854.175815:VERBOSE1:component_updater_service.cc(131)] CrxUpdateService starting up. First update attempt will take place in 60 seconds. Next update attempt will take place in 18000 seconds. 
[0505/140854.177038:VERBOSE1:key_storage_util_linux.cc(54)] Password storage detected desktop environment: (unknown)
[0505/140854.177062:VERBOSE1:key_storage_linux.cc(123)] Selected backend for OSCrypt: BASIC_TEXT
[0505/140854.177068:VERBOSE1:key_storage_linux.cc(143)] OSCrypt did not initialize a backend.
[0505/140854.177137:VERBOSE1:pref_proxy_config_tracker_impl.cc(187)] 0x7f8a081748f0: set chrome proxy config service to 0x7f8a0816ea90
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
[0100/000000.180773:VERBOSE1:vaapi_wrapper.cc(844)] InitializeVaDriver_Locked(): vaInitialize failed: unknown libva error
Segmentation fault (core dumped)
root@1937c1edc00c:/usr/recorder# [0100/000000.453051:WARNING:sandbox_linux.cc(380)] InitializeSandbox() called with multiple threads in process gpu-process.

Mixing audio and video with `matroskamux` causing deadlocks

Test pipeline:

cefbin name=cef cefsrc::url="https://soundcloud.com/platform/sama" \
audiotestsrc do-timestamp=true is-live=true volume=0.0 ! audiomixer name=mixer \
mixer. ! audioconvert ! queue ! matroskamux streamable=true name=muxer ! queue ! fakesink sync=1 \
cef.audio ! queue ! audioconvert ! mixer. \
cef.video ! video/x-raw, width=1920, height=1080 ! videoconvert ! queue ! muxer.

When I launch this pipeline with gst-launch-1.0 it stuck at random time positions. Here's gdb backtrace when it happens:

[New LWP 10188]
[New LWP 10189]
[New LWP 10190]
[New LWP 10191]
[New LWP 10192]
[New LWP 10193]
[New LWP 10194]
[New LWP 10195]
[New LWP 10196]
[New LWP 10199]
[New LWP 10200]
[New LWP 10202]
[New LWP 10204]
[New LWP 10205]
[New LWP 10207]
[New LWP 10208]
[New LWP 10209]
[New LWP 10210]
[New LWP 10214]
[New LWP 10215]
[New LWP 10224]
[New LWP 10236]
[New LWP 10280]
[New LWP 10288]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
0x0000ffff97adbc78 in __GI___poll (fds=0xaaab02ed7770, nfds=2, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:41
41	../sysdeps/unix/sysv/linux/poll.c: No such file or directory.

Thread 25 (Thread 0xffff1e00b980 (LWP 10288) "AudioInputDevic"):
#0  __GI___libc_read (nbytes=4, buf=0xffff1e00b024, fd=<optimized out>) at ../sysdeps/unix/sysv/linux/read.c:26
#1  __GI___libc_read (fd=<optimized out>, buf=0xffff1e00b024, nbytes=4) at ../sysdeps/unix/sysv/linux/read.c:24
#2  0x0000ffff9d38cfa8 in base::ReadFromFD(int, char*, unsigned long) () at ../../base/files/file_util_posix.cc:462
#3  0x0000ffff9d393d94 [PAC] in Receive() () at ../../base/sync_socket_posix.cc:107
#4  0x0000ffff9a93649c [PAC] in ThreadMain() () at ../../media/audio/audio_device_thread.cc:84
#5  0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#6  0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#7  0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 24 (Thread 0xffff1e81b980 (LWP 10280) "BatteryStatusNo"):
#0  0x0000ffff97ae5ebc in __GI_epoll_pwait (epfd=<optimized out>, events=0xffff08002360, maxevents=32, timeout=-1, set=0x0) at ../sysdeps/unix/sysv/linux/epoll_pwait.c:40
#1  0x0000ffff9d4cd324 in epoll_dispatch () at ../../third_party/libevent/epoll.c:198
#2  0x0000ffff9d4caddc [PAC] in event_base_loop () at ../../third_party/libevent/event.c:512
#3  0x0000ffff9d3a2470 [PAC] in Run() () at ../../base/message_loop/message_pump_libevent.cc:356
#4  0x0000ffff9d359354 [PAC] in Run() () at ../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:577
#5  0x0000ffff9d32a738 [PAC] in Run() () at ../../base/run_loop.cc:141
#6  0x0000ffff9d3754cc [PAC] in base::Thread::Run(base::RunLoop*) () at ../../base/threading/thread.cc:337
#7  0x0000ffff9d375654 [PAC] in ThreadMain() () at ../../base/threading/thread.cc:408
#8  0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#9  0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#10 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 23 (Thread 0xffff51fbe980 (LWP 10236) "gmain"):
#0  0x0000ffff97adbc78 in __GI___poll (fds=0xaaab02ecb610, nfds=1, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:41
#1  0x0000ffff97cdb738 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff97c82f14 in g_main_context_iteration () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#3  0x0000ffff97c82f6c in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#4  0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#5  0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#6  0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 22 (Thread 0xffff527ce980 (LWP 10224) "cefsrc:src"):
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000ffff97cd571c in g_cond_wait () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff9493935c in gst_queue_chain_buffer_or_list (pad=0xaaab02e86ea0 [GstPad|sink], parent=0xaaab02e8e420 [GstObject|audio-queue], obj=0xffff7c01bc60, is_list=0) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1251
#3  0x0000ffff94939a80 in gst_queue_chain (pad=0xaaab02e86ea0 [GstPad|sink], parent=0xaaab02e8e420 [GstObject|audio-queue], buffer=0xffff7c01bc60) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1349
#4  0x0000ffff97e37f28 in gst_pad_chain_data_unchecked (pad=0xaaab02e86ea0 [GstPad|sink], type=4112, data=0xffff7c01bc60) at ../subprojects/gstreamer/gst/gstpad.c:4447
#5  0x0000ffff97e38d18 in gst_pad_push_data (pad=0xaaab02e867b0 [GstPad|audio], type=4112, data=0xffff7c01bc60) at ../subprojects/gstreamer/gst/gstpad.c:4711
#6  0x0000ffff97e39480 in gst_pad_push (pad=0xaaab02e867b0 [GstPad|audio], buffer=0xffff7c01bc60) at ../subprojects/gstreamer/gst/gstpad.c:4830
#7  0x0000ffff94d803f4 in gst_cef_demux_push_audio_buffer(_GstBuffer**, unsigned int, AudioPushData*) () at /usr/cef/libgstcef.so
#8  0x0000ffff97ddb0c4 in gst_buffer_list_foreach (list=0xffff0c006570, func=0xffff94d803b0 <gst_cef_demux_push_audio_buffer(_GstBuffer**, unsigned int, AudioPushData*)>, user_data=0xffff527cdc18) at ../subprojects/gstreamer/gst/gstbufferlist.c:280
#9  0x0000ffff94d80790 in gst_cef_demux_chain(_GstPad*, _GstObject*, _GstBuffer*) () at /usr/cef/libgstcef.so
#10 0x0000ffff97e37f28 in gst_pad_chain_data_unchecked (pad=0xaaab02e86310 [GstPad|sink], type=4112, data=0xffff8400a5a0) at ../subprojects/gstreamer/gst/gstpad.c:4447
#11 0x0000ffff97e38d18 in gst_pad_push_data (pad=0xaaab02e860c0 [GstPad|src], type=4112, data=0xffff8400a5a0) at ../subprojects/gstreamer/gst/gstpad.c:4711
#12 0x0000ffff97e39480 in gst_pad_push (pad=0xaaab02e860c0 [GstPad|src], buffer=0xffff8400a5a0) at ../subprojects/gstreamer/gst/gstpad.c:4830
#13 0x0000ffff94b291d8 in gst_base_src_loop (pad=0xaaab02e860c0 [GstPad|src]) at ../subprojects/gstreamer/libs/gst/base/gstbasesrc.c:3030
#14 0x0000ffff97e7ed5c in gst_task_func (task=0xaaab02ed4830 [GstTask|cefsrc:src]) at ../subprojects/gstreamer/gst/gsttask.c:384
#15 0x0000ffff97e802bc in default_func (tdata=0xaaab02e7ae20, pool=0xaaab02ed2490 [GstTaskPool|taskpool0]) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#16 0x0000ffff97cb8678 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#17 0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#18 0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#19 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 21 (Thread 0xffff52fde980 (LWP 10215) "ThreadPoolSingl"):
#0  __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, expected=0, futex_word=0xffff52fdde40) at ./nptl/futex-internal.c:57
#1  __futex_abstimed_wait_common (cancel=true, private=0, abstime=0x0, clockid=0, expected=0, futex_word=0xffff52fdde40) at ./nptl/futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0xffff52fdde40, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at ./nptl/futex-internal.c:139
#3  0x0000ffff97a7c8fc in __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0xffff52fddde8, cond=0xffff52fdde18) at ./nptl/pthread_cond_wait.c:503
#4  ___pthread_cond_wait (cond=0xffff52fdde18, mutex=0xffff52fddde8) at ./nptl/pthread_cond_wait.c:627
#5  0x0000ffff9d394224 in Wait() () at ../../base/synchronization/condition_variable_posix.cc:79
#6  0x0000ffff9d394b0c [PAC] in TimedWait() () at ../../base/synchronization/waitable_event_posix.cc:212
#7  0x0000ffff9d36c224 [PAC] in base::internal::WorkerThread::Delegate::WaitForWork(base::WaitableEvent*) () at ../../base/task/thread_pool/worker_thread.cc:132
#8  0x0000ffff9d36ccb4 [PAC] in RunWorker() () at ../../base/task/thread_pool/worker_thread.cc:439
#9  0x0000ffff9d36c94c [PAC] in base::internal::WorkerThread::RunSharedWorker() () at ../../base/task/thread_pool/worker_thread.cc:345
#10 0x0000ffff9d36c834 [PAC] in ThreadMain() () at ../../base/task/thread_pool/worker_thread.cc:318
#11 0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#12 0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#13 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 20 (Thread 0xffff537ee980 (LWP 10214) "CacheThread_Blo"):
#0  0x0000ffff97ae5ebc in __GI_epoll_pwait (epfd=<optimized out>, events=0xffff28002360, maxevents=32, timeout=30000, set=0x0) at ../sysdeps/unix/sysv/linux/epoll_pwait.c:40
#1  0x0000ffff9d4cd324 in epoll_dispatch () at ../../third_party/libevent/epoll.c:198
#2  0x0000ffff9d4caddc [PAC] in event_base_loop () at ../../third_party/libevent/event.c:512
#3  0x0000ffff9d3a2594 [PAC] in Run() () at ../../base/message_loop/message_pump_libevent.cc:356
#4  0x0000ffff9d359354 [PAC] in Run() () at ../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:577
#5  0x0000ffff9d32a738 [PAC] in Run() () at ../../base/run_loop.cc:141
#6  0x0000ffff9d3754cc [PAC] in base::Thread::Run(base::RunLoop*) () at ../../base/threading/thread.cc:337
#7  0x0000ffff9d375654 [PAC] in ThreadMain() () at ../../base/threading/thread.cc:408
#8  0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#9  0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#10 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 19 (Thread 0xffff58f9e980 (LWP 10210) "VideoCaptureThr"):
#0  __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, expected=0, futex_word=0xffff58f9dd20) at ./nptl/futex-internal.c:57
#1  __futex_abstimed_wait_common (cancel=true, private=0, abstime=0x0, clockid=0, expected=0, futex_word=0xffff58f9dd20) at ./nptl/futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0xffff58f9dd20, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at ./nptl/futex-internal.c:139
#3  0x0000ffff97a7c8fc in __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0xffff58f9dcc8, cond=0xffff58f9dcf8) at ./nptl/pthread_cond_wait.c:503
#4  ___pthread_cond_wait (cond=0xffff58f9dcf8, mutex=0xffff58f9dcc8) at ./nptl/pthread_cond_wait.c:627
#5  0x0000ffff9d394224 in Wait() () at ../../base/synchronization/condition_variable_posix.cc:79
#6  0x0000ffff9d394b0c [PAC] in TimedWait() () at ../../base/synchronization/waitable_event_posix.cc:212
#7  0x0000ffff9d394800 [PAC] in base::WaitableEvent::Wait() () at ../../base/synchronization/waitable_event_posix.cc:158
#8  0x0000ffff9d30a438 [PAC] in Run() () at ../../base/message_loop/message_pump_default.cc:55
#9  0x0000ffff9d359354 [PAC] in Run() () at ../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:577
#10 0x0000ffff9d32a738 [PAC] in Run() () at ../../base/run_loop.cc:141
#11 0x0000ffff9d3754cc [PAC] in base::Thread::Run(base::RunLoop*) () at ../../base/threading/thread.cc:337
#12 0x0000ffff9d375654 [PAC] in ThreadMain() () at ../../base/threading/thread.cc:408
#13 0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#14 0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#15 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 18 (Thread 0xffff597ae980 (LWP 10209) "ThreadPoolSingl"):
#0  __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, expected=0, futex_word=0xffff597ade40) at ./nptl/futex-internal.c:57
#1  __futex_abstimed_wait_common (cancel=true, private=0, abstime=0x0, clockid=0, expected=0, futex_word=0xffff597ade40) at ./nptl/futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0xffff597ade40, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at ./nptl/futex-internal.c:139
#3  0x0000ffff97a7c8fc in __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0xffff597adde8, cond=0xffff597ade18) at ./nptl/pthread_cond_wait.c:503
#4  ___pthread_cond_wait (cond=0xffff597ade18, mutex=0xffff597adde8) at ./nptl/pthread_cond_wait.c:627
#5  0x0000ffff9d394224 in Wait() () at ../../base/synchronization/condition_variable_posix.cc:79
#6  0x0000ffff9d394b0c [PAC] in TimedWait() () at ../../base/synchronization/waitable_event_posix.cc:212
#7  0x0000ffff9d36c224 [PAC] in base::internal::WorkerThread::Delegate::WaitForWork(base::WaitableEvent*) () at ../../base/task/thread_pool/worker_thread.cc:132
#8  0x0000ffff9d36ccb4 [PAC] in RunWorker() () at ../../base/task/thread_pool/worker_thread.cc:439
#9  0x0000ffff9d36c980 [PAC] in base::internal::WorkerThread::RunDedicatedWorker() () at ../../base/task/thread_pool/worker_thread.cc:355
#10 0x0000ffff9d36c828 [PAC] in ThreadMain() () at ../../base/task/thread_pool/worker_thread.cc:321
#11 0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#12 0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#13 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 17 (Thread 0xffff59fbe980 (LWP 10208) "CompositorTileW"):
#0  __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, expected=0, futex_word=0xffff700ae704) at ./nptl/futex-internal.c:57
#1  __futex_abstimed_wait_common (cancel=true, private=0, abstime=0x0, clockid=0, expected=0, futex_word=0xffff700ae704) at ./nptl/futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0xffff700ae704, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at ./nptl/futex-internal.c:139
#3  0x0000ffff97a7c8fc in __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0xffff700ae668, cond=0xffff700ae6d8) at ./nptl/pthread_cond_wait.c:503
#4  ___pthread_cond_wait (cond=0xffff700ae6d8, mutex=0xffff700ae668) at ./nptl/pthread_cond_wait.c:627
#5  0x0000ffff9d394224 in Wait() () at ../../base/synchronization/condition_variable_posix.cc:79
#6  0x0000ffff9e96ab14 [PAC] in non-virtual thunk to cc::SingleThreadTaskGraphRunner::Run() () at ../../cc/raster/single_thread_task_graph_runner.cc:129
#7  0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#8  0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#9  0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 16 (Thread 0xffff5a7ce980 (LWP 10207) "inotify_reader"):
#0  0x0000ffff97adbc78 in __GI___poll (fds=0xffff5a7cdfc0, nfds=1, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:41
#1  0x0000ffff9d39c9f8 in ThreadMain() () at ../../base/files/file_path_watcher_inotify.cc:295
#2  0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#3  0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#4  0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 15 (Thread 0xffff5b7ee980 (LWP 10205) "ThreadPoolSingl"):
#0  __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, expected=0, futex_word=0xffff5b7ede40) at ./nptl/futex-internal.c:57
#1  __futex_abstimed_wait_common (cancel=true, private=0, abstime=0x0, clockid=0, expected=0, futex_word=0xffff5b7ede40) at ./nptl/futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0xffff5b7ede40, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at ./nptl/futex-internal.c:139
#3  0x0000ffff97a7c8fc in __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0xffff5b7edde8, cond=0xffff5b7ede18) at ./nptl/pthread_cond_wait.c:503
#4  ___pthread_cond_wait (cond=0xffff5b7ede18, mutex=0xffff5b7edde8) at ./nptl/pthread_cond_wait.c:627
#5  0x0000ffff9d394224 in Wait() () at ../../base/synchronization/condition_variable_posix.cc:79
#6  0x0000ffff9d394b0c [PAC] in TimedWait() () at ../../base/synchronization/waitable_event_posix.cc:212
#7  0x0000ffff9d36c224 [PAC] in base::internal::WorkerThread::Delegate::WaitForWork(base::WaitableEvent*) () at ../../base/task/thread_pool/worker_thread.cc:132
#8  0x0000ffff9d36ccb4 [PAC] in RunWorker() () at ../../base/task/thread_pool/worker_thread.cc:439
#9  0x0000ffff9d36c94c [PAC] in base::internal::WorkerThread::RunSharedWorker() () at ../../base/task/thread_pool/worker_thread.cc:345
#10 0x0000ffff9d36c834 [PAC] in ThreadMain() () at ../../base/task/thread_pool/worker_thread.cc:318
#11 0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#12 0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#13 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 14 (Thread 0xffff53ffe980 (LWP 10204) "MemoryInfra"):
#0  __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393, expected=0, futex_word=0xffff53ffdd20) at ./nptl/futex-internal.c:57
#1  __futex_abstimed_wait_common (cancel=true, private=0, abstime=0x0, clockid=0, expected=0, futex_word=0xffff53ffdd20) at ./nptl/futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0xffff53ffdd20, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at ./nptl/futex-internal.c:139
#3  0x0000ffff97a7c8fc in __pthread_cond_wait_common (abstime=0x0, clockid=0, mutex=0xffff53ffdcc8, cond=0xffff53ffdcf8) at ./nptl/pthread_cond_wait.c:503
#4  ___pthread_cond_wait (cond=0xffff53ffdcf8, mutex=0xffff53ffdcc8) at ./nptl/pthread_cond_wait.c:627
#5  0x0000ffff9d394224 in Wait() () at ../../base/synchronization/condition_variable_posix.cc:79
#6  0x0000ffff9d394b0c [PAC] in TimedWait() () at ../../base/synchronization/waitable_event_posix.cc:212
#7  0x0000ffff9d394800 [PAC] in base::WaitableEvent::Wait() () at ../../base/synchronization/waitable_event_posix.cc:158
#8  0x0000ffff9d30a438 [PAC] in Run() () at ../../base/message_loop/message_pump_default.cc:55
#9  0x0000ffff9d359354 [PAC] in Run() () at ../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:577
#10 0x0000ffff9d32a738 [PAC] in Run() () at ../../base/run_loop.cc:141
#11 0x0000ffff9d3754cc [PAC] in base::Thread::Run(base::RunLoop*) () at ../../base/threading/thread.cc:337
#12 0x0000ffff9d375654 [PAC] in ThreadMain() () at ../../base/threading/thread.cc:408
#13 0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#14 0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#15 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 13 (Thread 0xffff80eb5980 (LWP 10202) "Chrome_IOThread"):
#0  0x0000ffff97ae5ebc in __GI_epoll_pwait (epfd=<optimized out>, events=0xffff54002360, maxevents=32, timeout=18139, set=0x0) at ../sysdeps/unix/sysv/linux/epoll_pwait.c:40
#1  0x0000ffff9d4cd324 in epoll_dispatch () at ../../third_party/libevent/epoll.c:198
#2  0x0000ffff9d4caddc [PAC] in event_base_loop () at ../../third_party/libevent/event.c:512
#3  0x0000ffff9d3a2594 [PAC] in Run() () at ../../base/message_loop/message_pump_libevent.cc:356
#4  0x0000ffff9d359354 [PAC] in Run() () at ../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:577
#5  0x0000ffff9d32a738 [PAC] in Run() () at ../../base/run_loop.cc:141
#6  0x0000ffff9d3754cc [PAC] in base::Thread::Run(base::RunLoop*) () at ../../base/threading/thread.cc:337
#7  0x0000ffff9b38cfc0 [PAC] in content::BrowserProcessIOThread::IOThreadRun(base::RunLoop*) () at ../../content/browser/browser_process_io_thread.cc:119
#8  0x0000ffff9d375654 [PAC] in ThreadMain() () at ../../base/threading/thread.cc:408
#9  0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#10 0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#11 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 12 (Thread 0xffff81ed5980 (LWP 10200) "ThreadPoolForeg"):
#0  __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0xffff81ed4ce0, op=137, expected=0, futex_word=0xffff81ed4e40) at ./nptl/futex-internal.c:57
#1  __futex_abstimed_wait_common (cancel=true, private=0, abstime=0xffff81ed4ce0, clockid=-1750622760, expected=0, futex_word=0xffff81ed4e40) at ./nptl/futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0xffff81ed4e40, expected=expected@entry=0, clockid=clockid@entry=1, abstime=abstime@entry=0xffff81ed4ce0, private=private@entry=0) at ./nptl/futex-internal.c:139
#3  0x0000ffff97a7cc10 in __pthread_cond_wait_common (abstime=0xffff81ed4ce0, clockid=1, mutex=0xffff81ed4de8, cond=0xffff81ed4e18) at ./nptl/pthread_cond_wait.c:503
#4  ___pthread_cond_timedwait64 (cond=0xffff81ed4e18, mutex=0xffff81ed4de8, abstime=0xffff81ed4ce0) at ./nptl/pthread_cond_wait.c:652
#5  0x0000ffff9d39438c in TimedWait() () at ../../base/synchronization/condition_variable_posix.cc:132
#6  0x0000ffff9d394b20 [PAC] in TimedWait() () at ../../base/synchronization/waitable_event_posix.cc:214
#7  0x0000ffff9d36c224 [PAC] in base::internal::WorkerThread::Delegate::WaitForWork(base::WaitableEvent*) () at ../../base/task/thread_pool/worker_thread.cc:132
#8  0x0000ffff9d36ccb4 [PAC] in RunWorker() () at ../../base/task/thread_pool/worker_thread.cc:439
#9  0x0000ffff9d36c918 [PAC] in base::internal::WorkerThread::RunPooledWorker() () at ../../base/task/thread_pool/worker_thread.cc:335
#10 0x0000ffff9d36c7ec [PAC] in ThreadMain() () at ../../base/task/thread_pool/worker_thread.cc:315
#11 0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#12 0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#13 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 11 (Thread 0xffff826e5980 (LWP 10199) "ThreadPoolServi"):
#0  0x0000ffff97ae5ebc in __GI_epoll_pwait (epfd=<optimized out>, events=0xffff68002390, maxevents=32, timeout=-1, set=0x0) at ../sysdeps/unix/sysv/linux/epoll_pwait.c:40
#1  0x0000ffff9d4cd324 in epoll_dispatch () at ../../third_party/libevent/epoll.c:198
#2  0x0000ffff9d4caddc [PAC] in event_base_loop () at ../../third_party/libevent/event.c:512
#3  0x0000ffff9d3a2470 [PAC] in Run() () at ../../base/message_loop/message_pump_libevent.cc:356
#4  0x0000ffff9d359354 [PAC] in Run() () at ../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:577
#5  0x0000ffff9d32a738 [PAC] in Run() () at ../../base/run_loop.cc:141
#6  0x0000ffff9d3754cc [PAC] in base::Thread::Run(base::RunLoop*) () at ../../base/threading/thread.cc:337
#7  0x0000ffff9d3650e8 [PAC] in base::internal::ServiceThread::Run(base::RunLoop*) () at ../../base/task/thread_pool/service_thread.cc:15
#8  0x0000ffff9d375654 [PAC] in ThreadMain() () at ../../base/threading/thread.cc:408
#9  0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#10 0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#11 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 10 (Thread 0xffff82ef5980 (LWP 10196) "sandbox_ipc_thr"):
#0  0x0000ffff97adbc78 in __GI___poll (fds=0xffff82ef4ee0, nfds=2, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:41
#1  0x0000ffff9b8e5ab0 in Run() () at ../../content/browser/sandbox_ipc_linux.cc:46
#2  0x0000ffff9d39834c [PAC] in ThreadFunc() () at ../../base/threading/platform_thread_posix.cc:101
#3  0x0000ffff97a7d5c8 [PAC] in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#4  0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 9 (Thread 0xffff90ede980 (LWP 10195) "CrBrowserMain"):
#0  0x0000ffff97adbc78 in __GI___poll (fds=0xffff70189930, nfds=3, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:41
#1  0x0000ffff97cdb738 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff97c82f14 in g_main_context_iteration () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#3  0x0000ffff9d30a824 in Run() () at ../../base/message_loop/message_pump_glib.cc:400
#4  0x0000ffff9d359354 [PAC] in Run() () at ../../base/task/sequence_manager/thread_controller_with_message_pump_impl.cc:577
#5  0x0000ffff9d32a738 [PAC] in Run() () at ../../base/run_loop.cc:141
#6  0x0000ffff9a07cdd8 [PAC] in RunMessageLoop() () at ../../cef/libcef/browser/main_runner.cc:281
#7  0x0000ffff94d7e784 [PAC] in run_cef(_GstCefSrc*) () at /usr/cef/libgstcef.so
#8  0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#9  0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#10 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 8 (Thread 0xffff916ee980 (LWP 10194) "audio-queue:src"):
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000ffff97cd571c in g_cond_wait () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff94aefb58 in gst_aggregator_pad_chain_internal (self=0xaaab02e9c1d0 [GstAggregator|mixer], aggpad=0xaaab02eca8b0 [GstAggregatorPad|sink_1], buffer=0xffff74012b40, head=1) at ../subprojects/gstreamer/libs/gst/base/gstaggregator.c:3079
#3  0x0000ffff94af03c8 in gst_aggregator_pad_chain (pad=0xaaab02eca8b0 [GstPad|sink_1], object=0xaaab02e9c1d0 [GstObject|mixer], buffer=0xffff74012b40) at ../subprojects/gstreamer/libs/gst/base/gstaggregator.c:3159
#4  0x0000ffff97e37f28 in gst_pad_chain_data_unchecked (pad=0xaaab02eca8b0 [GstPad|sink_1], type=4112, data=0xffff74012b40) at ../subprojects/gstreamer/gst/gstpad.c:4447
#5  0x0000ffff97e38d18 in gst_pad_push_data (pad=0xaaab02ea4d50 [GstPad|src], type=4112, data=0xffff74012b40) at ../subprojects/gstreamer/gst/gstpad.c:4711
#6  0x0000ffff97e39480 in gst_pad_push (pad=0xaaab02ea4d50 [GstPad|src], buffer=0xffff74012b40) at ../subprojects/gstreamer/gst/gstpad.c:4830
#7  0x0000ffff94b332c0 in gst_base_transform_chain (pad=0xaaab02ea4b00 [GstPad|sink], parent=0xaaab02eb9e20 [GstObject|audioconvert1], buffer=0xffff74012b40) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2377
#8  0x0000ffff97e37f28 in gst_pad_chain_data_unchecked (pad=0xaaab02ea4b00 [GstPad|sink], type=4112, data=0xffff74012b40) at ../subprojects/gstreamer/gst/gstpad.c:4447
#9  0x0000ffff97e38d18 in gst_pad_push_data (pad=0xaaab02e7e2c0 [GstPad|audio], type=4112, data=0xffff74012b40) at ../subprojects/gstreamer/gst/gstpad.c:4711
#10 0x0000ffff97e39480 in gst_pad_push (pad=0xaaab02e7e2c0 [GstPad|audio], buffer=0xffff74012b40) at ../subprojects/gstreamer/gst/gstpad.c:4830
#11 0x0000ffff97e10e2c in gst_proxy_pad_chain_default (pad=0xaaab02e80320 [GstPad|proxypad1], parent=0xaaab02e7e2c0 [GstObject|audio], buffer=0xffff74012b40) at ../subprojects/gstreamer/gst/gstghostpad.c:127
#12 0x0000ffff97e37f28 in gst_pad_chain_data_unchecked (pad=0xaaab02e80320 [GstPad|proxypad1], type=4112, data=0xffff74012b40) at ../subprojects/gstreamer/gst/gstpad.c:4447
#13 0x0000ffff97e38d18 in gst_pad_push_data (pad=0xaaab02e870f0 [GstPad|src], type=4112, data=0xffff74012b40) at ../subprojects/gstreamer/gst/gstpad.c:4711
#14 0x0000ffff97e39480 in gst_pad_push (pad=0xaaab02e870f0 [GstPad|src], buffer=0xffff74012b40) at ../subprojects/gstreamer/gst/gstpad.c:4830
#15 0x0000ffff94939bfc in gst_queue_push_one (queue=0xaaab02e8e420 [GstQueue|audio-queue]) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1388
#16 0x0000ffff9493a9d0 in gst_queue_loop (pad=0xaaab02e870f0 [GstPad|src]) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1541
#17 0x0000ffff97e7ed5c in gst_task_func (task=0xaaab02ed4710 [GstTask|audio-queue:src]) at ../subprojects/gstreamer/gst/gsttask.c:384
#18 0x0000ffff97e802bc in default_func (tdata=0xaaab02ea0e60, pool=0xaaab02ed2490 [GstTaskPool|taskpool0]) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#19 0x0000ffff97cb8678 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#20 0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#21 0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#22 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 7 (Thread 0xffff91efe980 (LWP 10193) "video-queue:src"):
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000ffff97cd571c in g_cond_wait () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff9493a5a8 in gst_queue_loop (pad=0xaaab02e86c50 [GstPad|src]) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1529
#3  0x0000ffff97e7ed5c in gst_task_func (task=0xaaab02ed45f0 [GstTask|video-queue:src]) at ../subprojects/gstreamer/gst/gsttask.c:384
#4  0x0000ffff97e802bc in default_func (tdata=0xaaab02e83120, pool=0xaaab02ed2490 [GstTaskPool|taskpool0]) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#5  0x0000ffff97cb8678 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#6  0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#7  0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#8  0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 6 (Thread 0xffff9270e980 (LWP 10192) "audiotestsrc0:s"):
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000ffff97cd571c in g_cond_wait () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff94aefb58 in gst_aggregator_pad_chain_internal (self=0xaaab02e9c1d0 [GstAggregator|mixer], aggpad=0xaaab02ec5230 [GstAggregatorPad|sink_0], buffer=0xffff74013000, head=1) at ../subprojects/gstreamer/libs/gst/base/gstaggregator.c:3079
#3  0x0000ffff94af03c8 in gst_aggregator_pad_chain (pad=0xaaab02ec5230 [GstPad|sink_0], object=0xaaab02e9c1d0 [GstObject|mixer], buffer=0xffff74013000) at ../subprojects/gstreamer/libs/gst/base/gstaggregator.c:3159
#4  0x0000ffff97e37f28 in gst_pad_chain_data_unchecked (pad=0xaaab02ec5230 [GstPad|sink_0], type=4112, data=0xffff74013000) at ../subprojects/gstreamer/gst/gstpad.c:4447
#5  0x0000ffff97e38d18 in gst_pad_push_data (pad=0xaaab02e87340 [GstPad|src], type=4112, data=0xffff74013000) at ../subprojects/gstreamer/gst/gstpad.c:4711
#6  0x0000ffff97e39480 in gst_pad_push (pad=0xaaab02e87340 [GstPad|src], buffer=0xffff74013000) at ../subprojects/gstreamer/gst/gstpad.c:4830
#7  0x0000ffff94b291d8 in gst_base_src_loop (pad=0xaaab02e87340 [GstPad|src]) at ../subprojects/gstreamer/libs/gst/base/gstbasesrc.c:3030
#8  0x0000ffff97e7ed5c in gst_task_func (task=0xaaab02ed44d0 [GstTask|audiotestsrc0:src]) at ../subprojects/gstreamer/gst/gsttask.c:384
#9  0x0000ffff97e802bc in default_func (tdata=0xaaab02e83000, pool=0xaaab02ed2490 [GstTaskPool|taskpool0]) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#10 0x0000ffff97cb8678 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#11 0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#12 0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#13 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 5 (Thread 0xffff92f1e980 (LWP 10191) "mixer:src"):
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000ffff97cd571c in g_cond_wait () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff9493935c in gst_queue_chain_buffer_or_list (pad=0xaaab02e87a30 [GstPad|sink], parent=0xaaab02e8e720 [GstObject|queue0], obj=0xffff0c0aec60, is_list=0) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1251
#3  0x0000ffff94939a80 in gst_queue_chain (pad=0xaaab02e87a30 [GstPad|sink], parent=0xaaab02e8e720 [GstObject|queue0], buffer=0xffff0c0aec60) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1349
#4  0x0000ffff97e37f28 in gst_pad_chain_data_unchecked (pad=0xaaab02e87a30 [GstPad|sink], type=4112, data=0xffff0c0aec60) at ../subprojects/gstreamer/gst/gstpad.c:4447
#5  0x0000ffff97e38d18 in gst_pad_push_data (pad=0xaaab02e877e0 [GstPad|src], type=4112, data=0xffff0c0aec60) at ../subprojects/gstreamer/gst/gstpad.c:4711
#6  0x0000ffff97e39480 in gst_pad_push (pad=0xaaab02e877e0 [GstPad|src], buffer=0xffff0c0aec60) at ../subprojects/gstreamer/gst/gstpad.c:4830
#7  0x0000ffff94b332c0 in gst_base_transform_chain (pad=0xaaab02e87590 [GstPad|sink], parent=0xaaab02ea1960 [GstObject|audioconvert0], buffer=0xffff0c0aec60) at ../subprojects/gstreamer/libs/gst/base/gstbasetransform.c:2377
#8  0x0000ffff97e37f28 in gst_pad_chain_data_unchecked (pad=0xaaab02e87590 [GstPad|sink], type=4112, data=0xffff0c0aec60) at ../subprojects/gstreamer/gst/gstpad.c:4447
#9  0x0000ffff97e38d18 in gst_pad_push_data (pad=0xaaab02e9e440 [GstPad|src], type=4112, data=0xffff0c0aec60) at ../subprojects/gstreamer/gst/gstpad.c:4711
#10 0x0000ffff97e39480 in gst_pad_push (pad=0xaaab02e9e440 [GstPad|src], buffer=0xffff0c0aec60) at ../subprojects/gstreamer/gst/gstpad.c:4830
#11 0x0000ffff94ae45c0 in gst_aggregator_default_finish_buffer (self=0xaaab02e9c1d0 [GstAggregator|mixer], buffer=0xffff0c0aec60) at ../subprojects/gstreamer/libs/gst/base/gstaggregator.c:688
#12 0x0000ffff94ae46c0 in gst_aggregator_finish_buffer (aggregator=0xaaab02e9c1d0 [GstAggregator|mixer], buffer=0xffff0c0aec60) at ../subprojects/gstreamer/libs/gst/base/gstaggregator.c:714
#13 0x0000ffff94bbe448 in gst_audio_aggregator_aggregate (agg=0xaaab02e9c1d0 [GstAggregator|mixer], timeout=0) at ../subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudioaggregator.c:2549
#14 0x0000ffff94ae7ed8 in gst_aggregator_aggregate_func (self=0xaaab02e9c1d0 [GstAggregator|mixer]) at ../subprojects/gstreamer/libs/gst/base/gstaggregator.c:1389
#15 0x0000ffff97e7ed5c in gst_task_func (task=0xaaab02ed43b0 [GstTask|mixer:src]) at ../subprojects/gstreamer/gst/gsttask.c:384
#16 0x0000ffff97e802bc in default_func (tdata=0xaaab02ea0a80, pool=0xaaab02ed2490 [GstTaskPool|taskpool0]) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#17 0x0000ffff97cb8678 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#18 0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#19 0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#20 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 4 (Thread 0xffff9372e980 (LWP 10190) "queue0:src"):
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000ffff97cd571c in g_cond_wait () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff94b45934 in gst_collect_pads_chain (pad=0xaaab02ea58e0 [GstPad|audio_0], parent=0xaaab02eb2040 [GstObject|muxer], buffer=0xffff7800e6c0) at ../subprojects/gstreamer/libs/gst/base/gstcollectpads.c:2244
#3  0x0000ffff97e37f28 in gst_pad_chain_data_unchecked (pad=0xaaab02ea58e0 [GstPad|audio_0], type=4112, data=0xffff7800e6c0) at ../subprojects/gstreamer/gst/gstpad.c:4447
#4  0x0000ffff97e38d18 in gst_pad_push_data (pad=0xaaab02e87c80 [GstPad|src], type=4112, data=0xffff7800e6c0) at ../subprojects/gstreamer/gst/gstpad.c:4711
#5  0x0000ffff97e39480 in gst_pad_push (pad=0xaaab02e87c80 [GstPad|src], buffer=0xffff7800e6c0) at ../subprojects/gstreamer/gst/gstpad.c:4830
#6  0x0000ffff94939bfc in gst_queue_push_one (queue=0xaaab02e8e720 [GstQueue|queue0]) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1388
#7  0x0000ffff9493a9d0 in gst_queue_loop (pad=0xaaab02e87c80 [GstPad|src]) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1541
#8  0x0000ffff97e7ed5c in gst_task_func (task=0xaaab02ed4170 [GstTask|queue0:src]) at ../subprojects/gstreamer/gst/gsttask.c:384
#9  0x0000ffff97e802bc in default_func (tdata=0xaaab02ea0e80, pool=0xaaab02ed2490 [GstTaskPool|taskpool0]) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#10 0x0000ffff97cb8678 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#11 0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#12 0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#13 0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 3 (Thread 0xffff93f3e980 (LWP 10189) "queue1:src"):
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000ffff97cd571c in g_cond_wait () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff9493a5a8 in gst_queue_loop (pad=0xaaab02ea4660 [GstPad|src]) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1529
#3  0x0000ffff97e7ed5c in gst_task_func (task=0xaaab02ed4050 [GstTask|queue1:src]) at ../subprojects/gstreamer/gst/gsttask.c:384
#4  0x0000ffff97e802bc in default_func (tdata=0xaaab02ea0ab0, pool=0xaaab02ed2490 [GstTaskPool|taskpool0]) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#5  0x0000ffff97cb8678 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#6  0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#7  0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#8  0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 2 (Thread 0xffff9474e980 (LWP 10188) "queue2:src"):
#0  syscall () at ../sysdeps/unix/sysv/linux/aarch64/syscall.S:38
#1  0x0000ffff97cd571c in g_cond_wait () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff9493a5a8 in gst_queue_loop (pad=0xaaab02ea5690 [GstPad|src]) at ../subprojects/gstreamer/plugins/elements/gstqueue.c:1529
#3  0x0000ffff97e7ed5c in gst_task_func (task=0xaaab02ed4290 [GstTask|queue2:src]) at ../subprojects/gstreamer/gst/gsttask.c:384
#4  0x0000ffff97e802bc in default_func (tdata=0xaaab02ea0c60, pool=0xaaab02ed2490 [GstTaskPool|taskpool0]) at ../subprojects/gstreamer/gst/gsttaskpool.c:70
#5  0x0000ffff97cb8678 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#6  0x0000ffff97cb59a0 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#7  0x0000ffff97a7d5c8 in start_thread (arg=0x0) at ./nptl/pthread_create.c:442
#8  0x0000ffff97ae5d1c in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:79

Thread 1 (Thread 0xffff979fd040 (LWP 10187) "gst-launch-1.0"):
#0  0x0000ffff97adbc78 in __GI___poll (fds=0xaaab02ed7770, nfds=2, timeout=<optimized out>) at ../sysdeps/unix/sysv/linux/poll.c:41
#1  0x0000ffff97cdb738 in  () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#2  0x0000ffff97c85024 in g_main_loop_run () at /lib/aarch64-linux-gnu/libglib-2.0.so.0
#3  0x0000aaaae831707c in main (argc=41, argv=0xffffcaa813f8) at ../subprojects/gstreamer/tools/gst-launch.c:1305
[Inferior 1 (process 10187) detached]

Can't reproduce the issue when GST_DEBUG=5 or higher, so can't provide detailed logs.

Bad audio meta

Current master (79fbffc) makes our app explode:

GStreamer-Audio: gst_audio_buffer_map: assertion 'meta->samples <=
  gst_buffer_get_size (gstbuffer) / GST_AUDIO_INFO_BPF (&meta->info)' failed

I think I can spot some issues:

  • audio_info isn't updated when the caps change.
  • The buffer size is passed to gst_buffer_add_audio_meta instead of the sample count.

cefsrc and no GPU

Hi All,

I'm trying to use cefsrc without drawing to a screen and without a GPU in my hardware. Does anyone know if GPU is a requirement for cefsrc or can it be run in a headless mode?

For an example, (note that I'm using a virtual environment with Xvfb), and a simple test pipeline produces:
Xvfb :99 &
export DISPLAY=:99

GST_PLUGIN_PATH=Release:$GST_PLUGIN_PATH gst-launch-1.0 cefsrc num-buffers=1 url=file:///home/root/urls/text.html ! video/x-raw,format=BGRA,width=1920,height=1080,framerate=60/1 ! filesink location=/home/root/buffer.raw
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
[1223/133936.433163:FATAL:gpu_data_manager_impl_private.cc(407)] GPU process isn't usable. Goodbye.
Trace/breakpoint trap

Thanks,
Przemek

Sound problem with a local record

Hi Mathieu,

I am testing a local record using the cefsrc and cefdemux modules. What I observe is a problem out of the sound and I would like to have your opinion on what can happen.

The pipeline I use for a local recording is:

$ export GST_DEBUG = 4
$ export GST_PLUGIN_PATH = $ PWD
$ export GST_DEBUG_DUMP_DOT_DIR = $ PWD
$ gst-launch-1.0 cefsrc url = "https://soundcloud.com/platform/sama" ! cefdemux name = d d.video ! video / x-raw, format = BGRA, framerate = 30/1! tail! videoconvert! videorate max-rate = 3000! videoscale! x264enc tune = speed-preset zerolatency = superfast key-int-max = 60 ref = 2! mux. d.audio_0! audio / x-raw, rate = 48000! tail! audioconvert! audiorate! voaacenc bitrate = 96000! mux. matroskamux name = mux! filesink location = out-sample01.mkv

As you can see, I get an empty file:

$ ls -al sample01.mkv
-rw-rw-r-- 1 tgayet tgayet 0 Oct 25 14:03 sample01.mkv

$ file sample01.mkv
sample01.mkv: empty

$ gst-discoverer-1.0 out-cef.mkv
Analyzing sample01.mkv
Done discovering sample01.mkv
An error was encountered while discovering the file
 Stream contains no data.

What I can see is that I do not get a dot file for the PLAYING state; i just get READY then PAUSE.

However, when I use another source for the sound, namely the gstreamer module audiotestsrc, what I get seems ok with sound this time:

$ export GST_DEBUG = 4
$ export GST_PLUGIN_PATH = $ PWD
$ export GST_DEBUG_DUMP_DOT_DIR = $ PWD
$ gst-launch-1.0 cefsrc url = "https://soundcloud.com/platform/sama" ! cefdemux name = d d.video ! video/x-raw,format=BGRA,framerate=30/1 ! queue ! videoconvert ! videorate max-rate=3000 ! videoscale ! x264enc tune = speed-preset zerolatency = superfast key-int-max = 60 ref = 2 ! mux. audiotestsrc ! audio/x-raw ! queue ! audioconvert ! audiorate ! voaacenc bitrate = 96000 ! mux. matroskamux name = mux ! filesink location = sample02.mkv
$ ls -al sample02.mkv
-rw-rw-r-- 1 tgayet tgayet 1194840 Oct 25 14:08 sample02.mkv

$ file sample02.mkv
sample02.mkv: Matroska data

$ gst-discoverer-1.0 sample02.mkv
Analyzing sample02.mkv
Done discovering sample02.mkv

Topology:
  container: Matroska
    audio: MPEG-4 AAC
    video: H.264 (High 4: 4: 4 Profile)

Properties:
  Duration: 0: 00: 04.566000001
  Seekable: yes
  Live: no
  tags:
      container format: Matroska
      audio codec: MPEG-4 AAC audio
      language code: in
      video codec: H264

Do you have an idea what could happen? Any idea?

Thank you in advance for your return.

Thierry

[Q] what is the purpose of the audiotestsrc ?

Hi @philn, @MathieuDuponchelle
Thanks for giving us this great plugin!
I've being playing around with it, using appsink for video only.

cefsrc name=cefsrc ! videoconvert ! x264enc name=encode pass=17 tune=zerolatency bitrate=2000 speed-preset=superfast ! appsink name=video sync=false

Lately I've being trying to add audio but with no luck.
cefsrc name=cefsrc ! cefdemux name=d d.video ! queue max-size-bytes=0 max-size-buffers=0 max-size-time=3000000000 ! videoconvert ! x264enc name=encode pass=17 tune=zerolatency bitrate=2000 speed-preset=superfast appsink name=video sync=false 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 ! appsink name=audio sync=false d.audio ! mix.'

I'm running into all sort of issues, like stream get stuck, audio is noise etc...
I'm trying to debug it... got curious about the use audiotestsrc. Why is it required? and what does it do ? Aren't we creating the buffer of the audio buffer in OnAudioStreamPacket and then just push it down stream via the demux so why do we need the audiotestsrc?
To be fair Im not a gstreamer expect, but do have some experience with it.

Pipeline hangs (Windows)

Test pipeline hangs when output window is closed or Ctrl+C in terminal. Also, I'll see a 'GPUCache' folder with some files (data_0, data_1, data_2, data_3, index).

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got context from element 'playsink': gst.d3d11.device.handle=context, device=(GstD3D11Device)"\(GstD3D11Device\)\ d3d11device4", adapter=(uint)0, adapter-luid=(gint64)66049, device-id=(uint)39520, vendor-id=(uint)32902, hardware=(boolean)true, description=(string)"Intel\(R\)\ UHD\ Graphics";
Redistribute latency...
ERROR: from element /GstPlayBin:playbin0/GstPlaySink:playsink/GstBin:vbin/GstAutoVideoSink:videosink/GstD3D11VideoSink:videosink-actual-sink-d3d11video: Output window was closed
Additional debug info:
../sys/d3d11/gstd3d11videosink.cpp(1195): gst_d3d11_video_sink_show_frame (): /GstPlayBin:playbin0/GstPlaySink:playsink/GstBin:vbin/GstAutoVideoSink:videosink/GstD3D11VideoSink:videosink-actual-sink-d3d11video
Execution ended after 0:00:05.107888000
Setting pipeline to NULL ...
Freeing pipeline ...

Same happens when an EOS is sent.

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Got context from element 'autovideosink0': gst.d3d11.device.handle=context, device=(GstD3D11Device)"\(GstD3D11Device\)\ d3d11device4", adapter=(uint)0, adapter-luid=(gint64)66049, device-id=(uint)39520, vendor-id=(uint)32902, hardware=(boolean)true, description=(string)"Intel\(R\)\ UHD\ Graphics";
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:00.155079000
Setting pipeline to NULL ...
Freeing pipeline ...

PROBLEM RTSP PIPELINE

Hi Mathieu,

I'm Ghizlane, and I just discovered the module gstcef that you come to write and published in open source under github.

It's really great because it's a project that will help me a lot to get the audio but also the video I want to send to an RTSP server.

In rtsp the audio and the video are not muxed but a SDP declares the audio and video flows in a first exchanges (always in RTSP).

Then each one is retransmitted separately by RTP.

Starting from the pipeline that you propose for the test, I tried several variants and now I have the following pipeline:

gst-launch-1.0 cefsrc url="file:///......" ! queue max-size-buffers = 500 ! cefdemux name=d d.video ! video/x-raw,format=BGRA,framerate=30/1 ! videoconvert ! videorate max-rate = 2500 ! videoscale ! x264enc bitrate = 2500 tune = zerolatency speed-preset = superfast key-int-max = 60 ! rtspclientsink debug=1 latency=0 stream-name=”......” location=rtsp://...... d.audio ! audio/x-raw channels = 1, rate = 48000 ! queue max-size-buffers = 500 ! audioconvert ! audiorate! voaacenc bitrate = 96000 ! rtspclientsink debug=1 latency=0 stream-name=”.......” location=rtsp://.......

You will recognize the beginning; but the end has been cut in half for each Audio and Video stream. Indeed, I use your cefdemux module because I have to convert video to H264 and audio to AAC-LC separately.

For each stream, it performs a RTSP request separately but I do not think this way is the most ideal.

According to you, do you think it is possible to recover the A / V streams once converted to the rtspclientsink module in order to make only one rtsp request?

Thank you very much for your return.

Best regards
Ghizlane

macOS build issue

Hey there! Thanks for working on this, it looks like it could be a promising solution to the current problem I'm working on solving :)

Eventually, I'll be running this on a Linux server, but during testing I'm using macOS. When I run the build steps in the README, things go pretty well until the very end. The cmake command downloads cef and extracts it, and everything seems good with the cmake command. When I run the make command, the build process get's through 97% of the process, I see it builds the target libcef_dll_wrapper successfully, but then I see these error lines at the end of the build process:

[ 97%] Linking CXX static library libcef_dll_wrapper.a
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libcef_dll_wrapper.a(cef_atomicops_x86_gcc.cc.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libcef_dll_wrapper.a(cef_lock.cc.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libcef_dll_wrapper.a(libcef_dll_wrapper2.cc.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libcef_dll_wrapper.a(cef_atomicops_x86_gcc.cc.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libcef_dll_wrapper.a(cef_lock.cc.o) has no symbols
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: libcef_dll_wrapper.a(libcef_dll_wrapper2.cc.o) has no symbols
[ 97%] Built target libcef_dll_wrapper
Scanning dependencies of target gstcef
[ 97%] Building CXX object CMakeFiles/gstcef.dir/gstcef.cc.o
[ 98%] Building CXX object CMakeFiles/gstcef.dir/gstcefsrc.cc.o
[ 98%] Building CXX object CMakeFiles/gstcef.dir/gstcefdemux.cc.o
[ 99%] Building CXX object CMakeFiles/gstcef.dir/gstcefaudiometa.cc.o
make[2]: *** No rule to make target `libcef_lib-NOTFOUND', needed by `Release/libgstcef.dylib'.  Stop.
make[1]: *** [CMakeFiles/gstcef.dir/all] Error 2
make: *** [all] Error 2

Any idea if there are some different steps I need to take to get this up and running on macOS? I don't have a lot of experience with cef, so maybe it's something I need to do differently in regard to building that?

Any help or pointers would be greatly appreciated! Thanks again!

Segfault with GStreamer 1.17

I'm using GStreamer from Git as of right now and trying to use this to render a web page.

Relevant part of pipeline looks like cefsrc -> cefdemux -> queue -> videoconvert just like in the readme.

However, for me it crashes like this:

[0121/112213.800301:FATAL:browser_host_impl.cc(265)] Check failed: false. called on invalid thread

Thread 17 "x" received signal SIGTRAP, Trace/breakpoint trap.
[Switching to Thread 0x7f25f0519700 (LWP 7187)]
0x00007f25f669487a in operator() () at ../../base/logging.cc:880
880     ../../base/logging.cc: No such file or directory.
(gdb) bt
#0  0x00007f25f669487a in operator() () at ../../base/logging.cc:880
#1  0x00007f25f669487a in ~LogMessage() () at ../../base/logging.cc:880
#2  0x00007f25f64f854e in CreateBrowserSync() () at ../../buildtools/third_party/libc++/trunk/include/ostream:864
#3  0x00007f25f3274eca in cef_browser_host_create_browser_sync() () at ../../cef/libcef_dll/cpptoc/browser_host_cpptoc.cc:103
#4  0x00007f2604d3f512 in CefBrowserHost::CreateBrowserSync(CefWindowInfo const&, scoped_refptr<CefClient>, CefStringBase<CefStringTraitsUTF16> const&, CefStructBase<CefBrowserSettingsTraits> const&, scoped_refptr<CefDictionaryValue>, scoped_refptr<CefRequestContext>)
    (windowInfo=..., client=..., url=..., settings=..., extra_info=..., request_context=...) at /gstcefsrc/third_party/cef/cef_binary_75.0.6+g90ecd35+chromium-75.0.3770.80_linux64/libcef_dll/ctocpp/browser_host_ctocpp.cc:71
#5  0x00007f2604d36d5c in gst_cef_src_start(GstBaseSrc*) (base_src=0x7f26300be170 [GstBaseSrc|cefsrc0]) at /gstcefsrc/gstcefsrc.cc:322
#6  0x00007f263ed664f2 in gst_base_src_start (basesrc=basesrc@entry=0x7f26300be170 [GstBaseSrc|cefsrc0]) at ../libs/gst/base/gstbasesrc.c:3465
#7  0x00007f263ed66aa0 in gst_base_src_activate_push (pad=0x7f26300ac840 [GstPad|src], active=1, parent=<optimized out>) at ../libs/gst/base/gstbasesrc.c:3839
#8  0x00007f263ed66aa0 in gst_base_src_activate_mode (pad=0x7f26300ac840 [GstPad|src], parent=<optimized out>, mode=<optimized out>, active=1) at ../libs/gst/base/gstbasesrc.c:3916
#9  0x00007f263ec5fbab in activate_mode_internal (pad=0x7f26300ac840 [GstPad|src], parent=0x7f26300be170 [GstObject|cefsrc0], mode=GST_PAD_MODE_PUSH, active=1) at ../gst/gstpad.c:1217
#10 0x00007f263ec602c8 in gst_pad_set_active (pad=pad@entry=0x7f26300ac840 [GstPad|src], active=1) at ../gst/gstpad.c:1100
#11 0x00007f263ec3aa85 in activate_pads (vpad=<optimized out>, ret=0x7f25f0518140, active=0x7f25f051819c) at ../gst/gstelement.c:3121
#12 0x00007f263ec4ff0c in gst_iterator_fold (it=it@entry=0x7f25e8001a90, func=func@entry=0x7f263ec3aa60 <activate_pads>, ret=ret@entry=0x7f25f0518140, user_data=user_data@entry=0x7f25f051819c) at ../gst/gstiterator.c:617
#13 0x00007f263ec3b4a6 in iterator_activate_fold_with_resync (iter=iter@entry=0x7f25e8001a90, user_data=user_data@entry=0x7f25f051819c, func=0x7f263ec3aa60 <activate_pads>) at ../gst/gstelement.c:3145
#14 0x00007f263ec3d758 in gst_element_pads_activate (element=element@entry=0x7f26300be170 [GstElement|cefsrc0], active=<optimized out>, active@entry=1) at ../gst/gstelement.c:3181
Segmentation fault (core dumped)

Is this an issue in gstcefsrc, gstreamer or chromium itself?

Leaves 5 processes running after `stop`

The "UI" thread is at least one process. The 4 others I'm not sure yet what they're for. Stopping a source element should clean-up resources, it's currently not the case, until the app process is terminated.

Websocket support, how to?

@MathieuDuponchelle first of all, great job on this plugin.

I love it because it does not need Wayland as wpe so it was "easy" for me
to compile and use it in a container.
As I am not a big C/C++ developer (or not even at all) and I already tested a lot of HTML/JS use-cases, I have a question.

How could you/I enable WebSocket support?

As I already said, I tested threeJS and a lot of JS/CSS stuff with this plugin also in LIVE and it was perfect, but WebSockets is the last missing link for me to build an HTML5/CSS/JS-"graphic engine" for LIVE with this plugin.

I would really appreciate it if you give me a hint, maybe even feasibility?

Thank you in advance, Michael

Several audio source not mixed

Hi Mathieu,

I just found your project github module gstreamer for CEF and I really love your idea. Indeed, I work with embedded cef and the approach of linking it as a gstreamer module is really great! Well done !

So I tested it a lot and it works really well.

I modified it to point to a newer version because my url is a website recovering Audio and Video sources in webrtc. Indeed, in versions prior of CEF, it has bug with the ICE protocol (STUN / TURN).

In addition, I observed an issue. Before testing your cef module, I mixed the sound with pulse audio mixer and it went well when I had two separate sounds: they were well added. As you know, the on_paint() callback from CEF also manages a callback for the audio but the latter remains unitary and two sounds from two different sources are not added.Previously, when I overloaded the audio and video callback, I also realized an internal audio mix based on the different audio callbacks.

Do you want to modify your module to manage the mix internally in the gstsrc module? Indeed, without this mix it adds a contrait because only the first audio source is heard, the second is not managed.

Sample of simple test page:

<html>
                <body style="background-color:aliceblue;"> 
                        <embed type="video/mp4" src="Comptines_et_chansons_pour_enfants.mp4" autostart="true" width="600" height="720" volume="1"/> 
                        <embed type="video/webm" src="Volcano_Lava_Sample.webm" autostart="true" width="400" height="720" volume="0.3"/> 
       
                </body>
                
</html>

Thank you in advance for your return.

Thierry

License

What is the license of this plugin? The LICENSE file is missing.

Windows build

Hey,
GStreamer fails to load this plugin.

(gst-inspect-1.0:19248): GStreamer-WARNING **: 13:31:43.321: Failed to load plugin 'C:\Users\trigg\Dev\gstreamer\gstcefsrc\build\Release\gstcef.dll': 'C:\Users\trigg\Dev\gstreamer\gstcefsrc\build\Release\gstcef.dll': The specified module could not be found.

(gst-inspect-1.0:19248): GStreamer-WARNING **: 13:31:43.330: Failed to load plugin 'C:\Users\trigg\Dev\gstreamer\gstcefsrc\build\Release\libcef.dll': 'C:\Users\trigg\Dev\gstreamer\gstcefsrc\build\Release\libcef.dll': The specified module could not be found.

I used this command:

cmake -DCMAKE_BUILD_TYPE=Release ..

followed by building solution with Visual Studio 19.

I set the GST_PLUGIN_PATH environment variable in system properties after.

GStreamer version 1.19.1 - MinGW 64-bit runtime and development installers.

Am I missing something?

Plugin files blacklisted but plugin still works

I've noticed that with gst-inspect-1.0 -b, the plugin files are blacklisted even though the plugin seems to work fine. I'm not sure if this is something wrong with my setup or whether it's a symptom of another issue that is yet to present itself. I've cleared the cache with rm -R ~/.cache/gstreamer-1.0/ and re-run gst-inspect-1.0 -b, but still see the files blacklisted.

I ran a test in a Vagrant environment (Ubuntu 22.04 where I installed gstreamer via apt, and then built cefsrc from this repo). Below is the output of some commands from this test.

This is the Vagrantfile I used for the test environment: https://gist.github.com/sidsethupathi/86474e38b1161ae9b81c3df2dd08be11

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

vagrant@ubuntu-jammy:~/gstcefsrc/build/Release$ pwd
/home/vagrant/gstcefsrc/build/Release

vagrant@ubuntu-jammy:~/gstcefsrc/build/Release$ echo $GST_PLUGIN_PATH
/home/vagrant/gstcefsrc/build/Release:

vagrant@ubuntu-jammy:~/gstcefsrc/build/Release$ gst-inspect-1.0 -b
Blacklisted files:
  libEGL.so
  libGLESv2.so
  libcef.so
  libgstmsdk.so
  libvk_swiftshader.so

Total count: 5 blacklisted files

vagrant@ubuntu-jammy:~/gstcefsrc/build/Release$ gst-inspect-1.0 cef
Plugin Details:
  Name                     cef
  Description              Chromium Embedded src plugin
  Filename                 /home/vagrant/gstcefsrc/build/Release/libgstcef.so
  Version                  1.0
  License                  LGPL
  Source module            gstcef
  Binary package           gstcef
  Origin URL               centricular.com

  cefbin: Chromium Embedded Framework source bin
  cefdemux: Chromium Embedded Framework demuxer
  cefsrc: Chromium Embedded Framework source

  3 features:
  +-- 3 elements

vagrant@ubuntu-jammy:~/gstcefsrc/build/Release$ gst-inspect-1.0 --version
gst-inspect-1.0 version 1.20.3
GStreamer 1.20.3
https://launchpad.net/distros/ubuntu/+source/gstreamer1.0

vagrant@ubuntu-jammy:~/gstcefsrc/build/Release$ rm -R ~/.cache/gstreamer-1.0/

vagrant@ubuntu-jammy:~/gstcefsrc/build/Release$ GST_DEBUG=3 gst-inspect-1.0 -b
0:00:00.044170011  1801 0x55bbcaed1730 WARN                 default gstsfelement.c:97:gst_sf_create_audio_template_caps: format 0x120000: 'AVR (Audio Visual Research)' is not mapped
0:00:00.044241144  1801 0x55bbcaed1730 WARN                 default gstsfelement.c:97:gst_sf_create_audio_template_caps: format 0x180000: 'CAF (Apple Core Audio File)' is not mapped
0:00:00.044262204  1801 0x55bbcaed1730 WARN                 default gstsfelement.c:97:gst_sf_create_audio_template_caps: format 0x100000: 'HTK (HMM Tool Kit)' is not mapped
0:00:00.044855455  1801 0x55bbcaed1730 WARN                 default gstsfelement.c:97:gst_sf_create_audio_template_caps: format 0xc0000: 'MAT4 (GNU Octave 2.0 / Matlab 4.2)' is not mapped
0:00:00.044911127  1801 0x55bbcaed1730 WARN                 default gstsfelement.c:97:gst_sf_create_audio_template_caps: format 0xd0000: 'MAT5 (GNU Octave 2.1 / Matlab 5.0)' is not mapped
0:00:00.044930489  1801 0x55bbcaed1730 WARN                 default gstsfelement.c:97:gst_sf_create_audio_template_caps: format 0x210000: 'MPC (Akai MPC 2k)' is not mapped
0:00:00.045637002  1801 0x55bbcaed1730 WARN                 default gstsfelement.c:97:gst_sf_create_audio_template_caps: format 0xe0000: 'PVF (Portable Voice Format)' is not mapped
0:00:00.045706079  1801 0x55bbcaed1730 WARN                 default gstsfelement.c:97:gst_sf_create_audio_template_caps: format 0x160000: 'SD2 (Sound Designer II)' is not mapped
0:00:00.045763026  1801 0x55bbcaed1730 WARN                 default gstsfelement.c:97:gst_sf_create_audio_template_caps: format 0x190000: 'WVE (Psion Series 3)' is not mapped
0:00:00.085606540  1801 0x55bbcaed1730 WARN                 nvcodec gstcudaloader.c:139:gst_cuda_load_library: Could not open library libcuda.so.1, libcuda.so.1: cannot open shared object file: No such file or directory
0:00:00.085668971  1801 0x55bbcaed1730 WARN                 nvcodec plugin.c:73:plugin_init: Failed to load cuda library
0:00:00.091267341  1801 0x55bbcaed1730 WARN                    msdk msdk.c:303:msdk_init_msdk_session: Failed to initialize a MFX session (undeveloped feature)
0:00:00.007880302  1802 0x559d83774320 WARN                    msdk msdk.c:303:msdk_init_msdk_session: Failed to initialize a MFX session (undeveloped feature)
0:00:00.008191193  1802 0x559d83774320 ERROR     GST_PLUGIN_LOADING gstpluginloader.c:1161:exchange_packets: write fd 0 errored
0:00:00.113245128  1800 0x5619b5389a00 ERROR     GST_PLUGIN_LOADING gstpluginloader.c:279:plugin_loader_replay_pending: Plugin file /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstmsdk.so failed to load. Blacklisting
0:00:00.335766754  1803 0x5568b83cb6a0 WARN                  ladspa gstladspa.c:508:plugin_init:<plugin128> no LADSPA plugins found, check LADSPA_PATH
Blacklisted files:
  libEGL.so
  libGLESv2.so
  libcef.so
  libgstmsdk.so
  libvk_swiftshader.so

Total count: 5 blacklisted files

registering JS Callbacks using RenderProcessHandler::OnContextCreated()

Hi,
I'm trying to register custom callback from JS to C++ using this tutorial: https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration#markdown-header-using-js-callbacks. I wrote something like that:
class App : public CefApp, public CefRenderProcessHandler with OnContextCreated(...) and
virtual CefRefPtr<CefRenderProcessHandler> GetRenderProcessHandler() returning this.

Unfortunately the callback OnContextCreated is never called.

Maybe it is related to a wrong thread. The V8 execution must take place on TID_RENDERER thread.

Do you know how to handle callback registration. Is it possible? Maybe another way to achieve it?
It will be nice to have direct communication between C++ and js.

We want something like: https://github.com/Igalia/gst-wpe-webrtc-demo. but without additional server.

Cannot build the project from the 93.1.11+g9e254fa+chromium-93.0.4577.63 release

Hi,

I have tried to upgrade the latest stable release of the libcef in the CMakeLists.txt file and it builds up to release 92.0.27+g274abcf+chromium-92.0.4515.159:

set(CEF_VERSION "93.1.11+g9e254fa+chromium-93.0.4577.63")
set(CEF_ESCAPED_VERSION "93.1.11%2Bg9e254fa%2Bchromium-93.0.4577.63")

From release 93.1.11+g9e254fa+chromium-93.0.4577.63, the following error appears:

$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release .. && make
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.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/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11%2Bg9e254fa%2Bchromium-93.0.4577.63_linux64.tar.bz2.sha1...
-- Downloading /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11%2Bg9e254fa%2Bchromium-93.0.4577.63_linux64.tar.bz2...
-- [download 0% complete]
-- [download 1% complete]
-- [download 2% complete]
-- [download 3% complete]
-- [download 4% complete]
-- [download 5% complete]
-- [download 6% complete]
-- [download 7% complete]
-- [download 8% complete]
-- [download 9% complete]
-- [download 10% complete]
-- [download 11% complete]
-- [download 12% complete]
-- [download 13% complete]
-- [download 14% complete]
-- [download 15% complete]
-- [download 16% complete]
-- [download 17% complete]
-- [download 18% complete]
-- [download 19% complete]
-- [download 20% complete]
-- [download 21% complete]
-- [download 22% complete]
-- [download 23% complete]
-- [download 24% complete]
-- [download 25% complete]
-- [download 26% complete]
-- [download 27% complete]
-- [download 28% complete]
-- [download 29% complete]
-- [download 30% complete]
-- [download 31% complete]
-- [download 32% complete]
-- [download 33% complete]
-- [download 34% complete]
-- [download 35% complete]
-- [download 36% complete]
-- [download 37% complete]
-- [download 38% complete]
-- [download 39% complete]
-- [download 40% complete]
-- [download 41% complete]
-- [download 42% complete]
-- [download 43% complete]
-- [download 44% complete]
-- [download 45% complete]
-- [download 46% complete]
-- [download 47% complete]
-- [download 48% complete]
-- [download 49% complete]
-- [download 50% complete]
-- [download 51% complete]
-- [download 52% complete]
-- [download 53% complete]
-- [download 54% complete]
-- [download 55% complete]
-- [download 56% complete]
-- [download 57% complete]
-- [download 58% complete]
-- [download 59% complete]
-- [download 60% complete]
-- [download 61% complete]
-- [download 62% complete]
-- [download 63% complete]
-- [download 64% complete]
-- [download 65% complete]
-- [download 66% complete]
-- [download 67% complete]
-- [download 68% complete]
-- [download 69% complete]
-- [download 70% complete]
-- [download 71% complete]
-- [download 72% complete]
-- [download 73% complete]
-- [download 74% complete]
-- [download 75% complete]
-- [download 76% complete]
-- [download 77% complete]
-- [download 78% complete]
-- [download 79% complete]
-- [download 80% complete]
-- [download 81% complete]
-- [download 82% complete]
-- [download 83% complete]
-- [download 84% complete]
-- [download 85% complete]
-- [download 86% complete]
-- [download 87% complete]
-- [download 88% complete]
-- [download 89% complete]
-- [download 90% complete]
-- [download 91% complete]
-- [download 92% complete]
-- [download 93% complete]
-- [download 94% complete]
-- [download 95% complete]
-- [download 96% complete]
-- [download 97% complete]
-- [download 98% complete]
-- [download 99% complete]
-- [download 100% complete]
-- Extracting /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11%2Bg9e254fa%2Bchromium-93.0.4577.63_linux64.tar.bz2...
-- Performing Test COMPILER_SUPPORTS_NO_UNDEFINED_VAR_TEMPLATE
-- Performing Test COMPILER_SUPPORTS_NO_UNDEFINED_VAR_TEMPLATE - Success
-- Performing Test COMPILER_SUPPORTS_NO_UNUSED_LOCAL_TYPEDEFS
-- Performing Test COMPILER_SUPPORTS_NO_UNUSED_LOCAL_TYPEDEFS - Success
-- Performing Test COMPILER_SUPPORTS_NO_LITERAL_SUFFIX
-- Performing Test COMPILER_SUPPORTS_NO_LITERAL_SUFFIX - Success
-- Performing Test COMPILER_SUPPORTS_NO_NARROWING
-- Performing Test COMPILER_SUPPORTS_NO_NARROWING - Success
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Checking for modules 'gstreamer-1.0;gstreamer-video-1.0;gstreamer-audio-1.0'
--   Found gstreamer-1.0, version 1.16.2
--   Found gstreamer-video-1.0, version 1.16.2
--   Found gstreamer-audio-1.0, version 1.16.2
-- Configuring done
-- Generating done
-- Build files have been written to: /home/tgayet/gstcefsrc/build
Scanning dependencies of target libcef_dll_wrapper
[  0%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/shutdown_checker.cc.o
[  1%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/transfer_util.cc.o
[  1%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_atomic_flag.cc.o
[  2%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_callback_helpers.cc.o
[  2%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_callback_internal.cc.o
[  3%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_lock.cc.o
[  4%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_lock_impl.cc.o
[  4%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_logging.cc.o
[  5%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_ref_counted.cc.o
[  5%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_thread_checker_impl.cc.o
[  6%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/base/cef_weak_ptr.cc.o
[  6%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/accessibility_handler_cpptoc.cc.o
[  7%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/app_cpptoc.cc.o
[  7%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/audio_handler_cpptoc.cc.o
[  8%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/base_ref_counted_cpptoc.cc.o
[  8%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/base_scoped_cpptoc.cc.o
[  9%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/browser_process_handler_cpptoc.cc.o
[  9%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/client_cpptoc.cc.o
[ 10%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/completion_callback_cpptoc.cc.o
[ 11%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/context_menu_handler_cpptoc.cc.o
[ 11%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/cookie_access_filter_cpptoc.cc.o
[ 12%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/cookie_visitor_cpptoc.cc.o
[ 12%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/delete_cookies_callback_cpptoc.cc.o
[ 13%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/dev_tools_message_observer_cpptoc.cc.o
[ 13%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/dialog_handler_cpptoc.cc.o
[ 14%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/display_handler_cpptoc.cc.o
[ 14%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/domvisitor_cpptoc.cc.o
[ 15%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/download_handler_cpptoc.cc.o
[ 15%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/download_image_callback_cpptoc.cc.o
[ 16%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/drag_handler_cpptoc.cc.o
[ 16%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/end_tracing_callback_cpptoc.cc.o
[ 17%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/extension_handler_cpptoc.cc.o
[ 18%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/find_handler_cpptoc.cc.o
[ 18%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/focus_handler_cpptoc.cc.o
[ 19%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/frame_handler_cpptoc.cc.o
[ 19%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/jsdialog_handler_cpptoc.cc.o
[ 20%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/keyboard_handler_cpptoc.cc.o
[ 20%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/life_span_handler_cpptoc.cc.o
[ 21%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/load_handler_cpptoc.cc.o
[ 21%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/media_observer_cpptoc.cc.o
[ 22%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/media_route_create_callback_cpptoc.cc.o
[ 22%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/media_sink_device_info_callback_cpptoc.cc.o
[ 23%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/menu_model_delegate_cpptoc.cc.o
[ 23%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/navigation_entry_visitor_cpptoc.cc.o
[ 24%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/pdf_print_callback_cpptoc.cc.o
[ 25%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/print_handler_cpptoc.cc.o
[ 25%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/read_handler_cpptoc.cc.o
[ 26%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/render_handler_cpptoc.cc.o
[ 26%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/render_process_handler_cpptoc.cc.o
[ 27%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/request_context_handler_cpptoc.cc.o
[ 27%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/request_handler_cpptoc.cc.o
[ 28%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/resolve_callback_cpptoc.cc.o
[ 28%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/resource_bundle_handler_cpptoc.cc.o
[ 29%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/resource_handler_cpptoc.cc.o
[ 29%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/resource_request_handler_cpptoc.cc.o
[ 30%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/response_filter_cpptoc.cc.o
[ 30%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/run_file_dialog_callback_cpptoc.cc.o
[ 31%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/scheme_handler_factory_cpptoc.cc.o
[ 32%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/server_handler_cpptoc.cc.o
[ 32%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/set_cookie_callback_cpptoc.cc.o
[ 33%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/string_visitor_cpptoc.cc.o
[ 33%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/task_cpptoc.cc.o
[ 34%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/urlrequest_client_cpptoc.cc.o
[ 34%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/v8accessor_cpptoc.cc.o
[ 35%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/v8array_buffer_release_callback_cpptoc.cc.o
[ 35%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/v8handler_cpptoc.cc.o
[ 36%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/v8interceptor_cpptoc.cc.o
[ 36%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/web_plugin_info_visitor_cpptoc.cc.o
[ 37%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/web_plugin_unstable_callback_cpptoc.cc.o
[ 37%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/write_handler_cpptoc.cc.o
[ 38%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/test/translator_test_ref_ptr_client_child_cp
[ 39%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/test/translator_test_ref_ptr_client_cpptoc.c
[ 39%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/test/translator_test_scoped_client_child_cpp
[ 40%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/test/translator_test_scoped_client_cpptoc.cc
[ 40%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/browser_view_delegate_cpptoc.cc.o
[ 41%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/button_delegate_cpptoc.cc.o
[ 41%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/menu_button_delegate_cpptoc.cc.o
[ 42%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/panel_delegate_cpptoc.cc.o
[ 42%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/textfield_delegate_cpptoc.cc.o
[ 43%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/view_delegate_cpptoc.cc.o
[ 43%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/cpptoc/views/window_delegate_cpptoc.cc.o
[ 44%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/auth_callback_ctocpp.cc.o
[ 44%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/before_download_callback_ctocpp.cc.o
[ 45%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/binary_value_ctocpp.cc.o
[ 46%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/browser_ctocpp.cc.o
[ 46%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/browser_host_ctocpp.cc.o
[ 47%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/callback_ctocpp.cc.o
[ 47%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/command_line_ctocpp.cc.o
[ 48%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/context_menu_params_ctocpp.cc.o
[ 48%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/cookie_manager_ctocpp.cc.o
[ 49%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/dictionary_value_ctocpp.cc.o
[ 49%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/domdocument_ctocpp.cc.o
[ 50%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/domnode_ctocpp.cc.o
[ 50%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/download_item_callback_ctocpp.cc.o
[ 51%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/download_item_ctocpp.cc.o
[ 51%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/drag_data_ctocpp.cc.o
[ 52%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/extension_ctocpp.cc.o
[ 52%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/file_dialog_callback_ctocpp.cc.o
[ 53%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/frame_ctocpp.cc.o
[ 54%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/get_extension_resource_callback_ctocpp.cc.o
[ 54%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/image_ctocpp.cc.o
[ 55%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/jsdialog_callback_ctocpp.cc.o
[ 55%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/list_value_ctocpp.cc.o
[ 56%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/media_route_ctocpp.cc.o
[ 56%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/media_router_ctocpp.cc.o
[ 57%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/media_sink_ctocpp.cc.o
[ 57%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/media_source_ctocpp.cc.o
[ 58%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/menu_model_ctocpp.cc.o
[ 58%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/navigation_entry_ctocpp.cc.o
[ 59%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/post_data_ctocpp.cc.o
[ 59%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/post_data_element_ctocpp.cc.o
[ 60%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/print_dialog_callback_ctocpp.cc.o
[ 61%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/print_job_callback_ctocpp.cc.o
[ 61%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/print_settings_ctocpp.cc.o
[ 62%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/process_message_ctocpp.cc.o
[ 62%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/registration_ctocpp.cc.o
[ 63%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/request_callback_ctocpp.cc.o
[ 63%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/request_context_ctocpp.cc.o
[ 64%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/request_ctocpp.cc.o
[ 64%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/resource_bundle_ctocpp.cc.o
[ 65%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/resource_read_callback_ctocpp.cc.o
[ 65%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/resource_skip_callback_ctocpp.cc.o
[ 66%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/response_ctocpp.cc.o
[ 66%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/run_context_menu_callback_ctocpp.cc.o
[ 67%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/scheme_registrar_ctocpp.cc.o
[ 68%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/select_client_certificate_callback_ctocpp.cc
[ 68%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/server_ctocpp.cc.o
[ 69%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/sslinfo_ctocpp.cc.o
[ 69%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/sslstatus_ctocpp.cc.o
[ 70%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/stream_reader_ctocpp.cc.o
[ 70%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/stream_writer_ctocpp.cc.o
[ 71%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/task_runner_ctocpp.cc.o
[ 71%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/thread_ctocpp.cc.o
[ 72%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/urlrequest_ctocpp.cc.o
[ 72%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8context_ctocpp.cc.o
[ 73%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8exception_ctocpp.cc.o
[ 73%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8stack_frame_ctocpp.cc.o
[ 74%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8stack_trace_ctocpp.cc.o
[ 75%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/v8value_ctocpp.cc.o
[ 75%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/value_ctocpp.cc.o
[ 76%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/waitable_event_ctocpp.cc.o
[ 76%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/web_plugin_info_ctocpp.cc.o
[ 77%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/x509cert_principal_ctocpp.cc.o
[ 77%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/x509certificate_ctocpp.cc.o
[ 78%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/xml_reader_ctocpp.cc.o
[ 78%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/zip_reader_ctocpp.cc.o
[ 79%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_ctocpp.cc.o
[ 79%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_ref_ptr_library_child_c
[ 80%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_ref_ptr_library_child_c
[ 80%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_ref_ptr_library_ctocpp.
[ 81%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_scoped_library_child_ch
[ 82%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_scoped_library_child_ct
[ 82%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/test/translator_test_scoped_library_ctocpp.c
[ 83%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/box_layout_ctocpp.cc.o
[ 83%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/browser_view_ctocpp.cc.o
[ 84%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/button_ctocpp.cc.o
[ 84%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/display_ctocpp.cc.o
[ 85%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/fill_layout_ctocpp.cc.o
[ 85%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/label_button_ctocpp.cc.o
[ 86%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/layout_ctocpp.cc.o
[ 86%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/menu_button_ctocpp.cc.o
[ 87%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/menu_button_pressed_lock_ctocpp.cc.o
[ 87%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/panel_ctocpp.cc.o
[ 88%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/scroll_view_ctocpp.cc.o
[ 89%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/textfield_ctocpp.cc.o
[ 89%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/view_ctocpp.cc.o
[ 90%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/ctocpp/views/window_ctocpp.cc.o
[ 90%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_byte_read_handler.cc.o
[ 91%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_closure_task.cc.o
[ 91%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_message_router.cc.o
[ 92%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_resource_manager.cc.o
[ 92%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_scoped_temp_dir.cc.o
[ 93%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_stream_resource_handler.cc.o
[ 93%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_xml_object.cc.o
[ 94%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/cef_zip_archive.cc.o
[ 94%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/libcef_dll_wrapper.cc.o
[ 95%] Building CXX object libcef_dll_wrapper/CMakeFiles/libcef_dll_wrapper.dir/wrapper/libcef_dll_wrapper2.cc.o
[ 96%] Linking CXX static library libcef_dll_wrapper.a
[ 96%] Built target libcef_dll_wrapper
Scanning dependencies of target gstcef
[ 96%] Building CXX object CMakeFiles/gstcef.dir/gstcef.cc.o
[ 97%] Building CXX object CMakeFiles/gstcef.dir/gstcefsrc.cc.o
In file included from /usr/include/dirent.h:245,
                 from /usr/include/glib-2.0/glib/gdir.h:32,
                 from /usr/include/glib-2.0/glib.h:45,
                 from /usr/include/gstreamer-1.0/gst/gst.h:27,
                 from /home/tgayet/gstcefsrc/gstcefsrc.h:4,
                 from /home/tgayet/gstcefsrc/gstcefsrc.cc:14:
/home/tgayet/gstcefsrc/gstcefsrc.cc: In member function ‘virtual void BrowserClient::OnBeforeClose(CefRefPtr<CefBrowser>)’:
/home/tgayet/gstcefsrc/gstcefsrc.cc:278:23: error: ambiguous overload for ‘operator=’ (operand types are ‘CefRefPtr<CefBrowser>’ {a
  278 |   mElement->browser = NULL;
      |                       ^~~~
In file included from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/inte
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/cef_
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/cef_
                 from /home/tgayet/gstcefsrc/gstcefsrc.cc:5:
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_scoped_refptr.h:2refptr<T>::operator=(std::nullptr_t) [with T = CefBrowser; std::nullptr_t = std::nullptr_t]’
  274 |   scoped_refptr& operator=(std::nullptr_t) {
      |                  ^~~~~~~~
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_scoped_refptr.h:2refptr<T>::operator=(T*) [with T = CefBrowser]’
  279 |   scoped_refptr& operator=(T* p) { return *this = scoped_refptr(p); }
      |                  ^~~~~~~~
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_scoped_refptr.h:2refptr<T>::operator=(scoped_refptr<T>) [with T = CefBrowser]’
  282 |   scoped_refptr& operator=(scoped_refptr r) noexcept {
      |                  ^~~~~~~~
/home/tgayet/gstcefsrc/gstcefsrc.cc: In destructor ‘ShutdownEnforcer::~ShutdownEnforcer()’:
/home/tgayet/gstcefsrc/gstcefsrc.cc:489:57: error: invalid use of incomplete type ‘base::Callback<void()>’ {aka ‘class base::Repeat
  489 |     CefPostTask(TID_UI, base::Bind(&quit_message_loop, 0));
      |                                                         ^
In file included from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/wrap
                 from /home/tgayet/gstcefsrc/gstcefsrc.cc:10:
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_callback_forward.)>’ {aka ‘class base::RepeatingCallback<void()>’}
   49 | class RepeatingCallback;
      |       ^~~~~~~~~~~~~~~~~
/home/tgayet/gstcefsrc/gstcefsrc.cc: In function ‘gboolean gst_cef_src_start(GstBaseSrc*)’:
/home/tgayet/gstcefsrc/gstcefsrc.cc:537:85: error: invalid use of incomplete type ‘base::Callback<void()>’ {aka ‘class base::Repeat
  537 |   CefPostTask(TID_UI, base::Bind(&BrowserClient::MakeBrowser, browserClient.get(), 0));
      |                                                                                     ^
In file included from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/wrap
                 from /home/tgayet/gstcefsrc/gstcefsrc.cc:10:
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_callback_forward.)>’ {aka ‘class base::RepeatingCallback<void()>’}
   49 | class RepeatingCallback;
      |       ^~~~~~~~~~~~~~~~~
In file included from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/wrap
                 from /home/tgayet/gstcefsrc/gstcefsrc.cc:10:
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_bind.h: In instan::BindTypeHelper<Functor, BoundArgs>::UnboundRunType> base::Bind(Functor&&, Args&& ...) [with Functor = void (*)(int); Args = {int}Helper<Functor, BoundArgs>::UnboundRunType> = base::RepeatingCallback<void()>; typename base::internal::BindTypeHelper<Functor, Bou
/home/tgayet/gstcefsrc/gstcefsrc.cc:489:57:   required from here
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_bind.h:133:65: erass base::RepeatingCallback<void()>’} is incomplete
  133 | inline Callback<internal::MakeUnboundRunType<Functor, Args...>> Bind(
      |                                                                 ^~~~
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_bind.h:136:29: erepeatingCallback<void()>’
  136 |   return base::BindRepeating(std::forward<Functor>(functor),
      |          ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  137 |                              std::forward<Args>(args)...);
      |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/wrap
                 from /home/tgayet/gstcefsrc/gstcefsrc.cc:10:
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_callback_forward.gCallback<void()>’
   49 | class RepeatingCallback;
      |       ^~~~~~~~~~~~~~~~~
In file included from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/wrap
                 from /home/tgayet/gstcefsrc/gstcefsrc.cc:10:
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_bind.h: In instan::BindTypeHelper<Functor, BoundArgs>::UnboundRunType> base::Bind(Functor&&, Args&& ...) [with Functor = void (BrowserClient::*)(intpename base::internal::BindTypeHelper<Functor, BoundArgs>::UnboundRunType> = base::RepeatingCallback<void()>; typename base::internType = void()]’:
/home/tgayet/gstcefsrc/gstcefsrc.cc:537:85:   required from here
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_bind.h:133:65: erass base::RepeatingCallback<void()>’} is incomplete
  133 | inline Callback<internal::MakeUnboundRunType<Functor, Args...>> Bind(
      |                                                                 ^~~~
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_bind.h:136:29: erepeatingCallback<void()>’
  136 |   return base::BindRepeating(std::forward<Functor>(functor),
      |          ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  137 |                              std::forward<Args>(args)...);
      |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base
                 from /home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/wrap
                 from /home/tgayet/gstcefsrc/gstcefsrc.cc:10:
/home/tgayet/gstcefsrc/third_party/cef/cef_binary_93.1.11+g9e254fa+chromium-93.0.4577.63_linux64/include/base/cef_callback_forward.gCallback<void()>’
   49 | class RepeatingCallback;
      |       ^~~~~~~~~~~~~~~~~
At global scope:
cc1plus: error: unrecognized command line option ‘-Wno-undefined-var-template’ [-Werror]
cc1plus: all warnings being treated as errors
make[2]: *** [CMakeFiles/gstcef.dir/build.make:76: CMakeFiles/gstcef.dir/gstcefsrc.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:98: CMakeFiles/gstcef.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

Did you notice this build error? This no longer builds from release 93.1.11+g9e254fa+chromium-93.0.4577.63 up to 96.0.16+g89c902b+chromium-96.0.4664.55 !
Feel free to contact us.
Regards
Thierry

cefsrc in headless environment using GPU

We're trying to run cefsrc in a headless (no x-server) environment. We've been able to get pipelines to flow using xvfb-run, however that virtual x-server doesn't support GPU pass-through, so for webgl pages, the frame rates are low.

Does anyone have experience running this element in a headless environment?

Save cef video + audio output to file

Hi,

I'm pretty new with gstreamer. One thing I would like to do is save cef video + audio to file.

My attempts

Attempt 1

gst-launch-1.0 cefsrc url="https://soundcloud.com/platform/sama" ! \
    video/x-raw, width=1920, height=1080, framerate=60/1 ! \
    cefdemux name=demux ! videoconvert ! queue ! x264enc ! \
    mp4mux name=muxer fragment-duration=1000 ! filesink location='test.mp4' \
    demux. ! queue ! audioconvert ! audiorate ! audioresample ! faac bitrate=128000 ! muxer.

Stuck at

gst-launch-1.0 cefsrc url="https://soundcloud.com/platform/sama" ! \
    video/x-raw, width=1920, height=1080, framerate=60/1 ! \
    cefdemux name=demux ! videoconvert ! queue ! x264enc ! \
    mp4mux name=muxer fragment-duration=1000 ! filesink location='test.mp4' \
    demux. ! queue ! audioconvert ! audiorate ! audioresample ! faac bitrate=128000 ! muxer.
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...

Attempt 2

After reading this comment #10 (comment) I tried that and it worked, but only 20% of the time. The rest 80% it still stuck and didn't do anything.

I see that @MathieuDuponchelle mentions "pad-added / pad-removed signals"' Tho from last CEF updates we have consistent audio pad right?

Maybe someone could shine light on me on what I am doing wrong and how to fix it?

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.