仿剪映播放器、剪輯視頻、預(yù)覽條、快速精準(zhǔn)
給大家分享一下知識(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 :
開局一張圖
![]()
這是剪映的預(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ì)越來越多!!!
![]()
給出 10元 優(yōu)惠券,漲價(jià)在即,目前還是白菜價(jià),基本上提幾個(gè)問題就回本,投資自己就是最好的投資?。?!
![]()
加我微信 ,拉你進(jìn)技術(shù)交流群
聲明:本站所有文章資源內(nèi)容,如無特殊說明或標(biāo)注,均為采集網(wǎng)絡(luò)資源。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系本站刪除。
