2011-10-22 76 views
6

我有一個小型的網絡應用程序,點擊幾個按鈕時播放真正短的聲音位。它明確針對iOS上的移動Safari(iPad)。移動Safari:音頻+緩存清單

在閱讀了這裏和其他地方關於移動Safari上的HTML5音頻的幾個「缺點」並嘗試了一些「黑客」和技巧之後,我堅持認爲Safari看起來很簡單(因爲缺乏一個更好的詞)破碎:

我可以播放聲音A(它需要很長時間才能開始 - 我假設它是downlading [再次]?)點擊按鈕A.之後,點擊按鈕B會立即再次播放聲音A.按鈕C也一樣。在某些情況下,它會播放不同的聲音,有時甚至是正確的。但主要是聲音A.使用的格式是.aiff,現在是.m4a。

寫了一些微小的自己的版本之後,我決定與Buzz庫去處理聲音加載/播放/等等。

有趣的是,他們的演示包括遊戲,這確實幾乎什麼我需要觸發相同的錯誤行爲。我甚至結束了任何標籤中任何移動Safari中的音頻播放器都會從Buzz演示遊戲(!)中播放特定聲音的情況。

我希望緩存清單可能有助於克服Apples預加載限制並強制應用程序在離線模式下點擊按鈕後播放聲音。但在確認整個應用程序已被緩存後,我無法在離線模式下播放/聽到任何聲音。

有沒有人設法得到這樣的東西以某種方式工作?( - 我們已經看到蘋果如何處理某些事情,我不希望太多的反應,雖然...)


更新1:

在這個答案的例子會導致同樣的效果:How to synthesize audio using HTML5/Javascript on iPad


更新2:

更新iOS(以及Safari)似乎可以解決音頻問題。儘管如此,緩存清單似乎並不影響音頻文件。這些文件根本不可用。

刪除緩存清單後,應用程序可以正常工作,但將其添加到「主屏幕」並重新加載後,會阻止播放音頻。

回答

7

我希望我能告訴你有一個神奇的公式讓所有的html5媒體完美工作,但沒有。目前對HTML5音頻/視頻的移動支持相當糟糕;遠遠落後於臺式機的前身。更糟糕的是,每個不同的平臺都有不同的處理方式,大多數平臺只支持半新版本。

但是,您可以使用一些技巧使媒體文件在移動Safari中正常工作。爲了解釋它們,你需要了解它的一些缺點。


1)您不能加載多種音頻/視頻文件

它是我的經驗,該瀏覽器將只在一次加載一個文件。如果您播放一個文件,請繼續播放另一個文件,然後再回來,它會重新加載該文件。而且,雖然我沒有自己嘗試,但我不認爲緩存清單可以幫助您。

我所要做的就是將我所有的音頻文件合併成一個大的音頻文件。然後,根據要求的音軌,我會將播放位置移動到適當的起始位置並播放該曲目。然後,我會使用setInterval來每隔幾毫秒檢查一次播放,以確定當前播放位置是否到達曲目的末尾。一旦完成,我暫停了它。 Pluis在每條軌道之間給了我幾秒鐘(2-3),以防萬一手機的CPU處於很大的負載下,並且檢查了一下饋電。

2)不能自動播放音頻/視頻文件

蘋果內置到他們的HTML5媒體標籤技術的限制,這些歌曲將只加載和響應用戶點擊事件發揮。這樣,開發人員在訪問他們的網站時就無法自動播放煩人的曲目。

當我使用音頻/視頻標籤時,我試圖構建富媒體廣告。因此,當您點擊橫幅並展開廣告時,我將音頻/曲目加載到橫幅點擊事件上。

我建議你應該做的是有一個小的燈箱彈出來,問用戶他們是否要打開/關閉聲音。無論用戶打開還是關閉聲音,都可以將加載函數附加到該彈出框的單擊事件。使用load()函數我個人並沒有太多的運氣。我會運行該函數來加載音頻,然後單擊播放,它會再次加載它。這可能總是因爲我沒有做正確的事情,所以請隨時證明我錯了,並讓它工作。我告訴賽道玩的是什麼,這樣它就會開始加載,然後我使用setInterval來查看當前玩的時間是否僅增加了幾毫秒。一旦我注意到它開始播放曲目,我會立即暫停播放。

3)音頻/視頻標籤僅支持iOS中4.0及更高

有沒有竅門解決此得到。它只是事實。


下面的幾個站點時,當我與音頻/視頻標記開發幫助:

http://www.w3.org/wiki/HTML/Elements/video
http://dev.w3.org/html5/spec-author-view/video.html#media-elements

祝你好運!

+0

非常感謝!看來這裏有很多好的建議。肯定會嘗試一些事情。 – polarblau

+0

您應該知道的另外一件事是,在iOS上無法緩存音頻或視頻。即使使用appcache。 – idbehold

+0

你可以給出一個代碼示例 - 將播放位置移動到合適的起始位置。另外,如果你想播放曲目3秒鐘,你會如何阻止它? – Jon