Firefox WebAudio createMediaElementSource не работает

Im использует API WebAudio с объектом new Audio() в качестве источника. Ниже приводится упрощенная версия того, что я делаю. Это, однако, не воспроизводит никаких звуков в firefox 25.0.1.

var context;
if(window.webkitAudioContext) {
    context = new webkitAudioContext();
} else {
    context = new AudioContext();
}
var audio = new Audio();

// This file does seem to have CORS Header
audio.src = "http://upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg";

var source;
function onCanPlay() {
    console.log("can play called");
    source = context.createMediaElementSource(audio);
    source.connect(context.destination);
    audio.removeEventListener("canplay", onCanPlay);
    audio.play();
}

if(audio.readyState < 3) {
    audio.addEventListener("canplay", onCanPlay);
} else {
    onCanPlay();
}

jsFiddle: http://jsfiddle.net/7bJUU/

Я читаю в другом question, что createMediaElementSource требует CORS. Файл в приведенном выше примере, похоже, имеет Access-Control-Allow-Origin: *, но он все еще не работает в firefox. Если я запускаю один и тот же пример локально с локальным звуковым файлом, все работает нормально.

Не уверен, что это ошибка, или если я делаю что-то ужасно неправильно. Любая помощь приветствуется.

Ответ 1

Вот почему:

  •  
  • Firefox (проверенный до и после обновления до 41.0.1 по состоянию на 07 октября 2015 года), похоже, имеет некоторые проблемы с незащищенными кросс-доменами в HTTP-протоколах безопасности. Я обновился до https: на медиа-источнике, так как Wikimedia имеет альтернативный 443 TCP с действительным сертификатом, выпущенным для "Wikimedia Foundation, Inc." с 23 июня 2015 года до 19 февраля 2017 года, от CA "GlobalSign". Когда в безопасном домене, браузеры также нуждаются в защищенных ресурсах.  
  • Элемент Audio DOM и другие элементы, такие как Image и Video, имеют свойство "crossOrigin", в котором указывается либо предоставление учетных данных (файлов cookie), либо нет. Анонимное кросс-начало указывает, что обмен файлами домена не будет осуществляться в междоменном режиме, что считается защищенным браузером. Итак, перед настройкой источника звука я установил "audio.crossOrigin" на "анонимный".

Я тестировал Firefox (как сказал первый элемент) и Chrome 45.0.2454.101m, и они отлично работали, поэтому я обновил JSFiddle: https://jsfiddle.net/7bJUU/11/ 7bJUU