Probleme Vorladen audio in Javascript

Ich versuche, eine cross-device/browser Bild-und audio-preloading-Schema für eine GameAPI ich auf Arbeit bin. Eine audio-Datei preload, und geben Sie einen Rückruf, sobald es abgeschlossen ist.

Das problem ist, audio wird nicht anfangen zu laden, auf langsame Seite geladen, sondern arbeiten in der Regel auf den zweiten Versuch, wahrscheinlich, weil es zwischengespeichert und weiß, dass es existiert.

Ich habe verengt es nach unten, um die audio.load () - Funktion. Loszuwerden es löst das problem, aber interessanterweise, mein motorola droid Bedürfnisse, die Funktion.

Welche Erfahrungen hatten Sie mit HTML5-audio-preloading?

Hier ist mein code. Ja, ich weiß, das laden von Bildern in einer separaten Funktion kann bewirken, dass eine race-condition 🙂

var resourcesLoading = 0;

function loadImage(imgSrc) {
    //alert("Starting to load an image");
    resourcesLoading++;

    var image = new Image();
    image.src = imgSrc;

    image.onload = function() {
        //CODE GOES HERE
        //alert("A image has been loaded");
        resourcesLoading--;
        onResourceLoad();
    }
}

function loadSound(soundSrc) {
    //alert("Starting to load a sound");
    resourcesLoading++;

    var loaded = false;

    //var soundFile = document.createElement("audio");
    var soundFile = document.createElement("audio");
    console.log(soundFile);
    soundFile.autoplay = false;
    soundFile.preload = false;

    var src = document.createElement("source");
    src.src = soundSrc + ".mp3";
    soundFile.appendChild(src);

    function onLoad() {
        loaded = true;

        soundFile.removeEventListener("canplaythrough", onLoad, true);
        soundFile.removeEventListener("error", onError, true);

        //CODE GOES HERE
        //alert("A sound has been loaded");
        resourcesLoading--;
        onResourceLoad();
    }

    //Attempt to reload the resource 5 times
    var retrys = 4;

    function onError(e) {
        retrys--;

        if(retrys > 0) {
            soundFile.load();
        } else {
            loaded = true;

            soundFile.removeEventListener("canplaythrough", onLoad, true);
            soundFile.removeEventListener("error", onError, true);

            alert("A sound has failed to loaded");
            resourcesLoading--;
            onResourceLoad();
        }
    }

    soundFile.addEventListener("canplaythrough", onLoad, true);
    soundFile.addEventListener("error", onError, true);
}

function onResourceLoad() {
    if(resourcesLoading == 0)
        onLoaded();
}

Ist es schwer, das problem zu diagnostizieren, weil es zeigt keine Fehler und schlägt nur gelegentlich.

  • Es ist ein Weibchen, aber ich habe es geschafft zu fälschen, indem man einfach einen laden in der audio als standard-AJAX-text-Anfragen. Ich weiß, das klingt dumm, aber sobald die Daten zwischengespeichert wird, wird es zwischengespeichert und BOOM: vorinstalliert audio. Es gibt Fragen, in denen Browser nicht laden Sie mehr als einen media-stream, ich hatte das gleiche problem mit dem video zu, stattdessen habe ich gerade geladen die thumbnails erstellt und der HTML5-player on-the-fly. Ich finde, dass faking it als AJAX-tricks, die den browser in denke, es ist nicht media.
  • Interessant, werde ich mal versuchen.
Schreibe einen Kommentar