SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler offline
Philippe Normand
philn@igalia.com
Linaro Connect
San Diego, California
23rd-27th September 2019
WPEWebKit
The WebKit port for Embedded
Who am I?
●
Fiddling with WebKit and GStreamer since 2009
●
WebKit committer and reviewer
●
GStreamer committer
●
Partner at Igalia
●
Worker-owned coop, currently around 80 happy Igalians
around the world
●
Provides consulting services for various Free Software
projects
Talk Outline
●
What is WPE
●
Basic infrastructure for Media playback
●
Adaptive streaming in HTML5: Media Source Extensions
●
Media-capabilities
●
Enabling WPE in your apps
●
Hands-on: WPE integration with Yocto on I.MX6 & I.MX8M
WPE, Web Platform for Embedded
WPE, the basics
●
Web-engine based on WebKit, tailored for a wide range
embedded devices
●
6 months release cycle synchronized with WebKitGTK,
including security updates
●
No dependency on any UI toolkit library
●
Pluggable view backends in charge of final rendering
●
Wayland
●
Android experiment
●
Device-specific graphics drivers
WPE backend for FDO
●
Relies on wayland-egl
●
Cross-process buffer sharing
●
API for:
●
EGLImages
●
Or wl_resource objects
●
Or Linux dma-buf information (already used internally)
●
Combined with Mesa
●
Works on desktop (packaged in Fedora 30, soon Debian) &
embedded (Yocto & Buildroot)
Platform support for media playback
in WPE
GStreamer
●
A cross-platform framework for creating Multimedia applications
●
Graph-based processing, example of a basic ogg/vorbis player:
<audio> & <video> in WPE
●
Playbin-based MediaPlayerPrivate implementation
●
GL Video rendering with a custom appsink
●
Custom GstAllocator using WebKit’s FastMalloc
●
White list of supported containers and codecs
●
Codec installer support effectively useless
Adaptive streaming: MSE
By Alicia Boya & Enrique Ocaña
The MSE backend, TL;DR
●
Chunks queued from JavaScript world to a SourceBuffer
●
One GStreamer WebKit Append pipeline per SourceBuffer
●
Demuxing and parsing of samples
●
Samples stored at WebCore’s MSE layer
●
Playback pipeline using a dedicated MediaPlayerPrivate
implementation
●
Playbin-based
●
Custom source element (one source pad per SourceBuffer)
MSE-related improvements in
GStreamer
●
Quite a few improvements in qtdemux for:
●
Samples demuxing in push-mode
●
Edit list support for push-mode
●
Segment event handling
●
Duration-related bug fixes
●
=> Around 15 patches so far!
●
Matroskademux improvements
●
Emit no-more-pads earlier (after parsing Tracks) (used to be sent
while processing the first Cluster)
●
Multi-Tracks parsing
●
Fixes for WebM byte-stream format handling
Current status & plans
●
MSE enabled in GNOME-Web!
●
MSE backend widely tested on embedded platforms (RPi, i-MX6, …)
●
Infrastructure available for combination with EME
●
Youtube (“desktop” and /tv) relying on MSE
●
VP9 & opus
●
H.264 & AAC also supported
●
Playbin3 / Stream-collections support: DONE in trunk
●
Multi-track SourceBuffer support: planned
Media-Capabilities
The (draft) spec
●
https://wicg.github.io/media-capabilities/
●
Goal: provide hints to WebApps regarding the most optimal
media encoders & decoders
●
Input: description of the media format (contentType, width,
height, framerate, …)
●
Output: 3 booleans:
– supported
– smooth
– powerEfficient
GStreamer “probing”
●
New “Hardware” element metadata Classifier (=> 1.16 )
●
Elements may implement probing for their NULL→READY state
transition
●
Possibly refine Caps templates to reflect what the hardware
supports
●
V4L2 decoders (AVC1 profile/level) (>= 1.18)
●
More decoders
●
Basic WebKit GStreamer MediaCapabilities backend working
for decoders probing
Enabling WPE in your apps
Three examples
Cog, the WPE launcher
●
Native application
●
Can work in fullscreen or window mode (no window manager
decorations yet)
●
Provides an API wrapping some of its features
●
D-Bus client API for remoting
●
Two rendering backends:
●
One based on WPEBackend-FDO (mature)
●
One based on libdrm, gbm, libinput (experimental)
Qt5 QML
●
WPEQt QML plugin upstream in WebKit since version 2.24
●
API mimicks QwebView => easy migration path!
●
Depends on WPEBackend-FDO
●
Works on Linux (Wayland and EGLFS)
●
More details:
https://base-art.net/Articles/introducing-wpeqt-a-wpe-api-for-qt5/
GstWPE: HTML overlay in
GStreamer pipelines
●
GStreamer source element acting as a web-browser
●
Outputs GStreamer buffers containing EGLImages wrapped in
GstGLMemory’s
●
Allows for zero-copy composition with other GL backed video
streams
●
More details: https://bit.ly/2kmee2p
WPE/GStreamer on i.MX6
QuadPlus & i.MX8M with Yocto
Yocto layers
●
https://github.com/Igalia/meta-webkit/
●
WPEBackends
●
Cog browser!
●
https://github.com/OSSystems/meta-gstreamer
1.0
●
Updated GStreamer 1.14.x recipes
●
Poky reference distro
●
(meta-freescale)
Open-source etnaviv driver
●
Requires recent kernel (4.19), Mesa (18.2.2),
Wayland (1.16), GStreamer (1.14.4)
●
Usable WPEBackends, only working in Weston:
●
WPEBackend-RDK/wayland
●
WPEBackend-fdo (recommended)
●
Upstream v4l2 plugin from gst-plugins-good for
hardware decoding (and encoding) support
i.MX6 video decoding
●
CODA960 kernel driver
●
Mature integration with gst-plugins-good v4l2
plugin
●
On QuadPlus: H.264 1080P@30 handled but
sometimes drops frames: 720P recommended:
$ export WEBKIT_GST_MAX_AVC1_RESOLUTION=720P
i.MX8M video decoding
●
Experimental Hantro G1 kernel driver and integration
with gst-plugins-good
●
Development by Collabora and Pengutronix
●
Scheduled for the kernel 5.4
●
Status:
●
1080P@30 H.264 smooth playback
●
Should allow for up to 4K@30 with VP8 and H.264 and
4K@60 with VP9 and HEVC
●
HEVC and VP9 support: Work in progress
YUV video rendering
●
Current video sink in WebKit only handles RGBA
●
GStreamer video decoders often output YUV:
●
Semi-planar NV12 or planar I420 (gst-vaapi, vpxdec)
●
Interleaved YUYV (gst-v4l2)
●
One extra colorspace conversion (YUV→ RGBA)
required due to WebKit
●
On-going work in WebKit to directly handle
interleaved YUV formats, lowering the cost of the
colorspace conversions in the 3D GPU.
WPEWebKit, the WebKit port for embedded platforms (Linaro Connect San Diego 2019)

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Room 3 - 4 - Lê Quang Hiếu - How to be a cool dad: Leverage DIY Home Automati...
Room 3 - 4 - Lê Quang Hiếu - How to be a cool dad: Leverage DIY Home Automati...Room 3 - 4 - Lê Quang Hiếu - How to be a cool dad: Leverage DIY Home Automati...
Room 3 - 4 - Lê Quang Hiếu - How to be a cool dad: Leverage DIY Home Automati...
 
The architecture of SkySQL
The architecture of SkySQLThe architecture of SkySQL
The architecture of SkySQL
 
Declarative Clients in Spring
Declarative Clients in SpringDeclarative Clients in Spring
Declarative Clients in Spring
 
OpenAPI and gRPC Side by-Side
OpenAPI and gRPC Side by-SideOpenAPI and gRPC Side by-Side
OpenAPI and gRPC Side by-Side
 
Spring Native and Spring AOT
Spring Native and Spring AOTSpring Native and Spring AOT
Spring Native and Spring AOT
 
Node js for beginners
Node js for beginnersNode js for beginners
Node js for beginners
 
Installing and Configuring NGINX Open Source
Installing and Configuring NGINX Open SourceInstalling and Configuring NGINX Open Source
Installing and Configuring NGINX Open Source
 
Debugging Your Debugging Tools: What to do When Your Service Mesh Goes Down
Debugging Your Debugging Tools: What to do When Your Service Mesh Goes DownDebugging Your Debugging Tools: What to do When Your Service Mesh Goes Down
Debugging Your Debugging Tools: What to do When Your Service Mesh Goes Down
 
HAProxy as Egress Controller
HAProxy as Egress ControllerHAProxy as Egress Controller
HAProxy as Egress Controller
 
The automation challenge: Kubernetes Operators vs Helm Charts
The automation challenge: Kubernetes Operators vs Helm ChartsThe automation challenge: Kubernetes Operators vs Helm Charts
The automation challenge: Kubernetes Operators vs Helm Charts
 
Mikrotik API
Mikrotik APIMikrotik API
Mikrotik API
 
Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0Highlights of WSO2 API Manager 4.0.0
Highlights of WSO2 API Manager 4.0.0
 
REST in AEM by Roy Fielding
REST in AEM by Roy FieldingREST in AEM by Roy Fielding
REST in AEM by Roy Fielding
 
12 factor apps
12 factor apps12 factor apps
12 factor apps
 
OpenTelemetry 101 FTW
OpenTelemetry 101 FTWOpenTelemetry 101 FTW
OpenTelemetry 101 FTW
 
Infrastructure-as-Code with Pulumi - Better than all the others (like Ansible)?
Infrastructure-as-Code with Pulumi- Better than all the others (like Ansible)?Infrastructure-as-Code with Pulumi- Better than all the others (like Ansible)?
Infrastructure-as-Code with Pulumi - Better than all the others (like Ansible)?
 
ArgoCD Meetup PPT final.pdf
ArgoCD Meetup PPT final.pdfArgoCD Meetup PPT final.pdf
ArgoCD Meetup PPT final.pdf
 
Extending WSO2 API Manager's Key Management Capabilities - WSO2 API Manager C...
Extending WSO2 API Manager's Key Management Capabilities - WSO2 API Manager C...Extending WSO2 API Manager's Key Management Capabilities - WSO2 API Manager C...
Extending WSO2 API Manager's Key Management Capabilities - WSO2 API Manager C...
 
Google Cloud DNS
Google Cloud DNSGoogle Cloud DNS
Google Cloud DNS
 
Prometheus - Intro, CNCF, TSDB,PromQL,Grafana
Prometheus - Intro, CNCF, TSDB,PromQL,GrafanaPrometheus - Intro, CNCF, TSDB,PromQL,Grafana
Prometheus - Intro, CNCF, TSDB,PromQL,Grafana
 

Semelhante a WPEWebKit, the WebKit port for embedded platforms (Linaro Connect San Diego 2019)

Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKit
Igalia
 

Semelhante a WPEWebKit, the WebKit port for embedded platforms (Linaro Connect San Diego 2019) (20)

Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...
Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...
Inject the Web into your GStreamer pipeline with WPE using a GStreamer/WebKit...
 
WPE, a New WebKit Port Optimised for Embedded (IBC 2017)
WPE, a New WebKit Port Optimised for Embedded (IBC 2017)WPE, a New WebKit Port Optimised for Embedded (IBC 2017)
WPE, a New WebKit Port Optimised for Embedded (IBC 2017)
 
Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...
Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...
Multimedia support in WebKitGTK and WPE, current status and plans (GStreamer ...
 
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
A Browser for the Automotive: Introduction to WebKit for Wayland (Automotive ...
 
Update on the open source browser space (16th GENIVI AMM)
Update on the open source browser space (16th GENIVI AMM)Update on the open source browser space (16th GENIVI AMM)
Update on the open source browser space (16th GENIVI AMM)
 
WebKit and GStreamer
WebKit and GStreamerWebKit and GStreamer
WebKit and GStreamer
 
WebKit and GStreamer (GStreamer Conference 2013)
WebKit and GStreamer (GStreamer Conference 2013)WebKit and GStreamer (GStreamer Conference 2013)
WebKit and GStreamer (GStreamer Conference 2013)
 
WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...
WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...
WebKit-powered HTML overlays in your pipeline with GstWPE (GStreamer Conferen...
 
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKit
 
GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?GStreamer support in WebKit. what’s new?
GStreamer support in WebKit. what’s new?
 
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
GStreamer support in WebKit. What's new? (GStreamer Conference 2015)
 
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
HTML5 Apps on AGL Platform with the Web Application Manager (Automotive Grade...
 
Multimedia in WebKitGtk+, past/present/future
Multimedia in WebKitGtk+, past/present/futureMultimedia in WebKitGtk+, past/present/future
Multimedia in WebKitGtk+, past/present/future
 
WebKit Contributors Meeting 2022
WebKit Contributors Meeting 2022WebKit Contributors Meeting 2022
WebKit Contributors Meeting 2022
 
Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2Javascript as a target language - GWT KickOff - Part 2/2
Javascript as a target language - GWT KickOff - Part 2/2
 
Embedding Chromium into AGL demo platform with WAM
Embedding Chromium into AGL demo platform with WAMEmbedding Chromium into AGL demo platform with WAM
Embedding Chromium into AGL demo platform with WAM
 
JS digest. November 2017
JS digest. November 2017JS digest. November 2017
JS digest. November 2017
 
JS digest. October 2017
JS digest. October 2017 JS digest. October 2017
JS digest. October 2017
 
WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)
 

Mais de Igalia

Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPE
Igalia
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded Devices
Igalia
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JIT
Igalia
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Igalia
 

Mais de Igalia (20)

A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Building End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPEBuilding End-user Applications on Embedded Devices with WPE
Building End-user Applications on Embedded Devices with WPE
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Automated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded DevicesAutomated Testing for Web-based Systems on Embedded Devices
Automated Testing for Web-based Systems on Embedded Devices
 
Embedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to MaintenanceEmbedding WPE WebKit - from Bring-up to Maintenance
Embedding WPE WebKit - from Bring-up to Maintenance
 
Optimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdfOptimizing Scheduler for Linux Gaming.pdf
Optimizing Scheduler for Linux Gaming.pdf
 
Running JS via WASM faster with JIT
Running JS via WASM      faster with JITRunning JS via WASM      faster with JIT
Running JS via WASM faster with JIT
 
To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!To crash or not to crash: if you do, at least recover fast!
To crash or not to crash: if you do, at least recover fast!
 
Implementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamerImplementing a Vulkan Video Encoder From Mesa to GStreamer
Implementing a Vulkan Video Encoder From Mesa to GStreamer
 
8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa8 Years of Open Drivers, including the State of Vulkan in Mesa
8 Years of Open Drivers, including the State of Vulkan in Mesa
 
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por IgaliaIntroducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
Introducción a Mesa. Caso específico dos dispositivos Raspberry Pi por Igalia
 
2023 in Chimera Linux
2023 in Chimera                    Linux2023 in Chimera                    Linux
2023 in Chimera Linux
 
Building a Linux distro with LLVM
Building a Linux distro        with LLVMBuilding a Linux distro        with LLVM
Building a Linux distro with LLVM
 
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUsturnip: Update on Open Source Vulkan Driver for Adreno GPUs
turnip: Update on Open Source Vulkan Driver for Adreno GPUs
 
Graphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devicesGraphics stack updates for Raspberry Pi devices
Graphics stack updates for Raspberry Pi devices
 
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOSDelegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
Delegated Compositing - Utilizing Wayland Protocols for Chromium on ChromeOS
 
MessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the webMessageFormat: The future of i18n on the web
MessageFormat: The future of i18n on the web
 
Replacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shadersReplacing the geometry pipeline with mesh shaders
Replacing the geometry pipeline with mesh shaders
 
I'm not an AMD expert, but...
I'm not an AMD expert, but...I'm not an AMD expert, but...
I'm not an AMD expert, but...
 
Status of Vulkan on Raspberry
Status of Vulkan on RaspberryStatus of Vulkan on Raspberry
Status of Vulkan on Raspberry
 

Último

Último (20)

AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 

WPEWebKit, the WebKit port for embedded platforms (Linaro Connect San Diego 2019)

  • 1. Philippe Normand philn@igalia.com Linaro Connect San Diego, California 23rd-27th September 2019 WPEWebKit The WebKit port for Embedded
  • 2. Who am I? ● Fiddling with WebKit and GStreamer since 2009 ● WebKit committer and reviewer ● GStreamer committer ● Partner at Igalia ● Worker-owned coop, currently around 80 happy Igalians around the world ● Provides consulting services for various Free Software projects
  • 3. Talk Outline ● What is WPE ● Basic infrastructure for Media playback ● Adaptive streaming in HTML5: Media Source Extensions ● Media-capabilities ● Enabling WPE in your apps ● Hands-on: WPE integration with Yocto on I.MX6 & I.MX8M
  • 4. WPE, Web Platform for Embedded
  • 5. WPE, the basics ● Web-engine based on WebKit, tailored for a wide range embedded devices ● 6 months release cycle synchronized with WebKitGTK, including security updates ● No dependency on any UI toolkit library ● Pluggable view backends in charge of final rendering ● Wayland ● Android experiment ● Device-specific graphics drivers
  • 6. WPE backend for FDO ● Relies on wayland-egl ● Cross-process buffer sharing ● API for: ● EGLImages ● Or wl_resource objects ● Or Linux dma-buf information (already used internally) ● Combined with Mesa ● Works on desktop (packaged in Fedora 30, soon Debian) & embedded (Yocto & Buildroot)
  • 7. Platform support for media playback in WPE
  • 8. GStreamer ● A cross-platform framework for creating Multimedia applications ● Graph-based processing, example of a basic ogg/vorbis player:
  • 9. <audio> & <video> in WPE ● Playbin-based MediaPlayerPrivate implementation ● GL Video rendering with a custom appsink ● Custom GstAllocator using WebKit’s FastMalloc ● White list of supported containers and codecs ● Codec installer support effectively useless
  • 10. Adaptive streaming: MSE By Alicia Boya & Enrique Ocaña
  • 11. The MSE backend, TL;DR ● Chunks queued from JavaScript world to a SourceBuffer ● One GStreamer WebKit Append pipeline per SourceBuffer ● Demuxing and parsing of samples ● Samples stored at WebCore’s MSE layer ● Playback pipeline using a dedicated MediaPlayerPrivate implementation ● Playbin-based ● Custom source element (one source pad per SourceBuffer)
  • 12. MSE-related improvements in GStreamer ● Quite a few improvements in qtdemux for: ● Samples demuxing in push-mode ● Edit list support for push-mode ● Segment event handling ● Duration-related bug fixes ● => Around 15 patches so far! ● Matroskademux improvements ● Emit no-more-pads earlier (after parsing Tracks) (used to be sent while processing the first Cluster) ● Multi-Tracks parsing ● Fixes for WebM byte-stream format handling
  • 13. Current status & plans ● MSE enabled in GNOME-Web! ● MSE backend widely tested on embedded platforms (RPi, i-MX6, …) ● Infrastructure available for combination with EME ● Youtube (“desktop” and /tv) relying on MSE ● VP9 & opus ● H.264 & AAC also supported ● Playbin3 / Stream-collections support: DONE in trunk ● Multi-track SourceBuffer support: planned
  • 15. The (draft) spec ● https://wicg.github.io/media-capabilities/ ● Goal: provide hints to WebApps regarding the most optimal media encoders & decoders ● Input: description of the media format (contentType, width, height, framerate, …) ● Output: 3 booleans: – supported – smooth – powerEfficient
  • 16. GStreamer “probing” ● New “Hardware” element metadata Classifier (=> 1.16 ) ● Elements may implement probing for their NULL→READY state transition ● Possibly refine Caps templates to reflect what the hardware supports ● V4L2 decoders (AVC1 profile/level) (>= 1.18) ● More decoders ● Basic WebKit GStreamer MediaCapabilities backend working for decoders probing
  • 17. Enabling WPE in your apps Three examples
  • 18. Cog, the WPE launcher ● Native application ● Can work in fullscreen or window mode (no window manager decorations yet) ● Provides an API wrapping some of its features ● D-Bus client API for remoting ● Two rendering backends: ● One based on WPEBackend-FDO (mature) ● One based on libdrm, gbm, libinput (experimental)
  • 19. Qt5 QML ● WPEQt QML plugin upstream in WebKit since version 2.24 ● API mimicks QwebView => easy migration path! ● Depends on WPEBackend-FDO ● Works on Linux (Wayland and EGLFS) ● More details: https://base-art.net/Articles/introducing-wpeqt-a-wpe-api-for-qt5/
  • 20. GstWPE: HTML overlay in GStreamer pipelines ● GStreamer source element acting as a web-browser ● Outputs GStreamer buffers containing EGLImages wrapped in GstGLMemory’s ● Allows for zero-copy composition with other GL backed video streams ● More details: https://bit.ly/2kmee2p
  • 21. WPE/GStreamer on i.MX6 QuadPlus & i.MX8M with Yocto
  • 23. Open-source etnaviv driver ● Requires recent kernel (4.19), Mesa (18.2.2), Wayland (1.16), GStreamer (1.14.4) ● Usable WPEBackends, only working in Weston: ● WPEBackend-RDK/wayland ● WPEBackend-fdo (recommended) ● Upstream v4l2 plugin from gst-plugins-good for hardware decoding (and encoding) support
  • 24. i.MX6 video decoding ● CODA960 kernel driver ● Mature integration with gst-plugins-good v4l2 plugin ● On QuadPlus: H.264 1080P@30 handled but sometimes drops frames: 720P recommended: $ export WEBKIT_GST_MAX_AVC1_RESOLUTION=720P
  • 25. i.MX8M video decoding ● Experimental Hantro G1 kernel driver and integration with gst-plugins-good ● Development by Collabora and Pengutronix ● Scheduled for the kernel 5.4 ● Status: ● 1080P@30 H.264 smooth playback ● Should allow for up to 4K@30 with VP8 and H.264 and 4K@60 with VP9 and HEVC ● HEVC and VP9 support: Work in progress
  • 26. YUV video rendering ● Current video sink in WebKit only handles RGBA ● GStreamer video decoders often output YUV: ● Semi-planar NV12 or planar I420 (gst-vaapi, vpxdec) ● Interleaved YUYV (gst-v4l2) ● One extra colorspace conversion (YUV→ RGBA) required due to WebKit ● On-going work in WebKit to directly handle interleaved YUV formats, lowering the cost of the colorspace conversions in the 3D GPU.