在iOS Safari中播放離線音頻__iOS

來源:互聯網
上載者:User

        在iOS的Safari瀏覽器上播放緩衝的音頻供離線使用一直是一個挑戰,已經被證明是不可能完成的任務 。但隨著網路音頻API的發展(僅支援WebKit核心),現在終於實現了-不過還需要經過一些步驟。

        壞訊息是我們還無法使用應用緩衝緩衝MP3檔案,然後簡單地使用XmlHttpRequest進行載入。iOS6上的Safari瀏覽器可以緩衝MP3,但是會拒絕播放它。

        但是這不代表著無藥可救...

        使用Base64編碼

        因為網路音頻API為開發人員提供了AudioBuffer,你現在可以馬上使用它來轉換資料格式,並且把它們直接採用網路音頻API來進行播放。例如,如果你把一個MP3檔案編碼成Base64,你可以把它解碼為ArrayBuffer,變成原始的音頻資料。

        編碼音頻檔案

        你可以很容易地使用OpenSSL將MP3檔案轉換為Base64字串。MacOS X系統已經預裝了OpenSSL,所以只需開啟終端程式,然後鍵入以下命令:

openssl base64 -in [infile] -out [outfile]

        請確保把[infile]更換為你MP3的路徑,而將[outfile]替換為你所選擇的編碼資料的目標路徑。

        這將把音效檔輸出為Base64編碼的字串。然後,你可以選擇使用任何形式的網路儲存(例如應用緩衝,本機存放區,或者webSQL)來緩衝字串。

        Base64到ArrayBuffer

        為了把Base64字串解碼為ArrayBuffer,你需要使用一個自訂的方法。丹尼爾·格雷羅的base64-binary.js是一個好的指令碼,可以準確的實現這個目的。它把Base64字串轉換成一個Uint8Array類型的數組,並將其儲存在一個ArrayBuffer中。

        一旦做到這一點,你可以簡單地採用網路音頻API的decodeAudioData()方法來解碼音頻資料:

var buff = Base64Binary.decodeArrayBuffer(sound);myAudioContext.decodeAudioData(buff, function(audioData) {    myBuffer = audioData; });

        一旦你的音頻資料解碼完成,將它傳遞給音頻緩衝源並播放聲音:

mySource = myAudioContext.createBufferSource();mySource.buffer = myBuffer;mySource.connect(myAudioContext.destination);mySource.noteOn(0);

        示範和原始碼

        此處是線上示範和原始碼。

        瀏覽器支援

        目前此示範支援Safari 6,Chrome案頭版和iOS6 Safari瀏覽器。該技術未來可以工作在任何支援網路音頻API的瀏覽器上,所以我希望Chrome行動瀏覽器能儘快的添加支援。

        W3C目前正在完善網路音頻API標準。

         譯自:http://html5doctor.com/taking-web-audio-offline-in-ios-6-safari/

         轉載請註明出處:蔣宇捷的部落格-http://blog.csdn.net/hfahe

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

Tags Index: