MediaElementAudioSource Ausgänge Nullen wegen CORS Zugriffsbeschränkungen
<script>
//Create a new instance of an audio object and adjust some of its properties
var audio = new Audio();
audio.src = 'http://subdomain.domain.org:port/;stream/1';
audio.controls = true;
audio.loop = true;
audio.autoplay = true;
audio.crossorigin="anonymous";
//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(){
document.getElementById('audio_box').appendChild(audio);
context = new (window.AudioContext || window.webkitAudioContext)(); //AudioContext object instance //AudioContext object instance
analyser = context.createAnalyser(); //AnalyserNode method
canvas = document.getElementById('analyser_render');
ctx = canvas.getContext('2d');
//Re-route audio playback into the processing graph of the AudioContext
source = context.createMediaElementSource(audio);
source.crossOrigin = 'anonymous'
source.connect(analyser);
analyser.connect(context.destination);
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(){
(requestAnimationFrame || webkitRequestAnimationFrame)(frameLooper);
fbc_array = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(fbc_array);//get frequency
ctx.clearRect(0, 0, canvas.width, canvas.height); //Clear the canvas
ctx.fillStyle = '#00CCFF'; //Color of the bars
bars = 100;
for (var i = 0; i < bars; i++) {
bar_x = i * 3;
bar_width = 2;
bar_height = -(fbc_array[i] / 2);
// fillRect( x, y, width, height ) //Explanation of the parameters below
ctx.fillRect(bar_x, canvas.height, bar_width, bar_height);
}
}
</script>
Audio-API gibt MediaElementAudioSource Ausgänge Nullen wegen CORS Zugriffsbeschränkungen weil ich versuche zu spielen, einen SHOUTcast-URL. Ich weiß nicht, was zu tun ist; ich habe versucht, alle Lösungen auf dem internet, aber nichts funktionierte. Jede Hilfe wird geschätzt.
Die URL funktioniert perfekt mit dem audio-element, also nicht über die URL; ich habe sogar versucht, so etwas wie http://subdomain.domain.org:port/file.mp3
. Und ich fand im internet Leute mit Icecast, die .ogg
habe das gleiche problem. Wie man dieses Problem beheben?
- Ich bin mit diesem problem mit codepen.io mit einem Stift, ich bin mit dem Experimentieren. Irgendwelche Vorschläge?
- sorry, ich wollte upvote und ich klickte die Schaltfläche unten, und SO wird nicht lassen Sie mich ändern..
Du musst angemeldet sein, um einen Kommentar abzugeben.
In meiner Antwort gehe ich davon aus das folgende setup:
Damit dies funktioniert müssen Sie:
*
audio
tagcrossOrigin
- Eigenschaft auf "anonyme"audio.crossOrigin="anonymous"
;Mit Icecast Sie die Katze, legen Sie die "Access-Control-Allow-Origin" - header mithilfe des Konfigurations-Datei, fügen Sie einfach die folgenden Zeilen in Ihre icecast.xml ich in der Regel fügen Sie direkt nach der öffnung
<icecast>
tag:Vergessen Sie nicht, neu zu starten, Icecast nach diesen änderungen. Wenn Ihr Icecast wird wieder online sein, können Sie überprüfen die Header mit diesem Befehl:
Antwort sollte in etwa so Aussehen:
Wie Sie sehen können, "Access-Control-Allow-Origin: *" - header vorhanden ist.
Shoutcast
Leider Shoutcast nicht erlauben das setzen von HTTP-Headern (.htaccess ist nicht eine option, auch), aber wir können erstellen Sie eine reverse proxy-web-server-Konfiguration, wird diese ermöglichen es Ihnen, zu-host-stream aus dem Haupt-domain -
radio.com
. Ich werde die proxy-Konfigurationen für Nginx und Apache.Nginx
Können Sie zusätzliche Header mit "proxy_set_header", aber das grundlegende Beispiel ist:
Apache
Aktivieren, Apache proxy Module und update radio.com virtual-host-Konfiguration-Konfiguration:
Nun können Sie auf Ihre stream mit http://radio.com/stream URL und die CORS-Richtlinie nicht gelten. Diese Lösung bringt auch einige zusätzliche Vorteile:
Dass ein HTTP-header. Konfigurieren Sie Ihren webserver und webapp senden dieses headers. Vielleicht in der htaccess oder PHP. entfernen Sie die folgende Zeile
SHOUTcast-Servern nicht unterstützt CORS. Es gibt nichts, was Sie tun können, um dies zu ändern, wenn Sie gehen, um weiter zu SHOUTcast.
Zunächst MediaElementAudioSource nicht über eine Eigenschaft mit dem Namen "crossOrigin".
Find ich nur dieses problem, und wütend mit den Nachricht:MediaElementAudioSource Ausgänge Nullen wegen CORS Zugriffsbeschränkungen für. Aber es ist nur eine Nachricht, ich kann es immer noch hören Sie die audio.
Und ich googelte viel, denke dieser link hilfreich sein:http://www.codingforums.com/javascript-programming/342454-audio-api-js.html
Dann in meiner situation, ich bekomme die HTTP-Header der Antwort:
Beachten Sie, dass "Access-Control-Allow-Origin: *" ich denke, dass dies genau das richtige, aber ich bekomme die Meldung immer noch. Hoffe es hilft Ihnen.