App增加倍速視頻的坎坷之路

“視頻太長太枯燥囊榜,要是可以快進播放就好了!”亥宿、“這個視頻已經(jīng)看過了卸勺,想要快速回顧一下,但是再看1個小時有點久”烫扼、“老師發(fā)音太快曙求,能不能放慢語速,快跟不上節(jié)奏了”

? ? ? ? 課程視頻越來越長映企,學習時間越來越少悟狱。面對這些場景,很多視頻播放的App都增加了倍速功能堰氓,可以開啟0.5x挤渐、1.5x甚至2.0x等倍速,用于增強播放功能双絮。 iOS系統(tǒng)播放內(nèi)核的強大浴麻,很輕松的應付了產(chǎn)品經(jīng)理提出的這個需求,但是面對市場上數(shù)不清的Android系統(tǒng)版本和設備囤攀,這讓Android客戶端增加倍速功能软免,無疑又新添了一道門坎。

? ? ? ? 為了增加倍速功能焚挠,并保持系統(tǒng)版本兼容膏萧,一開始選擇的是集成vlc播放器的方案。vlc 2.x版本后,增加了倍速播放功能榛泛,但vlc本身結(jié)構(gòu)比較龐大蝌蹂,集成難度較高,增加了后續(xù)維護的難度挟鸠,在使用一段時間后叉信,開始考慮給Android端更換另外一種倍速方案亩冬。

? ? ? ? 這次是集成Google ExoPlayer的播放器艘希,ExoPlayer本身在Android 6.0系統(tǒng)及以上,支持系統(tǒng)級別的倍速播放功能硅急,能更好的利用設備硬件功能覆享。ExoPlayer本身出自Google之手,是官方推薦的播放器营袜,對Android系統(tǒng)兼容較好撒顿,并且設計結(jié)構(gòu)簡單易懂,容易擴展荚板。

? ? ? ?但是遺憾在6.0以下就不支持倍速設置凤壁。得益于ExoPlayer可擴展性很強,支持對視頻跪另、音頻等渲染器做擴展拧抖,通過改變默認音頻渲染器的音頻輸出,可以加快音頻流的速度免绿,在ExoPlayer中唧席,保持音視頻同步,一般是視頻跟著音頻的速率走嘲驾,所以我們調(diào)整音頻的速率淌哟,就同時也改變了視頻。音頻流的速率調(diào)整可以通過一個三方庫Sonic(https://github.com/waywardgeek/sonic/blob/master/Sonic.java)來改變辽故。

? ? ? ? 當播放器進行構(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)勢兔辅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腊敲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子维苔,更是在濱河造成了極大的恐慌碰辅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕉鸳,死亡現(xiàn)場離奇詭異乎赴,居然都是意外死亡,警方通過查閱死者的電腦和手機潮尝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門榕吼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人勉失,你說我怎么就攤上這事羹蚣。” “怎么了乱凿?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵顽素,是天一觀的道長。 經(jīng)常有香客問我徒蟆,道長胁出,這世上最難降的妖魔是什么甲锡? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任携添,我火速辦了婚禮,結(jié)果婚禮上芽卿,老公的妹妹穿的比我還像新娘。我一直安慰自己抑淫,他們只是感情好绷落,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著始苇,像睡著了一般砌烁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上催式,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天函喉,我揣著相機與錄音,去河邊找鬼蓄氧。 笑死函似,一個胖子當著我的面吹牛槐脏,可吹牛的內(nèi)容都是我干的喉童。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼顿天,長吁一口氣:“原來是場噩夢啊……” “哼堂氯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牌废,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤咽白,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸟缕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晶框,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年懂从,在試婚紗的時候發(fā)現(xiàn)自己被綠了授段。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡番甩,死狀恐怖侵贵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缘薛,我是刑警寧澤窍育,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站宴胧,受9級特大地震影響漱抓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恕齐,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一乞娄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦补胚、人聲如沸码耐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骚腥。三九已至,卻和暖如春瓶逃,著一層夾襖步出監(jiān)牢的瞬間束铭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工厢绝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留契沫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓昔汉,卻偏偏與公主長得像懈万,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子靶病,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容