2016-07-21 6 views
0

Ich versuche ein Audio-Visualisierungsprojekt auf Codepen zu erstellen. Ich habe versucht, die Audiodatei mit OneDrive zu hosten, aber ich erhielt CORS Restriktionsfehler. Jetzt bin ich einen Schritt weiter gegangen und habe meinen eigenen Webserver (http://publicwebserverdemo.hopto.org) erstellt, in dem ich die Audiodatei gehostet habe (http://publicwebserverdemo.hopto.org/publicAudio/audio.mp3). Ich habe mehrere Anweisungen über das Internet ausprobiert, um CORS mit der .htaccess-Datei zu implementieren, aber ich hatte damit kein Glück. Wie kann ich CORS Zugriff auf Codepen für die Audiodatei gewähren?Wie kann ich den CORS-Zugriff für eine Audiodatei auf meinem Linux-Webserver mit apache2 einstellen?

Ich benutze Apache (mit dem ganzen LAMP-Paket) auf Ubuntu Mate 14.04.

Hier ist eine Replikation des Beispiel-Codepen (ich nahm den Code zum Testen von CORS von einem Ort im Internet).

Ihre Webinformationen Konsole öffnen und den CORS Hinweis Hinweis:

MediaElementAudioSource outputs zeroes due to CORS access restrictions for http://publicwebserverdemo.hopto.org/publicAudio/audio.mp3 

Vielen Dank für Ihre Hilfe :)

// Create a new instance of an audio object and adjust some of its properties 
 
var audio = new Audio(); 
 
audio.src = 'http://publicwebserverdemo.hopto.org/publicAudio/audio.mp3'; 
 
audio.controls = true; 
 
audio.loop = true; 
 
audio.autoplay = true; 
 
// Establish all variables that your Analyser will use 
 
var canvas, ctx, source, context, analyser, fbc_array, bars, bar_x, bar_width, bar_height; 
 
// Initialize the MP3 player after the page loads all of its HTML into the window 
 
window.addEventListener("load", initMp3Player, false); 
 
function initMp3Player(){ 
 
\t document.getElementById('audio_box').appendChild(audio); 
 
\t context = new webkitAudioContext(); // AudioContext object instance 
 
\t analyser = context.createAnalyser(); // AnalyserNode method 
 
\t canvas = document.getElementById('analyser_render'); 
 
\t ctx = canvas.getContext('2d'); 
 
\t // Re-route audio playback into the processing graph of the AudioContext 
 
\t source = context.createMediaElementSource(audio); 
 
\t source.connect(analyser); 
 
\t analyser.connect(context.destination); 
 
\t frameLooper(); 
 
} 
 
// frameLooper() animates any style of graphics you wish to the audio frequency 
 
// Looping at the default frame rate that the browser provides(approx. 60 FPS) 
 
function frameLooper(){ 
 
\t window.webkitRequestAnimationFrame(frameLooper); 
 
\t fbc_array = new Uint8Array(analyser.frequencyBinCount); 
 
\t analyser.getByteFrequencyData(fbc_array); 
 
\t ctx.clearRect(0, 0, canvas.width, canvas.height); // Clear the canvas 
 
\t ctx.fillStyle = '#00CCFF'; // Color of the bars 
 
\t bars = 100; 
 
\t for (var i = 0; i < bars; i++) { 
 
\t \t bar_x = i * 3; 
 
\t \t bar_width = 2; 
 
\t \t bar_height = -(fbc_array[i]/2); 
 
\t \t // fillRect(x, y, width, height) // Explanation of the parameters below 
 
\t \t ctx.fillRect(bar_x, canvas.height, bar_width, bar_height); 
 
\t } 
 
}
div#mp3_player{ width:500px; height:60px; background:#000; padding:5px; margin:50px auto; } 
 
div#mp3_player > div > audio{ width:500px; background:#000; float:left; } 
 
div#mp3_player > canvas{ width:500px; height:30px; background:#002D3C; float:left; }
<div id="mp3_player"> 
 
    <div id="audio_box"></div> 
 
    <canvas id="analyser_render"></canvas> 
 
</div>

+0

[Dies] (http://codepen.io/anon/pen/bZvKZw) scheint gut zu funktionieren, keine CORS-Einschränkung. – DavidDomain

+0

Ja, aber wenn ich versuche, den Audioanalysator zu verwenden, um die Frequenz/Dezibel-Information zu erhalten, bekomme ich den CORS-Fehler; 'MediaElementAudioSource gibt Nullen aufgrund von CORS-Zugriffsbeschränkungen für http: // publicwebserverdemo.hopto.org/publicAudio/audio.mp3' aus. Der Ton kann geladen und "gut" angehört werden. Das Problem ist, wenn ich den Audioanalysator verwende, um Audioinformationen zu erhalten, bekomme ich den CORS-Fehler. – www139

+1

Normalerweise fügen Sie die Direktive [Header hinzufügen] (http://stackoverflow.com/a/11691776/330987) mit der URL hinzu, die Sie zulassen möchten. –

Antwort

0

ich, was schließlich herausgefunden, nachdem zu tun Stunden und Stunden der Forschung und des Experimentierens. Zum Zeitpunkt des Verfassens dieses Artikels gibt es sehr wenig Dokumentation, die online zur Verfügung steht und zeigt, wie dies zu tun ist. Ich hoffe, die Leute werden das hilfreich finden.

Legendes CORS:

CORS ist ein Akronym für Kreuz Origin Resoruce Freigabe. CORS ist ein neuer Standard für das Teilen/Zugreifen auf Informationen zwischen verschiedenen Domänen. CORS ist im Grunde eine Methode, Server-Header zu verwenden, um dem Browser mitzuteilen, ob er auf eine bestimmte Datei auf einem anderen Server zugreifen oder damit interagieren darf. Während Sie die meisten Dinge laden können, ohne sich Gedanken über CORS machen zu müssen (wie Bilder, Audio, Videos und sogar andere Webseiten), erfordert die Interaktion mit diesen Elementen eine spezielle Erlaubnis vom Server. In meinem Fall habe ich versucht, Frequenzen aus einer Audiodatei auf einem anderen Server zu lesen. In diesem Fall habe ich versucht, auf Informationen zuzugreifen, die eine Autorisierung von speziellen Headern auf dem Server erfordern.

Browser-Unterstützung ist sehr gut, aber, wenn Sie älteren Browser unterstützen, Sie Unterstützung Tabellen hier, um sehen möchten (http://caniuse.com/#search=cors)

Was ich tat:

die Verwendung von .htaccess Aktiviert (Ich denke, Sie können das gleiche mit Apache2.conf oder 000-default.conf erreichen, aber .htaccess-Dateien sind viel einfacher zu bearbeiten und zu pflegen). Diese Dateien werden verwendet, um Header und Einstellungen für Apache festzulegen. Ich habe die Verwendung von .htaccess-Dateien aktiviert, indem ich zu/etc/apache2/gehe und apache2.conf bearbeite. Stellen Sie sicher, dass Ihr Eintrag entspricht der folgende:

<Directory /var/www/> 
     Options Indexes FollowSymLinks 
     AllowOverride All 
     Require all granted 
</Directory> 

ich die Header in meiner .htaccess-Datei gesetzt Zugriff von Codepen zu ermöglichen. Erstellen Sie eine .htaccess-Datei im selben Verzeichnis wie die Datei, die Sie freigeben möchten. Sie möchten nur teilen, was Sie tun müssen, oder Sie könnten ein Sicherheitsrisiko schaffen. Geben Sie dies in Ihre .htaccess-Datei ein:

Header set Access-Control-Allow-Origin: "http://websiteWantingToAccessYourFile.com".

Speichern Sie Ihre Datei. Starten Sie Apache mit diesem Befehl sudo service apache2 restart neu.Geben Sie Ihr Passwort ein, wenn Sie dazu aufgefordert werden. Mit dem Audio fügte ich das crossorigin="anonymous" Attribut hinzu. Sie können mehr über CORS Einstellungen (Crossorigin) hier lesen (https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) Ich stelle mir vor, Sie können dies mit Ajax und Xhr-Anforderungen festlegen. Verschiedene Versionen von Apache können unterschiedliche Dateinamen oder Standards haben. Überprüfen Sie, ob dies für Ihre Version korrekt ist. Ich betreibe Apache 2.4.18 auf meinem Ubuntu-Server.

Bitte sagen Sie mir, ob dies verbessert werden kann. Ich habe viel Zeit damit verbracht, dies zu verstehen, aber ich bin kein Experte. Veröffentlichen Sie Ihre Vorschläge in den Kommentaren. :)

Verwandte Themen