因?yàn)橐_發(fā)小程序音頻播放,最近折騰了一段時(shí)間,總結(jié)下一些問題,便于后面回顧,也方便大家開發(fā)的時(shí)候避免踩坑。
直接進(jìn)入正題,小程序音頻有好幾種,這里我們要根據(jù)實(shí)際情況去選擇,這里大概列一下。
| 音頻類型 | InnerAudioContext(內(nèi)置音頻) | BackgroundAudioManager(背景音頻) |
|---|---|---|
| 播放場(chǎng)景 | 只支持在小程序中播放,回到微信或者鎖屏等會(huì)停止 | 可以微信中繼續(xù)播放,ios可以鎖屏在播放控制器中切換播放,安卓根據(jù)場(chǎng)景也會(huì)出現(xiàn)音樂播放控制器 |
| 適用場(chǎng)景 | 交互的提示音、特效音樂等只在小程序中使用的場(chǎng)景 | 音樂、課程等內(nèi)容,需要支持用戶鎖屏后繼續(xù)收聽 |
| 是否需要資質(zhì) | 符合官方要求即可 | 符合官方要求同時(shí)需要在配置文件中添加 "requiredBackgroundModes": ["audio"], // 申明需要后臺(tái)運(yùn)行的能力 audio=后臺(tái)音樂播放 |
這里主要考慮了這兩種音頻播放功能,因?yàn)槲⑿乓呀?jīng)停止對(duì)audio組件的維護(hù),現(xiàn)在都是使用api創(chuàng)建上下文,這兩種除了使用場(chǎng)景不太一致,其他功能大體相同,后面就不單獨(dú)列舉這兩個(gè)的差異了。
接下來應(yīng)該算是開發(fā)中的重頭戲,也是最頭疼的問題,ios和安卓兼容問題,這個(gè)問題在音頻中屬實(shí)是一個(gè)大坑,很多交互完全不同,如果只是做簡單音頻播放可能沒啥感覺,但是如果做課程、音樂類的需要很多細(xì)致操作的話這些坑不得不面對(duì),不得不填。
大致描述下我們的需求,類似音頻播放器,支持上一首下一首、快退快進(jìn)、單曲順序隨機(jī)等基礎(chǔ)功能,當(dāng)然也支持鎖屏和回到微信繼續(xù)收聽,下面就直接列坑點(diǎn)了
| 功能 | Ios | Android |
|---|---|---|
| stop事件 | 會(huì)清除播放器實(shí)例的src | 不會(huì)清除src |
| ended事件 | 播放結(jié)束會(huì)先清除src,切換源時(shí)會(huì)觸發(fā)多次事件 | 不會(huì)清除src,且只觸發(fā)一次事件 |
| 切歌 | 不觸發(fā)stop監(jiān)聽 | 觸發(fā)stop監(jiān)聽事件 |
| 切到微信后臺(tái) | 播放器stop,觸發(fā)監(jiān)聽,重新進(jìn)入src丟失,進(jìn)度為0 | 播放器暫停,再次進(jìn)入不丟失播放進(jìn)度 |
具體開發(fā)處理兼容問題我就不列代碼了,找到問題原因再去根據(jù)情況優(yōu)化處理就好,最后再提一個(gè)坑點(diǎn)
就是seek這個(gè)方法,這個(gè)是我們用來設(shè)置播放時(shí)間的,但是時(shí)靈時(shí)不靈就很坑,參考其他大佬解決問題的方案,這里建議放在onTimeUpdate回調(diào)事件中去設(shè)置,相當(dāng)于做個(gè)彌補(bǔ)方案。
整理的主要是按照我碰到的問題整理的,大家知道坑點(diǎn)再根據(jù)實(shí)際情況處理即可。