SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
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)

Contenu connexe

Similaire à 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
 

Similaire à 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)
 

Plus 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
 

Plus 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
 

Dernier

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Dernier (20)

Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
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
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 

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.