Android平臺上使用MediaCodec, Opengl對視頻進(jìn)行處理

前言

當(dāng)前眾多的視頻SDK中, 大都是封裝ffmpeg對視頻進(jìn)行轉(zhuǎn)碼, 壓縮, 裁剪的處理.
優(yōu)點(diǎn)是ffmpeg發(fā)展到現(xiàn)在已經(jīng)相對成熟, 支持的視頻格式較多.
但是缺點(diǎn)也是顯而易見的的,

速度慢

用cpu來執(zhí)行視頻數(shù)據(jù)的處理屬于軟解碼, 效率并不高;

是需要的程序運(yùn)行尺寸較大.

以騰訊視頻sdk為例, 有20m上下, 這樣的sdk合入應(yīng)用后, 對應(yīng)用尺寸影響太大.

版權(quán)問題

那可是GPL許可證, 當(dāng)然, 在國內(nèi)這個(gè)沒人在意...

當(dāng)然目前像是七牛視頻sdk也是使用的硬解碼方式, 但卻是收費(fèi)的.

最近兩個(gè)多月因?yàn)楣ぷ餍枰? 經(jīng)歷了一番視頻錄制, 美顏, 裁剪, 轉(zhuǎn)碼的需求洗禮, 最終證明通過安卓本地硬解碼的方式完全可以實(shí)現(xiàn)基本的視頻處理. 并且效果很好.

image.png

視頻預(yù)覽

預(yù)覽也許叫播放更合適. 說道播放, 最簡單的有兩種選擇, 一是MediaPlayer, 一是ExoPlayer

1. 支持的格式方面

ExoPlayer比MediaPlayer支持的視頻格式更多. 但因?yàn)槲覀兲幚淼囊曨l格式只有MP4, 所以MediaPlayer完全勝任.

2. 視頻逐幀預(yù)覽.

就是拖動(dòng)播放進(jìn)度條時(shí), 顯示拖動(dòng)位置的幀頁面, 方便選擇. 經(jīng)過調(diào)研, 這個(gè)功能跟播放器的關(guān)系不大, 跟視頻格式強(qiáng)相關(guān), 如果視頻的關(guān)鍵幀很少, 那么拖動(dòng)的時(shí)候,顯示的畫面必然不流暢, 反之, 如果關(guān)鍵幀數(shù)據(jù)很豐富, 那么畫面就會很流暢. 經(jīng)過測試, 在相同數(shù)據(jù)狀況下, MediaPlayer表現(xiàn)的更好. 當(dāng)然也可以通過定制修改exoplayer的邏輯達(dá)到目的, 但是考慮之下, 已經(jīng)沒有必要.

3. 變速播放.

這個(gè)都是支持的.

4. 循環(huán)播放

都支持.

5. 預(yù)覽播放時(shí)對畫面進(jìn)行濾鏡, 動(dòng)效處理

都支持.
經(jīng)過學(xué)習(xí)研究, 發(fā)現(xiàn)可以通過glsurfaceview或者TextureView基礎(chǔ)上使用egl來創(chuàng)建surface, 并交給播放器使用. 只要達(dá)到這個(gè)目的, 就可以方便的對播放器給出的幀畫面進(jìn)行opengl渲染, 不管是濾鏡還是類似抖音上的那些動(dòng)效, 都可以通過著色器來實(shí)現(xiàn).
可以參考項(xiàng)目: https://github.com/MasayukiSuda/ExoPlayerFilter](https://github.com/MasayukiSuda/ExoPlayerFilter

6. 對視頻進(jìn)行多種動(dòng)效的疊加.

通過使用fbo, 并且對每種過濾器(filter)添加時(shí)間段屬性, 從而實(shí)現(xiàn)動(dòng)效的疊加.

視頻裁剪

引入的開源庫是
https://github.com/MasayukiSuda/Mp4Composer-android](https://github.com/MasayukiSuda/Mp4Composer-android
https://github.com/ypresto/android-transcoder/
兩個(gè)日本人的作品.

視頻裁剪同樣需要有應(yīng)用濾鏡, 疊加動(dòng)效的功能. 上面兩個(gè)項(xiàng)目并不支持, 需要改造擴(kuò)展.

示例代碼

最終給出一份我的項(xiàng)目代碼demo
https://github.com/shaopx/VideoClipEditViewTest

資源列表

1.http://bigflake.com/mediacodec/
這個(gè)網(wǎng)址列出的cts測試用例, 可以說是最全面, 最正確的是安卓平臺硬解碼使用范例了.
對應(yīng)一篇簡單翻譯過的中文文章
http://www.reibang.com/p/e6c683d6dbbe

  1. 幀緩沖技術(shù)簡介
    https://blog.csdn.net/jxw167/article/details/54985183
    https://blog.csdn.net/junzia/article/details/53861519
    http://www.reibang.com/p/78a64b8fb315
    http://www.reibang.com/p/1da4a843e1b2

  2. Surface, SurfaceTexture, OpenglEs , 安卓平臺上surface及相關(guān)概念的介紹
    https://source.android.com/devices/graphics/arch-sf-hwc

  3. 關(guān)于opengl 著色器的簡單介紹
    https://blog.jayway.com/2009/12/04/opengl-es-tutorial-for-android-part-ii-building-a-polygon/

  4. 通過MediaCodec播放音視頻的項(xiàng)目
    https://github.com/saki4510t/AudioVideoPlayerSample
    https://github.com/googlesamples/android-BasicMediaDecoder

  5. 通過MediaPlayer + SurfaceTexture 播放視頻
    https://github.com/crossle/MediaPlayerSurface

  6. 一份視頻軟解碼壓縮
    https://github.com/fishwjy/VideoCompressor
    關(guān)于isoparser: 這里是另一個(gè)文章: https://blog.csdn.net/qq1263292336/article/details/73197456

  7. 各種模仿抖音的動(dòng)效, 著色器實(shí)現(xiàn)的
    http://www.reibang.com/u/fd6f2b25d0f4
    http://www.reibang.com/p/5bb7f2a0da90

  8. 使用Camera2 添加opengl效果的示例:
    https://github.com/aleksas/androidGlesCamera2
    https://github.com/googlecreativelab/shadercam/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弹囚,一起剝皮案震驚了整個(gè)濱河市庶骄,隨后出現(xiàn)的幾起案子毁渗,更是在濱河造成了極大的恐慌,老刑警劉巖单刁,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灸异,死亡現(xiàn)場離奇詭異,居然都是意外死亡羔飞,警方通過查閱死者的電腦和手機(jī)绎狭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褥傍,“玉大人儡嘶,你說我怎么就攤上這事』蟹纾” “怎么了蹦狂?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朋贬。 經(jīng)常有香客問我凯楔,道長,這世上最難降的妖魔是什么锦募? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任摆屯,我火速辦了婚禮,結(jié)果婚禮上糠亩,老公的妹妹穿的比我還像新娘虐骑。我一直安慰自己,他們只是感情好赎线,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布廷没。 她就那樣靜靜地躺著,像睡著了一般垂寥。 火紅的嫁衣襯著肌膚如雪颠黎。 梳的紋絲不亂的頭發(fā)上另锋,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天,我揣著相機(jī)與錄音狭归,去河邊找鬼夭坪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛过椎,可吹牛的內(nèi)容都是我干的台舱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼潭流,長吁一口氣:“原來是場噩夢啊……” “哼竞惋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灰嫉,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤拆宛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后讼撒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浑厚,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年根盒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钳幅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡炎滞,死狀恐怖敢艰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情册赛,我是刑警寧澤钠导,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站森瘪,受9級特大地震影響牡属,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扼睬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一逮栅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窗宇,春花似錦措伐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叫潦。三九已至蝇完,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背短蜕。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工氢架, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朋魔。 一個(gè)月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓岖研,卻偏偏與公主長得像,于是被迫代替她去往敵國和親警检。 傳聞我的和親對象是個(gè)殘疾皇子孙援,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

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