摘要:為了增加倍速功能,并保持系統(tǒng)版本兼容,一開始選擇的是集成播放器的方案。版本后,增加了倍速播放功能,但本身結(jié)構(gòu)比較龐大,集成難度較高,增加了后續(xù)維護的難度,在使用一段時間后,開始考慮給端更換另外一種倍速方案。
課程視頻越來越長,學習時間越來越少。面對這些場景,很多視頻播放的App都增加了倍速功能,可以開啟0.5x、1.5x甚至2.0x等倍速,用于增強播放功能。 iOS系統(tǒng)播放內(nèi)核的強大,很輕松的應(yīng)付了產(chǎn)品經(jīng)理提出的這個需求,但是面對市場上數(shù)不清的Android系統(tǒng)版本和設(shè)備,這讓Android客戶端增加倍速功能,無疑又新添了一道門坎。
? ? ? ? 為了增加倍速功能,并保持系統(tǒng)版本兼容,一開始選擇的是集成vlc播放器的方案。vlc 2.x版本后,增加了倍速播放功能,但vlc本身結(jié)構(gòu)比較龐大,集成難度較高,增加了后續(xù)維護的難度,在使用一段時間后,開始考慮給Android端更換另外一種倍速方案。
? ? ? ? 這次是集成Google ExoPlayer的播放器,ExoPlayer本身在Android 6.0系統(tǒng)及以上,支持系統(tǒng)級別的倍速播放功能,能更好的利用設(shè)備硬件功能。ExoPlayer本身出自Google之手,是官方推薦的播放器,對Android系統(tǒng)兼容較好,并且設(shè)計結(jié)構(gòu)簡單易懂,容易擴展。
? ? ? ?但是遺憾在6.0以下就不支持倍速設(shè)置。得益于ExoPlayer可擴展性很強,支持對視頻、音頻等渲染器做擴展,通過改變默認音頻渲染器的音頻輸出,可以加快音頻流的速度,在ExoPlayer中,保持音視頻同步,一般是視頻跟著音頻的速率走,所以我們調(diào)整音頻的速率,就同時也改變了視頻。音頻流的速率調(diào)整可以通過一個三方庫Sonic(https://github.com/waywardgee...)來改變。
? ? ? ? 當播放器進行構(gòu)建音頻渲染器的時候,可以根據(jù)Android系統(tǒng)版本選擇不同的音頻渲染器。當Android系統(tǒng)是6.0及以上時,我們使用默認的MediaCodecAudioRenderer,6.0以下時,就使用自定義的音頻渲染器SonicMediaCodecAudioTrackRenderer。
? ? ? ?
? ? ? ? SonicMediaCodecAudioTrackRenderer的核心,就是拿到音頻流的buffer,使用Sonic對這段buffer數(shù)據(jù)流進行速率調(diào)整處理,然后把調(diào)整后的buffer流送給音頻渲染器,這樣就更改了音頻速率。
? ? ? ?
? ? ? ? SonicMediaCodecAudioTrackRenderer本身也繼承至MediaCodecAudioRenderer類,在onOutputFormatChanged方法里,我們初始化Sonic和一些緩存buffer數(shù)組,并配置速率。
? ? ? ? processOutputBuffer方法會在音頻渲染器工作的時候被調(diào)用,在這里使用Sonic來改變原始的音頻流buffer數(shù)據(jù),并把轉(zhuǎn)換后的流buffer傳遞給播放器播放。
? ? ? ?
? ? ? ? 在Android 6.0的系統(tǒng)上,我們只要給默認的MediaCodecAudioRenderer渲染器配置PlaybackParams參數(shù)就可以實現(xiàn)倍速播放了。
? ? ? ?
? ? ? ? 至此,完成了ExoPlayer對倍速功能的支持,并兼容到了多個Android系統(tǒng)版本。在集成到Android項目中,無論從代碼耦合結(jié)構(gòu),還是播放器擴展性、易讀性,ExoPlayer無疑比vlc更具優(yōu)勢。
? ? ? ?
歡迎加入學習交流群569772982,大家一起學習交流。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67746.html
摘要:最近在忙一個小程序藍牙秤的項目,開發(fā)環(huán)境為小程序,上傳物料的時候需要用到語音播報即將文字轉(zhuǎn)換為語音,于是開始研究,試了幾個,最終使用騰訊的來完成這個功能。 最近在忙一個小程序藍牙秤的項目,開發(fā)環(huán)境為php+小程序,上傳物料的時候需要用到語音播報(即將文字轉(zhuǎn)換為語音),于是開始研究,試了幾個,最終使用騰訊AI的API來完成這個功能。官網(wǎng)上(http://ai.qq.com/)也有相應(yīng)教程...
摘要:可預見的未來激情賽事已經(jīng)過半,阿里云視頻技術(shù)在本次世界杯中也成功落地,而這并不是結(jié)局,這是將視頻應(yīng)用于體育行業(yè)以及更多其他行業(yè)的開端。 本屆世界杯互聯(lián)網(wǎng)直播的順利進行,離不開各大云計算廠商的支持。在這其中,阿里云是當之無愧的C位,除了優(yōu)酷外,阿里云還支撐了CNTV、CCTV5客戶端,為全網(wǎng)70%的世界杯直播流量保駕護航。 對于世界杯這種超大觀看量級、超強影響力的重要體育賽事,阿里云一直...
閱讀 3962·2021-10-08 10:12
閱讀 4632·2021-09-02 15:40
閱讀 1009·2021-09-01 11:09
閱讀 1642·2021-08-31 09:38
閱讀 2569·2019-08-30 13:54
閱讀 2276·2019-08-30 12:54
閱讀 1268·2019-08-30 11:18
閱讀 1433·2019-08-29 14:06