2012-11-07 86 views
11

在我被燒死之前,我知道這是行不通的,因爲蘋果擔心他們的用戶自動下載音頻文件的可怕成本(與他們無關,試圖削弱網絡應用程序,因爲他們沒有得到他們的30%)。在移動Safari上自動播放音頻

但是,我的問題是:有沒有人找到一個狡猾的解決方法呢?我只是想在遊戲開始時播放開始聲音,目前不得不等待用戶在播放音頻之前先點擊某處。現在,你們中的一個聰明的傢伙肯定有這個工作?

+1

我正在尋找幾個星期前做類似的事情,我的搜索沒有結果...... – boz

+0

我把這個問題用google搜索了一遍,沒有發現任何有用的東西。請stackoverflow,你是我唯一的希望... –

+0

我使用'AudioContext'獲得了一個Firefox和Chrome的解決方法,但我沒有嘗試在Safari上(請確認它是否適用,如果你有Safari移動)。看到我對類似問題的回答https://stackoverflow.com/a/46485784/2342518 [讓我們希望@boz是從現在開始沒有結果的最後一個] – Xenos

回答

6

沒有機會在移動瀏覽器中使用自動播放功能。 Android和iOS不允許它,我個人認爲這是一個可行的限制!想象一下,每個第二個網站都會在開始時打開播放和難看的聲音!

但是你可以做一個小黑客,使用戶不會此話,他已啓動的聲音爲您的應用程序:

  1. 您需要的用戶交互來啓動你的聲音。因此,您的應用或遊戲可能有一個啓動屏幕或歡迎按鈕,需要點擊才能進入mainmenu或啓動遊戲。綁定到該點擊事件併爲您的<audio>調用load()方法。

  2. 綁定到<audio>的「canplaythrough」事件。當您的源已準備好播放時,會觸發此事件。在這裏,您現在可以調用play(),暫停()或等待其他交互。所以音頻準備就緒,但是現在您可以完全控制何時開始或停止聲音。

  3. 我還建議你在移動客戶端上使用音頻精靈。 iOS(和Android?)通過Singleton在內部實現音頻支持。這意味着你不能像在桌面瀏覽器中一樣擁有10個音頻元素並且一次播放不同的聲音。你只能播放一個文件! 因此,改變不同聲音的來源需要很長時間。使用音頻精靈,您可以在用戶首次與您的網站或遊戲進行互動時啓動精靈。暫停你的精靈,當你需要播放聲音時,你必須將currentTime設置爲精靈的開頭,並在文件的currentTime達到精靈的末尾時暫停精靈。有一個timeupdate事件,你可以檢查你的精靈的當前時間。

如果你對我更感興趣,我可以爲你準備我的javascript音頻播放器!

+0

感謝您的回答,但不幸的是,我們的遊戲必須在沒有其他用戶交互的情況下啓動,因此您的「黑客」不適合我們。並且工作正常(主要是!)我會給你正確的答案,因爲看起來現在沒有其他解決方案... –

+0

有一種機會使用'AudioContext';請參閱我的回答https://stackoverflow.com/a/46485784/2342518 – Xenos

+0

您是否知道當用戶點擊按鈕時是否可以加載多個不同的音頻元素? –

2

我目前看到的唯一解決方案是創建一個shell應用程序,並將該Web應用程序放入UIWebView中。

http://flowz.com/2011/03/apple-disabled-audiovideo-playback-in-html5/

UIWebView.allowsInlineMediaPlayback = YES; 
UIWebView.mediaPlaybackRequiresUserAction = NO; 

我也真的想知道如何在一個普通老式的Web應用程序做到這一點。

+0

不幸的是,我們製作HTML5版本的當前產品組合的重點在於它們應該是設備不可知的。在UIWebView中包裝它意味着只有iOS :-( 感謝您的回答,雖然... –

0

我相信我剛剛解決這個爲我自己的應用程序。

的步驟,

控制器負載可達,

然後....in viewDidLoad

讓您的web視圖加載HTML:loadHTMLString:htmlFile baseURL:[self getBasePath]];

然後...在web視圖上設置mediaPlaybackRequiresUserAction = NO。

如果你設置得太快,我認爲html的加載會重置它。