Repository navigation
Conversation
…rebased CEF 144.0.21 is Chromium 144.0.7559.248, about eight months and ten major versions behind CEF 154.0.33 (Chromium 154.0.8037.94), and in strom-full the renderers run unsandboxed as root. gstcefsrc moves from b633408 to master (204b01b), 22 commits on: event and caps leaks fixed, unlock and unlock_stop, CEF timestamps with an internal queue, max-video-framerate, and macOS build fixes. The three patches are rebased. isolated-context conflicted only where upstream added max-video-framerate next to it. strict-network needed CEF 145's split of Local Network Access into local network and loopback permissions, and the old one's rename; it answers all of them, by API version. gstcefsrc master sends a frame only when the page changes, with framerate=0/1 in its caps, takes the rate as max-video-framerate, and hands cefdemux application/x-cef caps. The HTML Input block tells the two apart by the property: on the new plugin it sets the rate on the element, names the caps for cefdemux, and puts a compositor after the video, which repeats the last frame at the block's rate. videorate does not: measured on a static page, 2 frames in 4 s through videorate, a steady 25 fps through compositor. On the old plugin the block is unchanged. docs/HTML_RENDER.md says what this means for raw cefsrc pipelines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CEF 154 with gstcefsrc master and Strom's three patches (build run 37010759222). Checked before switching: the arm64 archive's sha256 matches the release digest, version.txt names CEF 154.0.33 and the three patches, and in strom-full with the published plugin a static page came out at a steady 25 fps, audio flowed, the remote-control regression passed, two sources stayed isolated, screen capture was refused, and strict refused loopback while loose reached it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this is
CEF 154 and gstcefsrc master under the HTML Input block, with Strom's three gstcefsrc patches rebased onto them.
Stacked on #879 (
feat/cef-devtools-proxy): it builds on that branch's patches and page guard, and targets it. Not to be merged before #879.Why
strom-fullthe renderers run unsandboxed as root, so a known Chromium bug in a page is code running in Strom's container. That makes staying current matter more than usual.b633408is from 2025-12-02. Master (204b01b, 2026-08-24) is 22 commits on: event and caps leaks fixed,unlock/unlock_stop, CEF timestamps with an internal queue,max-video-framerate, and macOS build fixes.What changed
The patches
docker/gstcefsrc/*.patchare regenerated against master:max-video-frameratenext to it, in the property enum, setters, getters, init and class init. Both are kept...._DEPRECATED. The patch now answers all of them, chosen byCEF_API_ADDED, so it still builds against older CEF.build-gstcefsrc.ymldefaults to the new CEF and ref.The HTML Input block
gstcefsrc master changed three things the block depends on:
framerate=0/1in the capsmax-video-frameratepropertycefdemuxvideo/x-rawapplication/x-cefThe block tells the two plugins apart by the property. On the new plugin it sets the rate on the element, names the caps for
cefdemux, and puts acompositorafter the video. A live compositor emits at its own rate and repeats the last frame it has, so the block's output stays at a constant rate however still the page is.videoratecannot do this, because it repeats a frame only when the next one arrives.Measured on a static page with CEF 154 via
gst-launch,cefsrc ! … ! fpsdisplaysink:cefsrcvideorate ! video/x-raw,framerate=25/1compositor ! video/x-raw,framerate=25/1On the old plugin the block builds exactly what it did before.
Raw
cefsrcpipelines change behaviour. A caps filter askingcefsrcfor a fixed rate (video/x-raw,framerate=30/1) no longer negotiates, a static page sends no frames, andcefdemuxneedsapplication/x-cef.docs/HTML_RENDER.mdsays what to use instead. Any flow that drives rawcefsrcwith a fixed-rate caps filter has to change, Open Live's included.Release
gstcefsrc-154.0.33-strom1(run 37010759222) is published togstcefsrc-deps, anddocker/strom-full/Dockerfilepoints at it with both sha256 digests. Nothing published before is touched.What was measured
All in
strom-fullon arm64 (Docker Desktop), with CEF 154 and the patched gstcefsrc in place of 144, a locally built Linux binary of this branch, and the new entrypoint. The suite ran first against a local build of the plugin and was repeated against the published arm64 archive. Before the repeat I checked that the archive's sha256 matches the release digest and thatversion.txtnames CEF 154.0.33 and the three patches.audio_videoblock,audio_outto wavprint(),alert(),confirm()and starting a download on loadgetDisplayMediaon the page and in a cross-site iframeNotAllowedErrorin bothfetchto loopback, and a WebSocket to Strom's/api/wsFailed to fetch, WebSocketerroropened(measured without authentication, since/api/wsrefuses a WebSocket without credentials)http://127.0.0.1:8080/The WebSocket row is new. With 144 and upstream gstcefsrc's single
enable-features, WebSocket was never checked. Here strict refuses it and loose allows it.Tests
cargo test --lib(743 passed, 4 ignored),openapi_test,html_remote_control_property_test,pipeline_lifecycle_test. Clippy is clean, native and wasm32. New:html_input::tests::the_viewport_caps_follow_the_plugin, which checks the caps for each plugin.cefsrc, so the compositor and caps changes have no CI guard beyond the unit test.Not done
STROM_CEF_WIDEVINE=1, from feat(html): an HTML Input block, and remote control of the page it renders #879) has not been tried with CEF 154.STROM_CEF_GPU=1) has not been tried.🤖 Generated with Claude Code