Как воспроизводить аудиоданные base64 в firefox с помощью HTML5?

Я пытаюсь кодировать mp3-файл в формате base64. Тогда сыграй через броузер. Он отлично работает на safari и chrome, но не на Firefox.

У меня вопрос " есть ли способ заставить firefox воспроизводить аудиофайл в формате base64/ binary string?"

ps: Я знаю, что firefox не может воспроизводить mp3, поэтому я пробовал другие аудиофайлы, такие как wav, ogg... Ни один из них не работает на Firefox после того, как я закодировал их в base64. Пожалуйста помогите!--4-->

<body>
    <div>
        <form>
        Select a file: <input type="file" name="img" id="myaudio"/>
        </form>
    </div>
    <div id="click">
        <span>click</span>
    </div>
    <div id="body">
        <audio controls="controls" autobuffer="autobuffer" autoplay="autoplay">
        </audio>

    </div>
    <script type="text/javascript">
        $(document).ready(function(){
              $("#click").click(function(){
                    var audio = $("input[type='file']").get(0).files[0];

                    readFile(audio, function(e) {
                        var result = e.target.result;   *// here I get a binary string of my original audio file*
                        encodedData = btoa(result);   *// encode it to base64*
                        $("audio").html("<source src="data:audio/mp3;base64,"+encodedData+""/>");     *//add the source to audio*
                    });
              });

        });

        function readFile(file, onLoadCallback){
            var reader = new FileReader();
            reader.onload = onLoadCallback;
            reader.readAsBinaryString(file);
        }


    </script>
</body>

1 ответов


вместо readAsBinaryString затем кодирования base64.
использовать readAsDataURL что дает вам полный URI данных.

<script type="text/javascript">
    $(document).ready(function(){
          $("#click").click(function(){
                var audio = $("input[type='file']").get(0).files[0];

                readFile(audio, function(e) {
                    var result = e.target.result;   *// here I get a binary string of my original audio file*
                    //encodedData = btoa(result);   *// encode it to base64*
                    $("audio").html("<source src=\""+result+"\"/>");     *//add the source to audio*
                });
          });

    });

    function readFile(file, onLoadCallback){
        var reader = new FileReader();
        reader.onload = onLoadCallback;
        reader.readAsDataURL(file);
    }


</script>

http://jsfiddle.net/Z9pJ7/2/