// Build 2014 / Building video and audio streaming apps
Une belle session encore une fois, présentant les différentes solutions permettant de streamer des flux Audio / Videos sur la plateforme Windows au sens large (Windows 8.1, Windows Phone 8.1, et XBox One).
En plus du progressive Http Download (consistant simplement à utiliser un tag video ou un MediaElement avec une url vers une vidéo sur un serveur http), Windows Media Foundation – la stack gérant la lecture multimedia que l’on utilise un MediaElement ou un tag audio/video html – propose 3 possibilités de streamer du contenu Multimedia.
W3C Media Source Extension
Cette solution est spécifique à HTML 5, et elle permet de faire du Smooth Streaming cross platform. Le principe est simplement d’hoster sur un serveur des vidéos dans un format MP4 fragmenté (en gros un film sera composé de plusieurs séquences de fragments mp4 à des bitrates différents), et côté client, en Javascript on est capable de choisir à quelle cadence télécharger ces segments, et en fonction de la bande passante et des performances du device, de passer d’un bitrate à un autre. Cette technique est déjà en place sur Youtube et Netflix. Il existe aussi une implémentation de référence cross browser appelée DASH.js, fonctionnant parfaitement sous IE11 (ou dans des applications natives html5).
C’est la solution à privilégier dans les cas où l’on veut à partir du même serveur, fournir du contenu pour des devices différents, ou même au travers d’un site Web.
Media Stream Source WinRT
Une Media Stream Source est un composant cette fois-ci spécifique à la plateforme WinRT utilisable sous Windows 8.1 et Windows Phone 8.1, utilisable en html5 et en Xaml (sur XBox, ca viendra mais pour le moment c’est pas encore là). Le principe ici, est de permettre à l’application de gérer la manière dont les samples sont extrait d’un stream, et de passer ces samples (compressés ou non) à la stack Media Foundation. Cela permet des scénarios plus avancées, comme l’utilisation d’une logique d’encryption des streams “custom”, ou encore de changer dynamiquement le format des samples du stream. Cela ouvre la porte par exemple, à de l’inclusion de publicité au sein d’une vidéo sans coupure, même si la vidéo et la publicité ne sont pas encodés de la même manière.
Custom Media ByteStream
Il s’agit là de la solution la plus bas niveau, ou l’on va pouvoir carrément associer à un mime/type / extension de fichier, ou à un schema d’url donné, un ByteStream handler qui va exposer une Media Stream Source à Media Foundation. C’est comme ca que fonctionne le SDK Smooth Streaming par exemple. C’est aussi ce que l’on a mis en place pour le streaming live de la caméra de l’AR Drone dans le sdk pour Windows 8.0 : après l’initialisation du sdk, on utilise simplement un MediaElement pointant vers l’adresse ardrone://192.168.0.1 et notre handler est invoqué !
L’inconvénient des Custom Media Extensions, c’est que pour les implémenter il faut avoir une bonne connaissance de COM, des concepts bas-niveau de Media Foundation, et de C++… On essaiera donc de privilégier les Media Stream Source WinRT (qui sont apparues avec Windows 8.1).
Background Audio
La stack Media Foundation a été quasi-entièrement uniformisées sur les plateformes Microsoft, excepté pour le moment pour ce qui est du background Audio. Ainsi, sur Windows 8.1, une application ayant un flux Background Audio actif ne sera simplement jamais suspendue, alors que sous Windows Phone 8.1, pour jouer du background audio, il faut créer un Background Audio agent qui s’exécutera dans un process séparé. En dehors de cela, les APIs sont identiques (y compris en ce qui concerne l’interface avec l’interface MediaTransport permettant de piloter l’application audio, même quand celle-ci est en arrière plan).
Commentaires