2017-10-27 5 views
0

Ich habe einen 10 Sekunden Audio-Stream, der als Base64-String codiert ist. Wenn es an ein Audio-Tag angehängt ist, wird es im HTML-Element korrekt abgespielt. Beim Versuch, es herunterzuladen, wird es als eine (beschädigte?) Datei mit einer Dauer von 0:00 heruntergeladen.Wie Audio Base64-String als MP3-Datei herunterladen, ohne es zu korrumpieren?

var audio = document.getElementById('audio-element'); 
 
var linkTag = document.getElementById('link-element'); 
 

 
linkTag.href = audio.src; 
 
linkTag.download = 'audio-file'; 
 
linkTag.click();
<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     
 
    </head> 
 
    <body> 
 
    <audio src="data:audio/mp3; codecs=opus;base64,GkXfo59ChoEBQveBAULy.............IiT5Q==" controls id="audio-element"> 
 
     Your browser does not support the audio element 
 
    </audio> 
 
    
 
    <a href="" id="link-element">Download audio</a> 
 
    </body> 
 
</html>

Der String base64 im Codeausschnitt oben ist ungültig, weil über die 30.000 Zeichen-Grenze geht in Fragen nicht erlaubt. Folglich musste ich es abbauen. Der ursprüngliche String ist gültig und spielt gut, kann aber aufgrund der Zeichenbeschränkung hier nicht gepostet werden.

Was ich will, ist für eine genaue mp3-Datei von einer Base64-codierten Zeichenfolge des Typs "Audio/mp3" heruntergeladen werden.

Wie mache ich das mit plain javascript/ES6? Einblicke würden sehr geschätzt werden.

Antwort

0
audio/mp3; codecs=opus; 

So etwas gibt es nicht. Opus ist ein Audio-Codec. MP3 ist ein Audio-Codec. Eine "MP3-Datei" ist nur ein roher MPEG-Stream. Sie können Opus nicht in einen rohen MPEG-Stream einfügen.

Der Browser ist wahrscheinlich nett zu Ihnen und interpretiert die Daten, die Sie tatsächlich haben, wie auch immer es eigentlich sein soll. Andere Spieler, wahrscheinlich nicht so sehr.

Verwandte Themen