Bonjour
Je suis entraine de développer un site de musique. J'utilise le plugin
http://www.wavesurfer.fm/ et l'api de Soundcloud pour récupéré mes fichiers mp3 de mes tunes.
Mon script fonctione très bien. Quand je testes mon script sur Safari plus rien ne fonctione. Dans ma console il y a une belle grosse erreur de ce type qui s'affiche :
Failed to load resource: the server responded with a status of 404 (Not Found)
Failed to load resource: Cannot make any requests from null.
nnot make any requests from null.
Voici mon script :
function spotlightplayer(obj_config,playing_param) {
var apiUrl = 'https://api.soundcloud.com/tracks/123/stream?client_id=XXXXXX&secret_token=' + obj_config.abecd;
wavesurfer.on('ready', function () {
jQuery('#spotlightplayer__play').hide();
jQuery('#spotlightplayer__pause').show();
wavesurfer.play();
});
wavesurfer.on('finish',function(){
jQuery('#spotlightplayer__play').show();
jQuery('#spotlightplayer__pause').hide();
wavesurfer.play();
});
wavesurfer.load(apiUrl);
}
Le plugin utilise le webaudio qui disponible pour presque tout les naviagteur :
http://caniuse.com/#feat=audio-api
Je ne comprend pas pour l'api de Soundcloud me bloque.
Merci de votre aide.
Ne dois-tu pas instancier ton objet avant de l'utiliser ?
var wavesurfer = Object.create(WaveSurfer);
var wavesurfer = Object.create(WaveSurfer);
je les fait en début de script.
Le problème est de là :
wavesurfer.load(stream.url);
Bonjour,
Est-il possible de voir le problème en ligne quelque part?
Le problème se produit-il sur safari sur windows également ?
Dans le cas contraire, n'ayant pas de mac, serait-il envisageable d'analyser le problème via un partage d'écran ?
Le message est clair, le serveur répond 404 not found
essaye avec une autre url.
Comme c'est de l'https, c'est peut être un pb de certificat lié à Safari
En cherchant un peu, il semble que ce soit un pb d'ajax cross domain bloqué par Safari
Safari implémente mal le protocole CORS qui permet de faire un appel cross domain
Peut être lié à une version trop vieille de Safari
voir lien http://stackoverflow.com/questions/25820372/soundcloud-resolve-in-safari
function spotlightplayer(obj_config,playing_param) {
var apiUrl = 'https://api.soundcloud.com/tracks/' + obj_config.track_id + '/stream?client_id=' + streamClient_id +'&secret_token=' + obj_config.abecd;
wavesurfer.on('ready', function () {
jQuery('#spotlightplayer__play').hide();
jQuery('#spotlightplayer__pause').show();
wavesurfer.play();
});
wavesurfer.on('finish',function(){
jQuery('#spotlightplayer__play').show();
jQuery('#spotlightplayer__pause').hide();
wavesurfer.play();
});
wavesurfer.load(apiUrl);
}
Voici les erreurs que Safari me donne : http://prntscr.com/6cevqb
C'est juste sur Safari que ça afficher les erreur.
A oui sur google chrome j'ai des foit cette erreur :
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Bonjour c'est un problème de cross domain
Tu ne peux pas procéder en ajax. Et d'ailleurs mettre ça en js ==> https://api.soundcloud.com/tracks/' + obj_config.track_id + '/stream?client_id=' + streamClient_id +'&secret_token=' + obj_config.abecd;
rend le secret_ token accessible à toutes les personnes qui iront sur ta page...
Tu peux changer ton implémentation en appelant l'api depuis ton serveur (attention à la partie https... ) et appeler ton serveur en ajax depuis le navigateur.
En gros :
comment je peut passer mon scropt a mon serveur et qui envoit la requete a soundcloud. ok je siis dans une impasse. Avec une fonction php qui s'occupe de la connection entre serveur et api
En effet , après relecture je n'avais pas évaluer l'ensemble du problème...
J'ai peut être une idée mais avant toute chose :
wavesurfer n'attends pas la fin du téléchargement de la musique pour débuter l'écoute?
Es-tu root sur ton serveur?
J'ai une idée Je pourrais faire une fonction php qui s'occupe de l'échange entre mon serveur et l'api soundcloud et qu"en ajax j'appelle cette fonction. Une foit que j'ai le ok de l'api soundcloud je charge mon objet wavesurfer.
Si tu es root sur ta machine cible (serveur dédié, vps) , j'opterais pour la mise en place d'un proxy
J'utilise une machine vagrant pour mes teste et mon serveur en production est multiliser
Je ne sais pas si tu pourras mettre en place un proxy dessus....
La solution de rapatrier le fichier soundcloud sur le serveur pour ensuite le renvoyer côte js existe mais met clairement en risque les performances..
Tu parle de cette solution :
La solution de rapatrier le fichier soundcloud sur le serveur pour ensuite le renvoyer côte js existe mais met clairement en risque les performances..
Je ne comprend pas de ce que tu veux dire par rapatrier le fichier.