本技術(shù)涉及終端設(shè)備,尤其涉及一種視頻播放方法、電子設(shè)備、芯片系統(tǒng)及存儲(chǔ)介質(zhì)。
背景技術(shù):
1、電子設(shè)備中安裝的一些應(yīng)用(例如,圖庫應(yīng)用、視頻剪輯應(yīng)用等)可以提供視頻播放功能和視頻剪輯功能。通過視頻播放功能播放視頻時(shí),可以顯示視頻播放進(jìn)度,例如,可以通過進(jìn)度條、進(jìn)度環(huán)、進(jìn)度展示幀等方式展示視頻的播放進(jìn)度;通過視頻剪輯功能剪輯視頻時(shí),也可以通過進(jìn)度條、進(jìn)度環(huán)、進(jìn)度展示幀等方式顯示視頻的不同位置的畫面。
2、無論是視頻播放場(chǎng)景還是視頻剪輯場(chǎng)景,用戶均可以通過在進(jìn)度條、進(jìn)度環(huán)或進(jìn)度展示幀上的拖動(dòng)操作觸發(fā)電子設(shè)備對(duì)視頻進(jìn)行幀播放;然而,在視頻的幀播放場(chǎng)景中,視頻畫面的顯示過程比較卡頓、不流暢。
技術(shù)實(shí)現(xiàn)思路
1、本技術(shù)提供一種視頻播放方法、電子設(shè)備、芯片系統(tǒng)及存儲(chǔ)介質(zhì),可以降低視頻的幀播放場(chǎng)景中視頻畫面的卡頓情況,提高幀播放場(chǎng)景視頻畫面的流暢度。
2、為達(dá)到上述目的,本技術(shù)第一方面采用如下技術(shù)方案:
3、本技術(shù)第一方面提供一種視頻播放方法,應(yīng)用于電子設(shè)備,該方法包括:
4、顯示第一界面,所述第一界面包括第一區(qū)域和第一控件,所述第一區(qū)域包括第一視頻的第一視頻幀;
5、接收到作用在所述第一界面上的滑動(dòng)操作;
6、響應(yīng)于所述滑動(dòng)操作,將所述第一控件從第一位置沿第一軌跡移動(dòng);
7、將所述第一控件從所述第一位置沿所述第一軌跡移動(dòng)的過程中:
8、在將所述第一控件從所述第一位置移動(dòng)到所述第一軌跡上的第二位置的情況下,通過第一解碼器解碼第一幀組中的視頻幀,通過第二解碼器解碼第二幀組中的視頻幀,在所述第一區(qū)域顯示所述第一幀組中解碼后的第二視頻幀,其中,所述第一控件在所述第二位置時(shí)表示的播放進(jìn)度在所述第一幀組表示的進(jìn)度區(qū)間內(nèi);
9、在將所述第一控件從所述第二位置移動(dòng)到所述第一軌跡上的第三位置的情況下,通過所述第一解碼器解碼第三幀組中的視頻幀,在所述第一區(qū)域顯示所述第二幀組中解碼后的第三視頻幀,其中,所述第一控件在所述第三位置時(shí)表示的播放進(jìn)度在所述第二幀組表示的進(jìn)度區(qū)間內(nèi),所述第一幀組、所述第二幀組和所述第三幀組為所述第一視頻中時(shí)間連續(xù)的三組視頻幀組。
10、本技術(shù)中,滑動(dòng)操作觸發(fā)電子設(shè)備顯示某個(gè)時(shí)刻的視頻幀時(shí),通過第一解碼器解碼該時(shí)刻的視頻幀所在的視頻幀組(第一幀組)中的視頻幀,通過第二解碼器解碼第一幀組的下一個(gè)視頻幀組(第二幀組)中的視頻幀;當(dāng)由于拖動(dòng)操作觸發(fā)電子設(shè)備顯示第二幀組中的某個(gè)視頻幀時(shí),由于解碼器已經(jīng)提前解碼并緩存,所以,可以直接從第二解碼器對(duì)應(yīng)的緩存空間獲取解碼后的視頻幀進(jìn)行渲染顯示,提高了顯示畫面的速度,減少了卡頓情況,提高畫面流暢度,當(dāng)然,同時(shí)也需要通過第一解碼器解碼第二幀組的下一個(gè)視頻幀組(第三幀組)中的視頻幀,從而使得一直有視頻幀組中的視頻幀提前解碼,提高了幀播放場(chǎng)景下畫面的流暢度。
11、作為第一方面的另一實(shí)現(xiàn)方式,將所述第一控件從所述第一位置沿所述第一軌跡移動(dòng)的過程中,所述方法還包括:
12、在將所述第一控件從所述第三位置移動(dòng)到所述第一軌跡上的第四位置(圖4中的位置4)的情況下,通過所述第二解碼器解碼第四幀組中的視頻幀,在所述第一區(qū)域顯示所述第三幀組中解碼后的第四視頻幀,其中,所述第一控件在所述第四位置(位置4)時(shí)表示的播放進(jìn)度在所述第三幀組表示的進(jìn)度區(qū)間內(nèi),所述第一幀組、所述第二幀組、所述第三幀組和所述第四幀組為時(shí)間連續(xù)的四組視頻幀組。
13、本技術(shù)中,在第一控件隨著滑動(dòng)操作繼續(xù)移動(dòng)的過程中,同樣通過交替使用解碼器解碼下一個(gè)視頻幀組中的視頻幀,從而使得總有解碼器提前解碼視頻幀,在真正需要顯示后續(xù)的視頻幀的情況下,能夠直接從解碼器獲取已經(jīng)解碼的視頻幀進(jìn)行渲染顯示,從而提高了畫面的流暢度。
14、作為第一方面的另一實(shí)現(xiàn)方式,在通過第一解碼器解碼第一幀組中的視頻幀之前,所述方法還包括:
15、根據(jù)所述滑動(dòng)操作的第一觸點(diǎn)位置確定所述第一視頻的播放進(jìn)度為第一時(shí)刻;
16、解析所述第一視頻,確定所述第一時(shí)刻對(duì)應(yīng)的視頻幀所在的視頻幀組為所述第一幀組;
17、在通過第二解碼器解碼第二幀組中的視頻幀之前,所述方法還包括:
18、確定所述第一時(shí)刻對(duì)應(yīng)的視頻幀的播放方式為正向播放;
19、在所述第一時(shí)刻對(duì)應(yīng)的視頻幀的播放方式為正向播放的情況下,確定所述第一視頻中位于所述第一幀組的下一個(gè)視頻幀組為所述第二幀組。
20、本技術(shù)中,可以通過滑動(dòng)操作的實(shí)時(shí)觸點(diǎn)位置確定視頻的播放進(jìn)度,然后找到播放進(jìn)度對(duì)應(yīng)的視頻幀所在的視頻幀組,在該播放進(jìn)度對(duì)應(yīng)的視頻幀所在的視頻幀組還未解碼的情況下,通過一個(gè)解碼器解碼;相應(yīng)的,還可以確定幀播放的過程時(shí)正向播放(當(dāng)前觸點(diǎn)位置確定的播放時(shí)刻大于上一個(gè)觸點(diǎn)位置確定的播放時(shí)刻)還是倒向播放(當(dāng)前觸點(diǎn)位置確定的播放時(shí)刻小于上一個(gè)觸點(diǎn)位置確定的播放時(shí)刻),在正向播放的情況下,通過另一解碼器解碼下一個(gè)視頻幀組,以提前解碼。
21、在正向播放的情況下,下一個(gè)視頻幀組為滿足以下條件的視頻幀組:與當(dāng)前視頻幀組相鄰、且時(shí)間戳大于當(dāng)前視頻幀組的時(shí)間戳。視頻幀組的時(shí)間戳可以為視頻幀組中任一視頻幀的時(shí)間戳。
22、在倒向播放的情況下,通過另一解碼器解碼上一個(gè)視頻幀組,以提前解碼,上一個(gè)視頻幀組為滿足以下條件的視頻幀組:與當(dāng)前視頻幀組相鄰、且時(shí)間戳小于當(dāng)前視頻幀組的時(shí)間戳。
23、作為第一方面的另一實(shí)現(xiàn)方式,在根據(jù)所述滑動(dòng)操作的第一觸點(diǎn)位置確定所述第一視頻的播放進(jìn)度為第一時(shí)刻之后,所述方法還包括:
24、確定所述第一視頻的播放進(jìn)度為所述第一時(shí)刻時(shí)所述第一控件的位置為所述第二位置;
25、將所述第一控件沿所述第一軌跡移動(dòng)到所述第二位置。
26、在本技術(shù)中,第一控件在第一軌跡上的位置和播放進(jìn)度相關(guān),從用戶的角度,操控性較好、且直觀。
27、作為第一方面的另一實(shí)現(xiàn)方式,在通過所述第一解碼器解碼第三幀組中的視頻幀之前,所述方法還包括:
28、根據(jù)所述滑動(dòng)操作的第二觸點(diǎn)位置確定所述第一視頻的播放進(jìn)度為第二時(shí)刻;
29、解析所述第一視頻,確定所述第二時(shí)刻對(duì)應(yīng)的視頻幀所在的視頻幀組為所述第二幀組;
30、確定所述第二幀組已經(jīng)分配所述第二解碼器解碼;
31、確定所述第二時(shí)刻對(duì)應(yīng)的視頻幀的播放方式為正向播放;
32、在所述第二幀組已經(jīng)分配所述第二解碼器解碼、且所述第二時(shí)刻對(duì)應(yīng)的視頻幀的播放方式為正向播放的情況下,確定所述第一視頻中位于所述第二幀組的下一歌視頻幀組為所述第三幀組。
33、在本技術(shù)中,在當(dāng)前播放進(jìn)度對(duì)應(yīng)的視頻幀所在的視頻幀組已經(jīng)分配了解碼器解碼的情況下,可以根據(jù)播放方式通過另一解碼器對(duì)下一個(gè)或者上一個(gè)視頻幀組中的視頻幀進(jìn)行解碼,從而能夠隨著用戶的滑動(dòng)操作提前解碼可能待顯示的下一個(gè)或者上一個(gè)視頻幀組。
34、作為第一方面的另一實(shí)現(xiàn)方式,在根據(jù)所述滑動(dòng)操作的第二觸點(diǎn)位置確定所述第一視頻的播放進(jìn)度為第二時(shí)刻之后,所述方法還包括:
35、確定所述第一視頻的播放進(jìn)度為所述第二時(shí)刻時(shí)所述第一控件的位置為所述第三位置;
36、將所述第一控件沿所述第一軌跡移動(dòng)到所述第三位置。
37、作為第一方面的另一實(shí)現(xiàn)方式,所述確定所述第二時(shí)刻對(duì)應(yīng)的視頻幀的播放方式為正向播放包括:
38、確定所述第二時(shí)刻大于所述第一時(shí)刻;
39、相應(yīng)的,在確定所述第二時(shí)刻小于所述第一時(shí)刻的情況下,確定所述第二時(shí)刻對(duì)應(yīng)的視頻幀的播放方式為倒向播放。
40、本技術(shù)中,可以根據(jù)連續(xù)的兩個(gè)播放進(jìn)度對(duì)應(yīng)的播放時(shí)刻的關(guān)系確定當(dāng)前時(shí)刻對(duì)應(yīng)的視頻幀的播放方式,確定過程簡(jiǎn)單、快捷。
41、作為第一方面的另一實(shí)現(xiàn)方式,在根據(jù)所述滑動(dòng)操作的第二觸點(diǎn)位置確定所述第一視頻的播放進(jìn)度為第二時(shí)刻之后,所述方法還包括:
42、計(jì)算所述第二時(shí)刻和所述第一時(shí)刻的第一差值的絕對(duì)值;
43、確定所述第一差值的絕對(duì)值大于第一時(shí)長(zhǎng)。
44、作為第一方面的另一實(shí)現(xiàn)方式,計(jì)算所述第二時(shí)刻和所述第一時(shí)刻的第一差值的絕對(duì)值之后,所述方法還包括:
45、若所述第一差值的絕對(duì)值不大于所述第一時(shí)長(zhǎng),則不再確定所述第二時(shí)刻所在的視頻幀組,也不再確定所述第二時(shí)刻所在的視頻幀組的下一個(gè)視頻幀組。
46、本技術(shù)中,由于人眼對(duì)于幀率的感知并沒有那么高,所以,對(duì)于特別接近的兩個(gè)播放進(jìn)度(時(shí)間差值不大于第一時(shí)長(zhǎng))對(duì)應(yīng)的視頻幀,可以不再播放后一個(gè)播放進(jìn)度對(duì)應(yīng)的視頻幀,對(duì)于不是特別接近的兩個(gè)播放進(jìn)度(時(shí)間差值大于第一時(shí)長(zhǎng))對(duì)應(yīng)的視頻幀,需要播放后一個(gè)播放進(jìn)度對(duì)應(yīng)的視頻幀。第一時(shí)長(zhǎng)與人眼對(duì)幀率的感知相關(guān),例如,可以設(shè)置16.7ms、15ms、18ms、25ms等。所以,第一時(shí)長(zhǎng)用于過濾視頻幀使得幀率在某個(gè)范圍內(nèi)。
47、作為第一方面的另一實(shí)現(xiàn)方式,確定所述第一時(shí)刻對(duì)應(yīng)的視頻幀所在的視頻幀組為所述第一幀組之后,所述方法還包括:
48、記錄所述第一幀組中的首個(gè)視頻幀的時(shí)間戳和最后一個(gè)視頻幀的時(shí)間戳;
49、在根據(jù)所述滑動(dòng)操作的第二觸點(diǎn)位置確定所述第一視頻的播放進(jìn)度為第二時(shí)刻之后,在解析所述第一視頻,確定所述第二時(shí)刻對(duì)應(yīng)的視頻幀所在的視頻幀組為所述第二幀組之前,所述方法還包括:
50、確定所述第二時(shí)刻不在所述第一幀組中的首個(gè)視頻幀的時(shí)間戳和最后一個(gè)視頻幀的時(shí)間戳的時(shí)間范圍內(nèi)。
51、作為第一方面的另一實(shí)現(xiàn)方式,在根據(jù)所述滑動(dòng)操作的第二觸點(diǎn)位置確定所述第一視頻的播放進(jìn)度為第二時(shí)刻之后,所述方法包括:
52、若所述第二時(shí)刻在所述第一幀組中的首個(gè)視頻幀的時(shí)間戳和最后一個(gè)視頻幀的時(shí)間戳范圍內(nèi),則從解碼所述第一幀組的第一解碼器獲取所述第二時(shí)刻對(duì)應(yīng)的解碼后的視頻幀,在所述第一區(qū)域顯示所述第二時(shí)刻對(duì)應(yīng)的解碼后的視頻幀。
53、本技術(shù)中,若所述第二時(shí)刻在所述第一幀組中的首個(gè)視頻幀的時(shí)間戳和最后一個(gè)視頻幀的時(shí)間戳范圍內(nèi),說明第二時(shí)刻對(duì)應(yīng)的視頻幀在所述第一幀組中,由于第一幀組已經(jīng)在待顯示第一時(shí)刻對(duì)應(yīng)的視頻幀時(shí)分配解碼器解碼,所以,不需要再次分配解碼器對(duì)第一幀組進(jìn)行解碼,而是可以直接從解碼所述第一幀組的第一解碼器獲取所述第二時(shí)刻對(duì)應(yīng)的解碼后的視頻幀,在所述第一區(qū)域顯示所述第二時(shí)刻對(duì)應(yīng)的解碼后的視頻幀;當(dāng)然,若所述第二時(shí)刻不在所述第一幀組中的首個(gè)視頻幀的時(shí)間戳和最后一個(gè)視頻幀的時(shí)間戳范圍內(nèi),則說明第二時(shí)刻對(duì)應(yīng)的視頻幀不為第一幀組中的視頻幀,需要確定第二時(shí)刻對(duì)應(yīng)的視頻幀所在的視頻幀組,從而從確定的視頻幀組對(duì)應(yīng)的解碼器中獲取解碼后的視頻幀。
54、作為第一方面的另一實(shí)現(xiàn)方式,在根據(jù)所述滑動(dòng)操作的第二觸點(diǎn)位置確定所述第一視頻的播放進(jìn)度為第二時(shí)刻之后,所述方法還包括:
55、計(jì)算所述第二時(shí)刻和所述第一時(shí)刻的第一差值的絕對(duì)值;
56、在所述第一差值的絕對(duì)值大于第二時(shí)長(zhǎng)的情況下,設(shè)置所述第一解碼器和所述第二解碼器均不解碼視頻幀組中的非關(guān)鍵幀;
57、在所述第一差值的絕對(duì)值不大于所述第二時(shí)長(zhǎng)的情況下,設(shè)置所述第一解碼器和所述第二解碼器按照解碼順序解碼視頻幀組中的視頻幀。
58、第二時(shí)長(zhǎng)大于第一時(shí)長(zhǎng),在所述第一差值的絕對(duì)值大于第二時(shí)長(zhǎng)(例如,500ms、400ms、600ms、700ms等)的情況下,說明用戶的滑動(dòng)操作較快,這種情況下,用戶并不需要感知畫面的快速切換過程;可以通過解碼器僅解碼一個(gè)視頻幀組中的關(guān)鍵幀,從而使得解碼器快速完成當(dāng)前視頻幀組的解碼,當(dāng)然,在顯示視頻幀時(shí),也可以顯示一個(gè)視頻幀組中的關(guān)鍵幀,從而提高了解碼速度、畫面流暢度。
59、作為第一方面的另一實(shí)現(xiàn)方式,所述通過第一解碼器解碼第一幀組中的視頻幀包括:
60、通過所述第一解碼器按照所述第一幀組中的多個(gè)視頻幀的解碼順序解碼所述第一幀組中的多個(gè)視頻幀;
61、通過所述第一解碼器每解碼所述第一幀組中的一個(gè)視頻幀,將解碼后的視頻幀存儲(chǔ)在第一緩存空間;
62、所述第一時(shí)刻對(duì)應(yīng)的視頻幀包括:
63、在所述第一緩存空間中時(shí)間戳與所述第一時(shí)刻的差值小于或等于第一值的視頻幀,所述第一值為相鄰的兩個(gè)視頻幀的時(shí)間戳的差值的一半;
64、或者,在所述第一緩存空間中已緩存的解碼后的視頻幀中時(shí)間戳與所述第一時(shí)刻的差值最小的一個(gè)視頻幀;
65、或者,在所述第一緩存空間中已緩存的關(guān)鍵幀。
66、在具體實(shí)現(xiàn)時(shí),可以根據(jù)用戶的滑動(dòng)操作快慢,設(shè)置顯示不同的視頻幀,例如,當(dāng)用戶的滑動(dòng)操作較慢時(shí),解碼器有足夠時(shí)間解碼一個(gè)視頻幀組中的每個(gè)視頻幀,可以從緩存空間獲取到與時(shí)間戳與所述第一時(shí)刻的差值小于或等于第一值的視頻幀;當(dāng)滑動(dòng)操作較快時(shí),解碼器沒有足夠時(shí)間解碼一個(gè)視頻幀組中的每個(gè)視頻幀,可以從緩存空間獲取到已經(jīng)解碼的視頻幀中時(shí)間戳與所述第一時(shí)刻的差值最小的一個(gè)視頻幀;當(dāng)滑動(dòng)操作非??鞎r(shí),可以從緩存空間獲取解碼順序中第一個(gè)解碼的關(guān)鍵幀(i幀),相應(yīng)的,非關(guān)鍵幀包括p幀、b幀,當(dāng)然,若一組視頻幀無b幀,則非關(guān)鍵幀為p幀。
67、作為第一方面的另一實(shí)現(xiàn)方式,在所述第一區(qū)域顯示所述第一幀組中解碼后的第二視頻幀之前,所述方法還包括:
68、確定對(duì)所述第一幀組進(jìn)行解碼的解碼器為第一解碼器;
69、從所述第一解碼器中獲取所述第一時(shí)刻對(duì)應(yīng)的視頻幀,所述第一時(shí)刻對(duì)應(yīng)的視頻幀為所述第二視頻幀。
70、作為第一方面的另一實(shí)現(xiàn)方式,所述確定對(duì)所述第一幀組進(jìn)行解碼的解碼器為第一解碼器包括:
71、計(jì)算所述第一時(shí)刻和所述第一解碼器對(duì)應(yīng)的第一緩存空間中緩存的首個(gè)視頻幀的時(shí)間戳的第二差值;
72、在所述第二差值在第一時(shí)間范圍內(nèi)時(shí),確定對(duì)所述第一幀組進(jìn)行解碼的解碼器為第一解碼器。
73、作為第一方面的另一實(shí)現(xiàn)方式,在計(jì)算所述第一時(shí)刻和所述第一解碼器對(duì)應(yīng)的第一緩存空間中緩存的首個(gè)視頻幀的時(shí)間戳的第二差值之后,所述方法還包括:
74、若所述第二差值不在第一時(shí)間范圍內(nèi)時(shí),則計(jì)算所述第一時(shí)刻和所述第二解碼器對(duì)應(yīng)的第二緩存空間中緩存的首個(gè)視頻幀的時(shí)間戳的第三差值,以確定對(duì)所述第一幀組進(jìn)行解碼的解碼器是否為所述第二解碼器。
75、本技術(shù)中,由于通過至少兩個(gè)解碼器進(jìn)行解碼,所以,可以通過每組視頻幀中的首個(gè)視頻幀的時(shí)間戳與確定的播放進(jìn)度(時(shí)刻)的關(guān)系先確定解碼該播放進(jìn)度對(duì)應(yīng)的視頻幀組的解碼器,然后,再從該解碼器的緩存空間獲取具體的視頻幀。
76、第二方面,提供一種電子設(shè)備,包括處理器,處理器用于調(diào)用存儲(chǔ)器中存儲(chǔ)的計(jì)算機(jī)程序,實(shí)現(xiàn)本技術(shù)第一方面任一項(xiàng)的方法。
77、第三方面,提供一種芯片,包括處理器,處理器與存儲(chǔ)器耦合,處理器執(zhí)行存儲(chǔ)器中存儲(chǔ)的計(jì)算機(jī)程序,以使得電子設(shè)備實(shí)現(xiàn)本技術(shù)第一方面任一項(xiàng)的方法。
78、第四方面,提供一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)程序,當(dāng)計(jì)算機(jī)指令在電子設(shè)備上運(yùn)行時(shí),使得電子設(shè)備實(shí)現(xiàn)本技術(shù)第一方面任一項(xiàng)的方法。
79、第五方面,本技術(shù)實(shí)施例提供了一種計(jì)算機(jī)程序產(chǎn)品,當(dāng)計(jì)算機(jī)程序產(chǎn)品在設(shè)備上運(yùn)行時(shí),使得電子設(shè)備執(zhí)行本技術(shù)第一方面任一項(xiàng)的方法。
80、可以理解的是,上述第二方面至第五方面的有益效果可以參見上述第一方面中的相關(guān)描述,在此不再贅述。