本發(fā)明涉及一種實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,屬于計(jì)算機(jī)圖形處理和跨進(jìn)程通信,尤其是針對windows程序跨進(jìn)程實(shí)現(xiàn)視頻畫面數(shù)據(jù)的高效共享與傳輸?shù)姆椒ā?/p>
背景技術(shù):
1、隨著實(shí)時(shí)圖形處理技術(shù)的發(fā)展,需要在不同的應(yīng)用程序之間共享和傳輸視頻畫面數(shù)據(jù)的場景越來越多,例如游戲直播、虛擬現(xiàn)實(shí)(vr)、增強(qiáng)現(xiàn)實(shí)(ar)等多媒體應(yīng)用。在這些應(yīng)用中,高效的數(shù)據(jù)共享機(jī)制對于保證用戶體驗(yàn)和系統(tǒng)性能至關(guān)重要。傳統(tǒng)的視頻數(shù)據(jù)共享方法往往涉及到顯著的cpu/gpu資源消耗、較高的延遲以及復(fù)雜的數(shù)據(jù)同步問題,尤其是在需要實(shí)時(shí)共享高分辨率視頻內(nèi)容的場合。因此需要改進(jìn)。
技術(shù)實(shí)現(xiàn)思路
1、為彌補(bǔ)現(xiàn)有技術(shù)的不足,本發(fā)明提供一種實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,實(shí)現(xiàn)windows程序跨進(jìn)程進(jìn)行低開銷、低延遲視頻畫面共享,?增強(qiáng)windows在多媒體交互和實(shí)時(shí)應(yīng)用中的功能,拓寬windows在虛擬現(xiàn)實(shí)、增強(qiáng)現(xiàn)實(shí)等領(lǐng)域的應(yīng)用范圍。
2、為了達(dá)到上述目的,本發(fā)明所采用的技術(shù)方案是:
3、本發(fā)明的實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,包括如下步驟:
4、(1)為windows程序創(chuàng)建c++原生插件,該插件封裝了spout框架,并為windows程序提供了發(fā)送和接收視頻畫面的相關(guān)接口;
5、(1-a)在windows操作系統(tǒng)上開辟共享內(nèi)存,用于管理視頻發(fā)送者和接收者的名稱、共享句柄、長寬及格式信息;
6、(1-b)管理direct3d?11或?12來創(chuàng)建共享資源、復(fù)制資源以及讀取資源,以支持視頻畫面的跨進(jìn)程共享;
7、(2)發(fā)送視頻時(shí),通過windows程序加載上述插件dll,創(chuàng)建發(fā)送方名稱,并選擇需要發(fā)送的texture;使用get?native?texture?ptr獲取原始texture指針,并通過commandbuffer將數(shù)據(jù)高效傳遞給插件;
8、(3)接收視頻時(shí),通過windosw程序加載上述插件dll,選擇發(fā)送方名稱,并通過原生插件讀取到texture數(shù)據(jù);使用create?external?texture創(chuàng)建windows程序可以直接顯示的texture。
9、進(jìn)一步優(yōu)選的,所述所述步驟(1)中的c++原生插件,?使用mingw-w64編譯c++生成winspout.dll,windows程序中使用dllimport引入插件接口。
10、進(jìn)一步優(yōu)選的,所述步驟(1-a)中windows操作系統(tǒng)上開辟共享內(nèi)存,是通過createfilemappinga為指定文件創(chuàng)建或打開文件映射對象,文件映射對象允許通過內(nèi)存訪問內(nèi)容,這樣實(shí)現(xiàn)多個(gè)進(jìn)程間共享數(shù)據(jù)。
11、進(jìn)一步優(yōu)選的,所述步驟(1-b)中,通過direct3d11或12的create?texture2d創(chuàng)建一個(gè)共享的texture資源,需要描述結(jié)構(gòu)體d3d11_texture2d_desc中設(shè)置misc?flags字段為d3d11_resource_misc_shared;通過open?shared?resource方法訪問此資源,copyresource方法復(fù)制到此資源。
12、進(jìn)一步優(yōu)選的,所述步驟(2)中,使用windows程序的command?buffer能夠創(chuàng)建渲染指令,通過graphics.execute?command?buffer執(zhí)行此指令,能夠最小化渲染線程的延遲和開銷,提高windows程序與插件交互效率。
13、進(jìn)一步優(yōu)選的,所述步驟(3)中的createexternal?texture允許windows應(yīng)用程序直接訪問和顯示來自外部源的texture,從而實(shí)現(xiàn)低延遲的視頻畫面顯示。
14、進(jìn)一步優(yōu)選的,所述步驟(1-b)中,管理direct3d能夠自動匹配和轉(zhuǎn)換不同版本的direct3d資源,保證視頻數(shù)據(jù)在不同版本的direct3d環(huán)境中能夠被正確處理和顯示。
15、本發(fā)明的有益效果是:主要基于開源的spout框架,利用顯卡的圖形渲染,在各個(gè)程序之間,?通過創(chuàng)建共享資源,寫入和讀取視頻畫面,從而實(shí)現(xiàn)了windows程序跨進(jìn)程進(jìn)行低開銷、低延遲視頻畫面共享,簡化數(shù)據(jù)同步,?增強(qiáng)windows在多媒體交互和實(shí)時(shí)應(yīng)用中的功能,拓寬windows在虛擬現(xiàn)實(shí)、增強(qiáng)現(xiàn)實(shí)等領(lǐng)域的應(yīng)用范圍。
1.一種實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,其特征在于,該方法包括如下步驟:
2.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,其特征在于,所述所述步驟(1)中的c++原生插件,?使用mingw-w64編譯c++生成winspout.dll,windows程序中使用dllimport引入插件接口。
3.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,其特征在于,所述步驟(1-a)中windows操作系統(tǒng)上開辟共享內(nèi)存,是通過createfilemappinga為指定文件創(chuàng)建或打開文件映射對象,文件映射對象允許通過內(nèi)存訪問內(nèi)容,這樣實(shí)現(xiàn)多個(gè)進(jìn)程間共享數(shù)據(jù)。
4.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,其特征在于,所述步驟(1-b)中,通過direct3d?11或12的createtexture2d創(chuàng)建一個(gè)共享的texture資源,需要描述結(jié)構(gòu)體d3d11_texture2d_desc中設(shè)置miscflags字段為d3d11_resource_misc_shared,這樣就可以多進(jìn)程去讀取這個(gè)共享texture資源;通過opensharedresource方法訪問此資源,copyresource方法復(fù)制到此資源。
5.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,其特征在于,所述步驟(2)中,使用windows程序的commandbuffer能夠創(chuàng)建渲染指令,通過graphics.executecommandbuffer執(zhí)行此指令,能夠最小化渲染線程的延遲和開銷,提高windows程序與插件交互效率。
6.根據(jù)權(quán)利要求1所述的實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,其特征在于,所述步驟(3)中的createexternaltexture允許windows應(yīng)用程序直接訪問和顯示來自外部源的texture,從而實(shí)現(xiàn)低延遲的視頻畫面顯示。
7.根據(jù)權(quán)利要求4所述的實(shí)現(xiàn)windows跨進(jìn)程發(fā)送和接收視頻畫面的方法,其特征在于,步驟(1-b)中,所述管理direct3d能夠自動匹配和轉(zhuǎn)換不同版本的direct3d資源,保證視頻數(shù)據(jù)在不同版本的direct3d環(huán)境中能夠被正確處理和顯示。