Soms hebben goede dingen saaie namen.
Een goed voorbeeld is de Unified Media Pipeline, kortweg UMP .
Dit klinkt misschien als een sinistere richtlijn uit het Sovjettijdperk, maar in feite is het een belangrijke stap in de richting van consistente cross-platform audio- en videolevering. Chrome op Android gebruikt nu dezelfde mediastack als Chrome op de desktop, in plaats van te vertrouwen op de onderliggende platformimplementatie.
Met UMP kunt u veel doen:
- Cache audio en video met serviceworkers, omdat de medialevering nu rechtstreeks in Chrome wordt geïmplementeerd in plaats van dat deze wordt doorgegeven aan de Android-mediastack.
- Gebruik blob-URL's voor audio- en video-elementen.
- Stel
playbackRate
in voor audio en video. - MediaStreams doorgeven tussen webaudio en MediaRecorder.
- Ontwikkel en onderhoud media-apps eenvoudiger op verschillende apparaten: media werkt hetzelfde op desktop en Android.
De implementatie van UMP vergde veel technisch werk:
- Een nieuwe cachelaag voor verbeterde energieprestaties.
- Er wordt een nieuwe MediaCodec-gebaseerde videodecoder bijgewerkt die wordt gehost in het GPU-proces van Chrome.
- Veel testen en iteraties op verschillende apparaten.
Hier is een demo van videocaching met een service worker :

Het cachen van het videobestand en de videoposterafbeelding is net zo eenvoudig als het toevoegen van hun paden aan de lijst met URL's die vooraf moeten worden opgehaald:
<video controls poster="static/poster.jpg">
<source src="static/video.webm" type="video/webm" />
<p>This browser does not support the video element.</p>
</video>
var urlsToPrefetch = [
'static/video.webm', 'static/poster.jpg',
];
Het onvermogen om playbackRate
op Android te wijzigen is al lang een bug . UMP lost dit op. Voor de demo op simpl.info/video/playbackrate is playbackRate
ingesteld op 2. Probeer het eens!

UMP maakt blob-URL's voor media-elementen mogelijk. Dit betekent dat u nu bijvoorbeeld een video kunt afspelen die is opgenomen met de MediaRecorder API in een video-element op Android:

Hier is de relevante code:
var recordedBlobs = [];
mediaRecorder.ondataavailable = function(event) {
if (event.data && event.data.size > 0) {
recordedBlobs.push(event.data);
}
};
function play() {
var superBuffer = new Blob(recordedBlobs, {type: 'video/webm'});
recordedVideo.src = window.URL.createObjectURL(superBuffer);
}
Voor de demo op simpl.info/video/offline wordt video opgeslagen met behulp van de File API's en vervolgens afgespeeld met behulp van een Blob-URL:

function writeToFile(fileEntry, blob) {
fileEntry.createWriter(function(fileWriter) {
fileWriter.onwriteend = function() {
readFromFile(fileEntry.fullPath);
};
fileWriter.onerror = function(e) {
log('Write failed: ' + e.toString());
};
fileWriter.write(blob);
}, handleError);
}
function readFromFile(fullPath) {
window.fileSystem.root.getFile(fullPath, {}, function(fileEntry) {
fileEntry.file(function(file) {
var reader = new FileReader();
reader.onloadend = function() {
video.src = URL.createObjectURL(new Blob([this.result]));
};
reader.readAsArrayBuffer(file);
}, handleError);
}, handleError);
}
De Unified Media Pipeline is ook ingeschakeld voor Media Source Extensions (MSE) en Encrypted Media Extensions (EME) .
Dit is een nieuwe stap in de richting van het verenigen van Chrome voor mobiel en desktop. Je hoeft je code niet aan te passen, maar het bouwen van een consistente media-ervaring op zowel desktop als mobiel zou nu eenvoudiger moeten zijn, omdat de mediastack op alle platforms hetzelfde is. Debuggen met Chrome DevTools? Mobiele emulatie maakt nu gebruik van de 'echte' audio- en videostack.
Als u problemen ervaart als gevolg van de Unified Media Pipeline, meld dit dan in de implementatiebug-sectie of via new.crbug.com .
Demo's
- Cachevideo met een servicemedewerker
- Media
playbackRate
- MediaRecorder: afspelen met behulp van een blob-URL
- Offline video geïmplementeerd met de File API's
Relevante bugs
Er zijn een aantal bugs die invloed hebben op <video>
, service workers en de Cache Storage API:
-
<video>
activeert een mode: cors-aanvraag en accepteert geen ondoorzichtige service worker-respons - Zoeken werkt niet in video's die worden weergegeven door de cache van de service worker
Browserondersteuning
- Standaard ingeschakeld in Chrome 52 en hoger.