給大家分享一下知識(shí)星球里面小伙伴的項(xiàng)目實(shí)踐,高仿剪映快速抽幀、精準(zhǔn)顯示功能,而且還有源碼給出!

關(guān)于實(shí)現(xiàn)思路,之前也在公眾號(hào)里面給大家分享過:

有興趣有時(shí)間的,也可以按照思路自己動(dòng)手實(shí)踐一下,以下是特意邀請(qǐng)作者寫的分享,歡迎交流討論!

由于本人想學(xué)習(xí)音視頻相關(guān)的東西,所以找了剪映作為借鑒,通過仿照剪映的功能學(xué)習(xí)音視頻相關(guān)的東西,所以有了這個(gè)項(xiàng)目。

暫時(shí)這個(gè)項(xiàng)目只有仿照剪映編輯的預(yù)覽條快速抽幀、精準(zhǔn)顯示,以及播放器的播放和隨預(yù)覽條的滾動(dòng)逐幀預(yù)覽。

本項(xiàng)目的抽幀顯示速度和剪映還有一定的差距,但是和快影的抽幀速度差不多了。

本項(xiàng)目主要有三塊:

第一部分是使用的 開源的 ,也就是預(yù)覽條的UI。

第二部分是視頻播放器,使用 寫的一個(gè)簡單的播放器,將與數(shù)據(jù)交給 Java 層的 去渲染顯示。

第三部分是預(yù)覽條的解碼抽幀,也是通過 去解碼,然后結(jié)合 UI 去處理解碼的時(shí)機(jī),顯示,緩存等問題。

項(xiàng)目地址,歡迎 star :

開局一張圖

視頻剪輯快速導(dǎo)出_視頻剪輯快速播放_(tái)快速剪輯視頻

這是剪映的預(yù)覽條抽幀效果

這是快手的快影預(yù)覽抽幀效果下面兩個(gè)動(dòng)圖是本項(xiàng)目的預(yù)覽抽幀效果大概的思路

某位大佬曾經(jīng)分析過類似剪映預(yù)覽條抽幀的思路:

1.每一個(gè)要顯示的幀的時(shí)間是確定的,因?yàn)殚g隔是固定的。

2.既然要顯示的幀的時(shí)間是確定的,那么在實(shí)際要顯示的時(shí)候,可以根據(jù)要即將要解碼的幀與當(dāng) 前已解碼的幀是否在同一個(gè)GOP,如果在同一個(gè)GOP,那么就通過順序解碼的方式。如果不在同一個(gè)GOP,那么就要先seek,再順序解碼到需要的幀。

3.因?yàn)轭A(yù)覽條上面顯示的每一幀的實(shí)際寬高都非常小,所以可以將壓縮到很小,大概10kb以內(nèi),這樣就可以充分利用緩存,提前解碼放入緩存,加快顯示的速度。這里不僅可以用內(nèi)存緩存,還可以用磁盤緩存,已經(jīng)解碼的可以存到磁盤,下次就可以直接拿。

4.充分利用多解碼器解碼,或者多線程解碼。

5.解析nal 獲取 語法元素的值,如果為0,則可以丟棄不解碼,因?yàn)?bit的,標(biāo)識(shí)NALU的重要性,值越大,重要性越高。當(dāng)解碼器處理不過來時(shí),可以丟掉重要性為0的。

pe

1 bit

2 bit

5 bit

以上就是大致的一個(gè)思路,本項(xiàng)目也基本使用的是這個(gè)思路,稍有不同的是,第3點(diǎn),本項(xiàng)目只用了磁盤緩存,并且沒有使用提前解碼的方式,而是通過獲取當(dāng)前顯示再屏幕上的item,所屬的時(shí)間范圍,只解碼這個(gè)范圍內(nèi)的部分(剪映基本也是這么處理的)。

同時(shí)本項(xiàng)目會(huì)在拿到需要處理的視頻,初始化后,將當(dāng)前視頻所有I幀的時(shí)間節(jié)點(diǎn)獲取出來,以便在后面判斷是需要順序解碼,還是需要seek。

這里就沒有貼代碼了,重點(diǎn)在思路,想看代碼和效果的可以去下載下來,跑一跑。

本項(xiàng)目僅僅一個(gè)demo,沒有做兼容,沒有做架構(gòu),所以不能直接用于正式項(xiàng)目,然后也希望找一些同好們,一起學(xué)習(xí)交流。

最后歡迎大家加入 音視頻開發(fā)進(jìn)階 ,這里有知識(shí)干貨、編程答疑、開發(fā)教程,還有很多精彩分享。

更多內(nèi)容可以在星球菜單中找到,隨著時(shí)間推移,干貨也會(huì)越來越多!!!

視頻剪輯快速播放_(tái)快速剪輯視頻_視頻剪輯快速導(dǎo)出

給出 10元 優(yōu)惠券,漲價(jià)在即,目前還是白菜價(jià),基本上提幾個(gè)問題就回本,投資自己就是最好的投資?。?!

視頻剪輯快速導(dǎo)出_視頻剪輯快速播放_(tái)快速剪輯視頻

加我微信 ,拉你進(jìn)技術(shù)交流群