Bonjour,
J'ai actuellement une instance Nextcloud qui contient toutes mes musiques. Elles sont rangées dans différents dossiers. Sur mon app web, une fois sélectionner le dossier source, cela ramène vers un player qui contient la liste des musiques.
Si je clique sur une musique elle devra se lire dans le player <audio></audio> classique. J'avais déjà fais ce système mais en utilisant des fichiers mp3 rangés dans un dossier à coté du server.js Cela marche très bien.
Seulement, avec Webdav, quand je choisis une musique, cela ne fonctionne pas. Une erreur est retournée :
Voici le lien du paquet que j'ai utiliser pour communiquer avec le webdav côté serveur vers mon Nextcloud : https://www.npmjs.com/package/webdav.
Code : Sélectionner tout - Visualiser dans une fenêtre à part The media resource indicated by the src attribute or assigned media provider object was not suitable.
Code côté client pour récupérer la musique et la lancer :
Côté serveur, route qui récupère le path vers la musique dans le webdav :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function playMusic(id) { player[0].src = 'music' + musicsList[id]; player[0].play(); };
Le getFileContents return un ArrayBuffer mais cela ne semble pas lisible avec le player[0].src.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 // Route router.get('/music/:id*', function (req, res) { let config; try { config = db.getData('/config'); } catch (err) { return res.redirect('/settings'); } musics.read(config.webdav.username, config.webdav.password, config.webdav.url, req.params.id, (result) => { return res.send(result); }); }); // musics.read() const webdav = require('webdav'); module.exports = { read: function (username, password, url, path, result) { let client = webdav( url, username, password ); client .getFileContents(path) .then((data) => { return result(data); }) .catch(() => { return result(false); }); } };
J'ai imaginé plusieurs solution, comme créer un fichier temporaire mp3 puis le rendre lisible au player grâce au paquet https://www.npmjs.com/package/mediaserver puis faire un :
Dans la route /music/id*
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mediaserver.pipe(req, res, pathToMp3);
(méthode que j'utilisais avec les fichiers mp3 classique stocké en local) mais cela ne fonctionne pas avec le webdav.
Il y a aussi des méthodes createReadStream et createWriteStream avec le paquet webdav mais j'avoue que je bloque sur l'utilisation avec un player classique <audio></audio>
Si jamais il y a des connaisseurs en Buffer, Stream etc... je suis preneur, merci d'avances !
Partager