2013-08-15 60 views
6

Tôi đang cố mã hóa tệp mp3 ở định dạng base64. Sau đó chơi nó thông qua các broswer. Nó hoạt động hoàn hảo trên safari và chrome, nhưng không hoạt động trên Firefox.Làm cách nào để phát dữ liệu âm thanh base64 trên firefox bằng HTML5?

Câu hỏi của tôi là "có cách nào giúp firefox phát tệp âm thanh ở định dạng chuỗi base64/nhị phân không?"

ps: tôi biết firefox không thể phát mp3, vì vậy tôi đã thử những tệp âm thanh khác như wav, ogg ... Không ai trong số họ đang làm việc trên Firefox sau khi tôi đã mã hóa chúng thành base64. Vui lòng giúp

<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> 

Trả lời

3

Thay vì sử dụng readAsBinaryString thì mã hóa base64.
sử dụng readAsDataURL cung cấp cho bạn một uri dữ liệu hoàn chỉnh.

<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/

+0

Tôi không được phép làm điều đó. Mã mà tôi đã cung cấp ở trên chỉ là mã thử nghiệm. Những gì tôi thực sự muốn làm là để có được dữ liệu âm thanh từ một db mà đã có trong định dạng base64 khi tôi nhận được nó, sau đó chơi nó trên trình duyệt (Firefox). nhưng thx :) – Dominic

+0

Và tôi vừa thử nghiệm đề xuất của bạn, nó vẫn hoạt động cho Chrome chứ không phải Firefox: ( – Dominic

+0

@Dominic xem bản cập nhật Tôi quên xóa các công cụ btoa, tôi đã thử nghiệm tệp này trên một tệp ogg và nó đã hoạt động. – Musa