= Details of the QtWebKit HTML5 media element implementation =
= QtMultimediaKit (Qt Mobility) =
We're currently working on the QtMultimediaKit integration. The QtMultimediaKit API from Qt Mobility can fill many of the holes in the existing Phonon integration.
Files: MediaPlayerPrivateQt.cpp, MediaPlayerPrivateQt.h
== Background: QtMultimedia ==
QtMultimedia provides a collection of cross platform media playback APIs. These APIs are wrapped around various media services. For example, on Windows the default is a DirectShow service, on Mac the default is a QuickTime service, and on Linux the default is a gstreamer service. Enterprising users can also write their own media services.
Important Note: Not all of these media services will support all of the features specified in the API. We continue to work hard to support as many features as possible, but ultimately some features will not be able to be supported on all services/platforms. Generally in these cases we will attempt to gracefully degrade the service.
API's used in the webkit integration with less than universal support:
* QMediaPlayer::supportedMimeTypes() (Will often return an empty list)
* QMediaPlayerControl::availablePlaybackRanges() (Will often return a single interval, 0..duration, rather than buffered ranges)
* QtMultimedia::Size meta data and "bytes-loaded" extended meta data (Will often not be emitted)
* QMediaPlayer::setMedia() with a QNetworkRequest (Will often take the URL and ignore the rest of the information)
== Rendering ==
For the most part, the QtMultimedia integration is a thin wrapper around QMediaPlayer and QGraphicsVideoItem, which are high level classes within QtMultimedia. QGraphicsVideoItem uses software rendering, using the same QPainter which renders the web view. This means that webkit can safely draw on top of the video (such a controls, overlapping elements, etc).
This said, QGraphicsVideoItem is not entirely unaccelerated. For the GL paint engine we do scaling, color space conversion and blt in hardware. On the N900, we display XVideo in a window, then composite the web view above using a hardware chroma key overlay. On the desktop, unaccelerated performance is reasonable. Your mileage will vary depending on graphics engine and operating system. OpenGL is fast for those places where it is supported. The raster graphics system is also pretty reasonable. X/11 is unfortunately quite poor. There are also plans to introduce other acceleration techniques in to QGraphicsVideoItem in the future.
Given the use of QGraphicsVideoItem, it was also very easy to support the QGraphicsView-based accelerated compositing code path, so that's supported too.
== Loading ==
This backend attempts to pass all of the information required by the backend to retrieve a media source. For http[s] sources, this includes cookies and a referer header.
As previously stated, this is not yet universally supported. The best support for HTTP loading is currently with the QuickTime media service.
This allows us to support services such as youtube/html5 and vimeo/html5.
== Repository ==
You can get my clone of WebKit, with the latest QtMultimedia integration at: http://gitorious.org/~nickyoung/webkit/nickyoungs-webkit
There is also an experimental branch on this repository, which contains support for fullscreen mode, as well as performance measuring tools.
= Phonon (