本發(fā)明涉及視頻處理,尤其涉及一種視頻播放方法、裝置、電子設(shè)備及存儲介質(zhì)。
背景技術(shù):
1、隨著語音社交、直播社交等互聯(lián)網(wǎng)社交方式的興起,虛擬禮物成為一種比較常見的交互功能,通常地,在用戶贈送虛擬禮物后,會在客戶端上播放虛擬禮物對應(yīng)的動畫效果。常見的虛擬禮物視頻動畫的有mp4、svga(scalablevector?graphicsanimation,可伸縮矢量圖形動畫)、vap(videoanimationplayer,視頻動畫播放器)等格式。
2、目前,在電腦端播放視頻多媒體文件,需要使用ffmpeg(fastforwardmovingpicture?experts?group,快轉(zhuǎn)動態(tài)圖像專家組)進行視頻解碼,使用directx進行渲染。在視頻播放過程中,使用directx進行渲染需要占用一個窗口句柄,渲染的視頻位于整個窗口,導(dǎo)致播放一個視頻就需要開辟一個窗口。并且,窗口渲染的內(nèi)容,無法和其它顯示的視頻內(nèi)容進行疊加,存在顯示層級的問題。由此,播放多個視頻時資源占用較大,軟件容易崩潰,對軟件的使用影響較大。
技術(shù)實現(xiàn)思路
1、本發(fā)明提供一種一種視頻播放方法、裝置、電子設(shè)備及存儲介質(zhì),用以解決現(xiàn)有技術(shù)中電腦端播放視頻存在顯示層級問題、浪費窗口句柄資源的缺陷,實現(xiàn)徹底解決視頻播放的層級問題,顯示的視頻內(nèi)容可以和其它視頻內(nèi)容任意疊加,視頻不再依賴窗口顯示,降低軟件崩潰所帶來的影響。
2、本發(fā)明提供一種視頻播放方法,包括:
3、第一進程將至少一個目標(biāo)視頻的播放信息發(fā)送給第二進程;
4、所述第二進程根據(jù)所述播放信息,加載并解碼所述目標(biāo)視頻,依次得到所述目標(biāo)視頻的每一幀視頻幀數(shù)據(jù);
5、所述第二進程將所述每一幀視頻幀數(shù)據(jù)依次寫入共享內(nèi)存塊;
6、所述第一進程從所述共享內(nèi)存塊依次讀取所述每一幀視頻幀數(shù)據(jù);
7、所述第一進程將所述每一幀視頻幀數(shù)據(jù)依次渲染至顯示界面以實現(xiàn)播放。
8、根據(jù)本發(fā)明提供的一種視頻播放方法,所述所述第二進程將所述每一幀視頻幀數(shù)據(jù)依次寫入共享內(nèi)存塊,包括:
9、所述第二進程每將一幀視頻幀數(shù)據(jù)寫入所述共享內(nèi)存塊時,判斷當(dāng)前寫入的視頻幀數(shù)據(jù)是否為所述目標(biāo)視頻的最后一幀視頻幀數(shù)據(jù);
10、如果否,將所述共享內(nèi)存塊的預(yù)設(shè)內(nèi)存標(biāo)志位更改為第一預(yù)設(shè)標(biāo)識,其中,所述第一預(yù)設(shè)標(biāo)識用于表征當(dāng)前寫入的視頻幀數(shù)據(jù)為未讀取狀態(tài);
11、如果是,將所述共享內(nèi)存塊的預(yù)設(shè)內(nèi)存標(biāo)志位更改為第二預(yù)設(shè)標(biāo)識,其中,所述第二預(yù)設(shè)標(biāo)識用于表征所述目標(biāo)視頻為寫入完成狀態(tài)。
12、根據(jù)本發(fā)明提供的一種視頻播放方法,所述所述第一進程從所述共享內(nèi)存塊依次讀取所述每一幀視頻幀數(shù)據(jù),包括:
13、所述第一進程每訪問一次所述共享內(nèi)存塊時,讀取并判斷所述預(yù)設(shè)內(nèi)存標(biāo)志位;
14、如果所述預(yù)設(shè)內(nèi)存標(biāo)志位為所述第一預(yù)設(shè)標(biāo)識,則讀取一幀視頻幀數(shù)據(jù),并將所述預(yù)設(shè)內(nèi)存標(biāo)志位更改為第三預(yù)設(shè)標(biāo)識,其中,所述第三預(yù)設(shè)標(biāo)識用于表征已寫入的視頻幀數(shù)據(jù)為已讀取狀態(tài)。
15、根據(jù)本發(fā)明提供的一種視頻播放方法,所述所述第一進程每訪問一次所述共享內(nèi)存塊時,讀取并判斷所述預(yù)設(shè)內(nèi)存標(biāo)志位之后,還包括:
16、如果所述預(yù)設(shè)內(nèi)存標(biāo)志位為所述第二預(yù)設(shè)標(biāo)識,則讀取所述共享內(nèi)存塊中的最后一幀視頻幀數(shù)據(jù),并將所述預(yù)設(shè)內(nèi)存標(biāo)志位更改為第四預(yù)設(shè)標(biāo)識,其中,所述第四預(yù)設(shè)標(biāo)識用于表征所述目標(biāo)視頻為讀取完成狀態(tài);
17、結(jié)束讀取所述共享內(nèi)存塊并釋放內(nèi)存資源。
18、根據(jù)本發(fā)明提供的一種視頻播放方法,所述所述第一進程每訪問一次所述共享內(nèi)存塊時,讀取并判斷所述預(yù)設(shè)內(nèi)存標(biāo)志位之后,還包括:
19、如果所述預(yù)設(shè)內(nèi)存標(biāo)志位為所述第三預(yù)設(shè)標(biāo)識,重復(fù)讀取所述預(yù)設(shè)內(nèi)存標(biāo)志位;
20、如果重復(fù)讀取所述預(yù)設(shè)內(nèi)存標(biāo)志位為所述第三預(yù)設(shè)標(biāo)識的次數(shù)超過預(yù)設(shè)閾值,則停止讀取所述共享內(nèi)存塊并釋放內(nèi)存資源。
21、根據(jù)本發(fā)明提供的一種視頻播放方法,所述所述第二進程根據(jù)所述播放信息,加載并解碼所述目標(biāo)視頻,依次得到所述目標(biāo)視頻的每一幀視頻幀數(shù)據(jù),包括:
22、所述第二進程根據(jù)所述播放信息,加載所述目標(biāo)視頻;
23、解碼所述目標(biāo)視頻;
24、當(dāng)解碼得到第一幀視頻幀數(shù)據(jù),創(chuàng)建所述共享內(nèi)存塊,并將所述共享內(nèi)存塊的內(nèi)存地址發(fā)送給所述第一進程;
25、所述所述第二進程將所述每一幀視頻幀數(shù)據(jù)依次寫入共享內(nèi)存塊,包括:
26、所述第二進程將所述第一幀視頻幀數(shù)據(jù)寫入所述共享內(nèi)存塊。
27、根據(jù)本發(fā)明提供的一種視頻播放方法,所述所述第一進程將所述每一幀視頻幀數(shù)據(jù)依次渲染至顯示界面以實現(xiàn)播放,包括:
28、所述第一進程獲取所述目標(biāo)視頻的播放區(qū)域信息;
29、根據(jù)所述播放區(qū)域信息,將所述目標(biāo)視頻的所述每一幀視頻幀數(shù)據(jù)依次渲染至對應(yīng)的播放區(qū)域中,其中,所述播放區(qū)域位于所述顯示界面的范圍內(nèi)。
30、根據(jù)本發(fā)明提供的一種視頻播放方法,所述方法還包括:
31、當(dāng)所述第二進程檢測到無法向所述共享內(nèi)存塊寫入數(shù)據(jù)時,停止解碼所述目標(biāo)視頻,并重新啟動進程,以等待接收下一次解碼任務(wù)。
32、本發(fā)明還提供一種視頻播放裝置,包括:
33、發(fā)送模塊,用于第一進程將至少一個目標(biāo)視頻的播放信息發(fā)送給第二進程;
34、解碼模塊,用于所述第二進程根據(jù)所述播放信息,加載并解碼所述目標(biāo)視頻,依次得到所述目標(biāo)視頻的每一幀視頻幀數(shù)據(jù);
35、寫入模塊,用于所述第二進程將所述每一幀視頻幀數(shù)據(jù)依次寫入共享內(nèi)存塊;
36、讀取模塊,用于所述第一進程從所述共享內(nèi)存塊依次讀取所述每一幀視頻幀數(shù)據(jù),
37、渲染模塊,用于所述第一進程將所述每一幀視頻幀數(shù)據(jù)依次渲染至顯示界面以實現(xiàn)播放。
38、本發(fā)明還提供一種電子設(shè)備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機程序,所述處理器執(zhí)行所述程序時實現(xiàn)如上述任一種所述視頻播放方法。
39、本發(fā)明還提供一種非暫態(tài)計算機可讀存儲介質(zhì),其上存儲有計算機程序,該計算機程序被處理器執(zhí)行時實現(xiàn)如上述任一種所述視頻播放方法。
40、本發(fā)明提供的一種視頻播放方法、裝置、電子設(shè)備及存儲介質(zhì),當(dāng)需要播放視頻時,通過將視頻解碼、視頻渲染分為兩個進程執(zhí)行,視頻解碼進程將解碼出來視頻幀數(shù)據(jù)寫入共享內(nèi)存,視頻渲染進程從共享內(nèi)存讀取視頻幀數(shù)據(jù)進行渲染,從而在顯示界面中實現(xiàn)播放。本發(fā)明基于內(nèi)存共享實現(xiàn)了高效的視頻播放性能,視頻不再依賴視頻播放組件進行解碼渲染,無需依賴窗口顯示,可以在顯示界面的任意區(qū)域進行顯示,并且徹底解決視頻播放的層級問題,顯示的內(nèi)容可以和其它內(nèi)容任意疊加,實現(xiàn)多個視頻播放顯示;相對于現(xiàn)有技術(shù)中視頻播放組件內(nèi)存占用較大,播放過多視頻容易導(dǎo)致軟件崩潰,本發(fā)明可以將崩潰導(dǎo)致的影響降到最低,也能降低對cpu的消耗及要求。