[Cozy-stack] 206 Partial Content

bug

#1

Bonjour à tous,

Je suis entrain d’essayer d’implémenter une plateforme de streaming video dans l’environnement Cozy.

Je rencontre pour l’instant un problème au moment de la récupération du fichier source vidéo par le client sur le server.

J’utilise une librairie Javascript qui supporte le standard MPEG DASH (Dynamic Adaptative Streaming over HTTP). J’ai essayé avec le player de référence du DASH Industry Forum dash.js ainsi qu’avec le player de Google shaka-player.

Le fonctionnement grossier est le suivant : parmi toutes les sources disponibles d’une video source, le player client sélectionne les formats et codecs compatibles avec le navigateur, ainsi que la résolution la plus élevée pouvant être utilisée en fonction de la bande passante disponible (en gros c’est comme Youtube ou Netflix)

De plus le client télécharge la vidéo par “petits bouts” en demandant au server la vidéo avec un Header Range demandant une partie spécifique du fichier seulement.

Voici un exemple de requête GET et de réponse avec un server Apache de test :

Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: */*
Accept-Language: fr,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/
range: bytes=0-325
origin: http://localhost:8080
DNT: 1
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

On voit que le client demande les octets 0 à 325 du fichier.
Et voilà la réponse de mon server Apache :

HTTP/1.1 206 Partial Content
Date: Sat, 18 Aug 2018 19:29:36 GMT
Server: Apache/2.4.34 (Unix)
Last-Modified: Sun, 12 Aug 2018 13:45:25 GMT
ETag: "78085b-5733d305aa740"
Accept-Ranges: bytes
Content-Length: 326
Content-Range: bytes 0-325/7866459
Keep-Alive: timeout=5, max=85
Connection: Keep-Alive
Content-Type: video/webm

Le code de la réponse est 206 Partial Content et le server ne renvoie pas la vidéo en entier mais que le range demandé, comme attendu.

Cependant je n’ai pas le même comportement avec cozy-stack comme server. La même implémentation en utilisant une app vanilla javascript créée grâce à create-cozy-app me donne le dialogue suivant (je précise que j’ai mis la video source dans un dossier assets aux côtés de l’index.html et que j’ai ajouté une route dans le manifest.webapp pour y accéder) :

Host: cozyvideo.cozy.tools:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0
Accept: */*
Accept-Language: fr,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://cozyvideo.cozy.tools:8080/
range: bytes=0-325
origin: http://cozyvideo.cozy.tools:8080
Cookie: cozysessid=AAAAAFt4fLYwODJjODI3MjdlYTYyMmIwZGNkNzg0NDAxYzAwNjRmMpF-iULYhaaaLpc_8g8dF_y5Q83jrl4-N45j7DMGC5Gl
DNT: 1
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

Réponse :

HTTP/1.1 200 OK
Content-Length: 7866459
Content-Security-Policy: default-src 'self' http://cozy.tools:8080 ws://cozy.tools:8080;script-src https://piwik.cozycloud.cc/ 'self' http://cozy.tools:8080 ws://cozy.tools:8080;frame-src http://*.cozy.tools:8080 'self' http://cozy.tools:8080 ws://cozy.tools:8080;connect-src https://piwik.cozycloud.cc/ 'self' http://cozy.tools:8080 ws://cozy.tools:8080;font-src data: 'self' http://cozy.tools:8080 ws://cozy.tools:8080;img-src data: blob: https://piwik.cozycloud.cc/ https://*.tile.openstreetmap.org/ https://*.tile.osm.org/ https://*.tiles.mapbox.com/ https://api.mapbox.com/ 'self' http://cozy.tools:8080 ws://cozy.tools:8080;style-src 'unsafe-inline' 'self' http://cozy.tools:8080 ws://cozy.tools:8080;
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Date: Sat, 18 Aug 2018 20:08:24 GMT
Content-Type: video/webm

On voit que la cozy-stack répond avec un code 200 OK et non 206 Partial Content : il renvoie le fichier complet ce qui n’est pas le comportement attendu. Du coup le navigateur me renvoie une erreur Quota exceeded et n’arrive pas à remplir le buffer vidéo.

Est-ce une limitation de cozy-stack de ne pas pouvoir envoyer le contenu partiel d’un fichier ?

Merci d’avance.


#2

Bonsoir @asuuga,

Bienvenue à bord :smile:

Et merci pour votre idée que me semble excellente !

J’avoue ne pas connaître suffisamment les arcanes de cozy-stack pour savoir si celle-ci supporte l’envoi d’un fichier par morceau, mais j’ai interpellé nos experts qui devraient vous répondre rapidement.


#3

Merci pour votre réponse rapide :slight_smile:

J’attendrai la réponse des experts alors !


#4

Bonjour,

il me semble que Cozy-stack sait gérer les requêtes pour des fichiers avec un range, mais uniquement pour les fichiers utilisateurs stockés dans le VFS (doc). Pour les fichiers provenant des applications, ça n’a pas encore été mis en place.


#5

Merci @nono.
C’est vrai que je n’avais pas voulu m’embêter avec le VFS pour faire un premier test.
Mais bon je vais devoir m’y mettre !