2016-12-16 6 views
1

Als Beispiel Objekte, sagen, ich habe einen video Objektsatz auf meiner Website mit den folgenden Attributen:Set Video-Quelldatei zu einer Blob-URL

<video controls="" preload="auto" id="_video"></video> 

und die ursprüngliche Quelle ist ./video/video.mp4 (zum Beispiel).

Wie kann ich den ursprünglichen Speicherort der Quelldateien durch Umwandlung in eine BLOB-URL schützen?

Ich habe ein paar Posts gesehen, die darauf hinweisen, dass es innerhalb von JavaScript gemacht werden muss, aber keiner von ihnen geht tatsächlich so weit, dass man erklärt, wie man es macht oder wo man es herausfinden kann.

Also, wie würdest du es tun? und was ist der beste Weg dies zu tun?

Ich bin nicht der größte bei JavaScript, so Entschuldigung, wenn es scheint, wie eine offensichtliche Frage.

Danke. :-)

Antwort

4

Fordern Sie das Video mit einer new XMLHttpRequest() mit der responseType auf blob festgelegt.

Übergeben Sie die xhr.result an eine new FileReader() mit readAsDataURL, die Ihnen eine Base-64-codierte Zeichenfolgendarstellung der Datei geben wird.

Übergeben Sie diese Zeichenfolge an atob, um die Base-64-codierte Zeichenfolge in einer Zeichenfolge zu dekodieren, die jedes Byte binärer Daten darstellt. Jetzt können Sie eine array Byte-Werte unter Verwendung charCodeAt Schleife über die Byte-Zeichenfolge erstellen.

Diese array kann new Uint8Array() geben werden eine typisierte Array von 8-bit unsigned int-Werten, zu erstellen, die dann das new Blob() Konstruktor übergeben werden können.

Jetzt, da Sie eine blob haben, können Sie URL.createObjectURL() verwenden und die erstellte blob daran übergeben. Die erstellte Objekt-URL kann an das src-Attribut Ihres DOM-Elements video übergeben werden.

Hier ist ein schnelles und schmutziges Beispiel. Ich hoffe es hilft. Stellen Sie sicher, dass Sie die Dokumente aller verwendeten Methoden durchgehen und überprüfen Sie deren Browser-Unterstützung. Dies schützt dein Video jedoch nicht davor, heruntergeladen zu werden.

var xhr = new XMLHttpRequest(); 
 
xhr.responseType = 'blob'; 
 

 
xhr.onload = function() { 
 
    
 
    var reader = new FileReader(); 
 
    
 
    reader.onloadend = function() { 
 
    
 
    var byteCharacters = atob(reader.result.slice(reader.result.indexOf(',') + 1)); 
 
    
 
    var byteNumbers = new Array(byteCharacters.length); 
 

 
    for (var i = 0; i < byteCharacters.length; i++) { 
 
     
 
     byteNumbers[i] = byteCharacters.charCodeAt(i); 
 
     
 
    } 
 

 
    var byteArray = new Uint8Array(byteNumbers); 
 
    var blob = new Blob([byteArray], {type: 'video/ogg'}); 
 
    var url = URL.createObjectURL(blob); 
 
    
 
    document.getElementById('_video').src = url; 
 
    
 
    } 
 
    
 
    reader.readAsDataURL(xhr.response); 
 
    
 
}; 
 

 
xhr.open('GET', 'https://upload.wikimedia.org/wikipedia/commons/c/c0/Roaring_Burps.ogg'); 
 
xhr.send();
<video controls="" preload="auto" id="_video"></video>

+0

Dank! :) werde jetzt testen –

+0

Hi, ich habe das ausprobiert, und die Videoquelle schafft es, als 'blob: blah.blah/blah' eingestellt zu werden. Die Medien laden jedoch nie wirklich. Egal welches Video ich benutzt habe und woher es stammt. Ich habe das Gefühl, dass es etwas mit 'type:" image/jpg "' zu tun hat, aber ich bin mir nicht ganz sicher, wie ich das noch nie gemacht habe. –

+0

Entschuldigung, mein Schlechter. Ich habe dies getestet, bevor ich ein Bild verwendet habe, weil ich eine URL mit einer Videodatei nicht so schnell finden konnte. Ändern Sie einfach den Mime-Typ zum gewünschten Mime-Typ. Ich habe mein Beispiel aktualisiert. Stellen Sie sicher, dass das Videodateiformat vom Browser unterstützt wird. – DavidDomain