一種視頻重定向的方法、裝置、系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例提供了一種視頻重定向的方法、裝置、系統(tǒng)及計(jì)算機(jī)可讀介質(zhì),通過截獲視頻播放器發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令,將截獲視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到客戶端,實(shí)現(xiàn)視頻重定向,使客戶端根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻數(shù)據(jù)幀進(jìn)行解碼。其中視頻數(shù)據(jù)幀是由視頻播放器對(duì)加載的視頻文件解復(fù)用獲得的;在實(shí)現(xiàn)視頻重定向時(shí),節(jié)約了服務(wù)器計(jì)算資源和網(wǎng)絡(luò)傳輸帶寬,同時(shí)不依賴某一種視頻播放器,并且充分利用了客戶端的計(jì)算機(jī)資源。
【專利說明】一種視頻重定向的方法、裝置、系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息【技術(shù)領(lǐng)域】,特別涉及一種視頻重定向的方法、裝置、系統(tǒng)。
【背景技術(shù)】
[0002]隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,遠(yuǎn)程桌面成為一種流行技術(shù)。遠(yuǎn)程桌面技術(shù)通過登陸到遠(yuǎn)程服務(wù)器,將該遠(yuǎn)程服務(wù)器屏幕顯示的內(nèi)容傳遞到本地客戶端進(jìn)行顯示。遠(yuǎn)程桌面應(yīng)用并不僅指遠(yuǎn)程的屏幕顯示,還可以包含遠(yuǎn)程視頻傳送。
[0003]現(xiàn)有技術(shù)中,使用遠(yuǎn)程桌面的視頻播放器播放視頻文件時(shí),為了節(jié)約遠(yuǎn)程服務(wù)器計(jì)算資源和網(wǎng)絡(luò)傳輸帶寬,使用基于微軟?公司推出的DirectShow ?框架的Windows?Media Player?時(shí),在遠(yuǎn)程服務(wù)器上通過該視頻播放器加載視頻文件后,可以從DirectShow?中的Filter截獲視頻文件中未解碼的視頻數(shù)據(jù),在客戶端的DirectShow?框架中也插入Filter,接收遠(yuǎn)程服務(wù)器發(fā)送的視頻數(shù)據(jù)進(jìn)行解碼顯示。
[0004]但是,隨著遠(yuǎn)程桌面技術(shù)的成熟以及市場(chǎng)上視頻播放器種類不斷增加,Windows ?操作系統(tǒng)平臺(tái)下基于DirectShow⑩框架的解決方案不能適用其他視頻播放器。
【發(fā)明內(nèi)容】
[0005]針對(duì)現(xiàn)有技術(shù)中遠(yuǎn)程桌面環(huán)境下使用視頻播放器播放視頻文件時(shí),只有使用Windows? Media Player ?與DirectShow ?框架,才能解決遠(yuǎn)程服務(wù)器計(jì)算資源和網(wǎng)絡(luò)傳輸帶寬的問題,本發(fā)明實(shí)施例提供了一種視頻重定向的方法、裝置、系統(tǒng)及計(jì)算機(jī)可讀介質(zhì)。
[0006]第一方面,本發(fā)明實(shí)施例提供了一種視頻重定向的方法,包括:
[0007]截獲視頻播放器向虛擬顯示驅(qū)動(dòng)發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;所述視頻數(shù)據(jù)幀是由所述視頻播放器對(duì)加載的視頻文件解復(fù)用獲得的;
[0008]向所述客戶端發(fā)送截獲的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0009]結(jié)合第一方面,在第一種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括:
[0010]當(dāng)所述視頻播放器向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述虛擬顯示驅(qū)動(dòng)截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0011]結(jié)合第一方面,在第二種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括:
[0012]當(dāng)所述視頻播放器通過DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述數(shù)據(jù)幀解碼指令,所述DirectX?運(yùn)行庫調(diào)用所述虛擬顯示驅(qū)動(dòng)對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0013]結(jié)合第一方面,在第三種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括:
[0014]當(dāng)所述視頻播放器通過DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述DirectX?運(yùn)行庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0015]結(jié)合第一方面,在第四種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述頻數(shù)據(jù)幀解碼指令,具體包括:
[0016]當(dāng)所述視頻播放器調(diào)用DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0017]結(jié)合第一方面或者第一方面的第一至四種任一可能的實(shí)施方式,在第五種可能的實(shí)施方式中,所述視頻播放器運(yùn)行在虛擬機(jī)中。
[0018]第二方面,本發(fā)明實(shí)施例提供了服務(wù)器,包括:
[0019]截獲單元,用于截獲視頻播放器向虛擬顯示驅(qū)動(dòng)發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;所述視頻數(shù)據(jù)幀是由所述視頻播放器對(duì)加載的視頻文件解復(fù)用獲得的;
[0020]發(fā)送單元,用于向所述客戶端發(fā)送截獲的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0021]結(jié)合第二方面,在第一種可能的實(shí)施方式中,所述截獲單元,具體為所述虛擬顯示驅(qū)動(dòng),用于當(dāng)所述視頻播放器向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述虛擬顯示驅(qū)動(dòng)截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0022]結(jié)合第二方面,在第二種可能的實(shí)施方式中,所述截獲單元,具體為動(dòng)態(tài)鏈接庫,用于當(dāng)所述視頻播放器通過DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述數(shù)據(jù)幀解碼指令,所述DirectX?運(yùn)行庫調(diào)用所述虛擬顯示驅(qū)動(dòng)對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼時(shí),所述動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0023]結(jié)合第二方面,在第三種可能的實(shí)施方式中,所述截獲單元具體為DirectX運(yùn)行庫,用于當(dāng)所述視頻播放器通過所述DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述DirectX?運(yùn)行庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0024]結(jié)合第二方面,在第四種可能的實(shí)施方式中,所述截獲單元具體為動(dòng)態(tài)鏈接庫,用于當(dāng)所述視頻播放器調(diào)用DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0025]第三方面,本發(fā)明實(shí)施例提供了一種視頻重定向的系統(tǒng),包括客戶端和本發(fā)明實(shí)施例第二方面任一所述的服務(wù)器;其中,所述客戶端用于接收所述服務(wù)器發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;根據(jù)所述視頻數(shù)據(jù)幀解碼指令對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼。
[0026]第四方面,本發(fā)明實(shí)施例還提供了一種服務(wù)器,包括:包括中央處理器和存儲(chǔ)器,所述存儲(chǔ)器存儲(chǔ)執(zhí)行指令,當(dāng)所述服務(wù)器運(yùn)行時(shí),所述中央處理器與所述存儲(chǔ)器之間通信,所述中央處理器執(zhí)行所述執(zhí)行指令使得所述服務(wù)器執(zhí)行:
[0027]截獲視頻播放器向虛擬顯示驅(qū)動(dòng)發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;所述視頻數(shù)據(jù)幀是由所述視頻播放器對(duì)加載的視頻文件解復(fù)用獲得的;
[0028]向所述客戶端發(fā)送截獲的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0029]結(jié)合第四方面,在第一種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括:
[0030]當(dāng)所述視頻播放器向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述虛擬顯示驅(qū)動(dòng)截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0031]結(jié)合第四方面,在第二種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括:
[0032]當(dāng)所述視頻播放器通過DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述數(shù)據(jù)幀解碼指令,所述DirectX?運(yùn)行庫調(diào)用所述虛擬顯示驅(qū)動(dòng)對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0033]結(jié)合第四方面,在第三種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括:
[0034]當(dāng)所述視頻播放器通過DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述DirectX?運(yùn)行庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0035]結(jié)合第四方面,在第四種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述頻數(shù)據(jù)幀解碼指令,具體包括:
[0036]當(dāng)所述視頻播放器調(diào)用DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0037]結(jié)合第四方面或者第四方面的第一至四種任一可能的實(shí)施方式,在第五種可能的實(shí)施方式中,所述視頻播放器運(yùn)行在虛擬機(jī)中;其中,所述虛擬機(jī)運(yùn)行在所述服務(wù)器上。
[0038]第五方面,本發(fā)明實(shí)施例提供了一種視頻重定向系統(tǒng),包括客戶端和本發(fā)明第四方面任一所述的服務(wù)器;其中,所述客戶端用于接收所述服務(wù)器發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;根據(jù)所述視頻數(shù)據(jù)幀解碼指令對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼。
[0039]第六方面,本發(fā)明實(shí)施例還提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),包含計(jì)算機(jī)執(zhí)行指令,當(dāng)服務(wù)器的中央處理器執(zhí)行所述計(jì)算機(jī)執(zhí)行指令時(shí),使所述服務(wù)器執(zhí)行:
[0040]截獲視頻播放器向虛擬顯示驅(qū)動(dòng)發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;所述視頻數(shù)據(jù)幀是由所述視頻播放器對(duì)加載的視頻文件解復(fù)用獲得的;
[0041]向所述客戶端發(fā)送截獲的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0042]結(jié)合第六方面,在第一種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括:
[0043]所述視頻播放器調(diào)用DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,所述虛擬顯示驅(qū)動(dòng)截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0044]結(jié)合第六方面,在第二種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括:
[0045]當(dāng)所述視頻播放器通過DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述數(shù)據(jù)幀解碼指令,所述DirectX?運(yùn)行庫調(diào)用所述虛擬顯示驅(qū)動(dòng)對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0046]結(jié)合第六方面,在第三種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括:
[0047]當(dāng)所述視頻播放器通過DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述DirectX?運(yùn)行庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0048]結(jié)合第六方面,在第四種可能的實(shí)施方式中,所述截獲所述視頻數(shù)據(jù)幀和所述頻數(shù)據(jù)幀解碼指令,具體包括:
[0049]當(dāng)所述視頻播放器調(diào)用DirectX?運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
[0050]結(jié)合第六方面或者第六方面的第一至四種任一可能的實(shí)施方式,在第五種可能的實(shí)施方式中,所述視頻播放器運(yùn)行在虛擬機(jī)中;其中,所述虛擬機(jī)運(yùn)行在所述服務(wù)器上。
[0051]根據(jù)本發(fā)明實(shí)施例提供的視頻重定向的方法、裝置、系統(tǒng)及計(jì)算機(jī)可讀介質(zhì),截獲視頻播放器向虛擬顯示驅(qū)動(dòng)發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令,將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到客戶端,實(shí)現(xiàn)視頻重定向,使客戶端根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻數(shù)據(jù)幀進(jìn)行解碼,在實(shí)現(xiàn)視頻重定向時(shí),節(jié)約了服務(wù)器計(jì)算資源和網(wǎng)絡(luò)傳輸帶寬,同時(shí)不依賴某一種視頻播放器,并且充分利用了客戶端的計(jì)算機(jī)資源。
【專利附圖】
【附圖說明】
[0052]圖1為本發(fā)明實(shí)施例應(yīng)用場(chǎng)景系統(tǒng)結(jié)構(gòu)圖;
[0053]圖2為本發(fā)明實(shí)施例遠(yuǎn)程桌面服務(wù)器結(jié)構(gòu)示意圖;
[0054]圖3為本發(fā)明實(shí)施例實(shí)施方案示意圖;
[0055]圖4為本發(fā)明實(shí)施例實(shí)施方案示意圖;
[0056]圖5為本發(fā)明實(shí)施例實(shí)施方案示意圖;
[0057]圖6為本發(fā)明實(shí)施例實(shí)施方案示意圖;
[0058]圖7為本發(fā)明實(shí)施例實(shí)施方案流程圖;
[0059]圖8為本發(fā)明實(shí)施例客戶端結(jié)構(gòu)示意圖;
[0060]圖9為本發(fā)明實(shí)施例實(shí)施場(chǎng)景系統(tǒng)架構(gòu)圖;
[0061]圖10為本發(fā)明實(shí)施例服務(wù)器結(jié)構(gòu)圖;
[0062]圖11為本發(fā)明實(shí)施例系統(tǒng)結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0063]下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0064]遠(yuǎn)程桌面環(huán)境中,客戶端發(fā)起視頻播放請(qǐng)求,服務(wù)器根據(jù)客戶端的視頻播放請(qǐng)求,通過視頻播放器加載視頻文件,將該視頻文件的視頻數(shù)據(jù)流傳輸?shù)娇蛻舳诉M(jìn)行處理,這一過程稱為視頻重定向。本發(fā)明實(shí)施例中的服務(wù)器可以包括普通個(gè)人計(jì)算機(jī)或其他終端,也可以為商業(yè)服務(wù)器等,在這里并不具體限定。本發(fā)明實(shí)施例以向客戶端提供基于Windows?操作系統(tǒng)平臺(tái)的遠(yuǎn)程桌面服務(wù)為例。但是本發(fā)明方案并不僅限于Windows?操作系統(tǒng),根據(jù)本發(fā)明方案,同樣可以擴(kuò)展到其他常見的系統(tǒng)平臺(tái),如Linux?操作系統(tǒng)等。
[0065]本發(fā)明實(shí)施例提供了視頻重定向的方法,應(yīng)用于遠(yuǎn)程桌面場(chǎng)景。遠(yuǎn)程桌面場(chǎng)景通常由本地計(jì)算機(jī)和遠(yuǎn)程計(jì)算機(jī)組成。本地計(jì)算機(jī)通過訪問遠(yuǎn)程計(jì)算機(jī),將遠(yuǎn)程計(jì)算機(jī)桌面?zhèn)魉偷奖镜赜?jì)算機(jī)。本地計(jì)算機(jī),即本發(fā)明實(shí)施例中的客戶端;遠(yuǎn)程計(jì)算機(jī),即本發(fā)明實(shí)施例中的服務(wù)器。本發(fā)明實(shí)施例中的視頻重定向是指將服務(wù)器上視頻文件的視頻數(shù)據(jù)流傳送到客戶端處理的過程。其中一種遠(yuǎn)程桌面場(chǎng)景為虛擬桌面基礎(chǔ)架構(gòu)場(chǎng)景。虛擬桌面基礎(chǔ)架構(gòu)場(chǎng)景如圖1所示,本實(shí)施場(chǎng)景僅是一種示例性說明,只是給出了與本發(fā)明實(shí)施例相關(guān)的組成部分,但是圖1并不是對(duì)本發(fā)明應(yīng)用的具體限定。圖1中左側(cè)是虛擬桌面的客戶端,通常稱為瘦客戶端,客戶端的設(shè)備形式可以是普通計(jì)算機(jī)101a、平板電腦101b、智能手機(jī)IOlc等。它們通過網(wǎng)絡(luò)102使用遠(yuǎn)程桌面協(xié)議103訪問遠(yuǎn)程桌面服務(wù)。服務(wù)
器204a----104η提供了遠(yuǎn)程桌面的載體,用戶的虛擬桌面(Virtual Desktop)以虛擬機(jī)
205a、205b….205η的形式存在于服務(wù)器上。用戶通過客戶端訪問服務(wù)器上分配給該用戶的虛擬桌面(即虛擬機(jī)),該虛擬桌面將用戶訪問的內(nèi)容傳輸?shù)接脩舻目蛻舳诉M(jìn)行顯示。
[0066]以服務(wù)器204a為例,硬件結(jié)構(gòu)和軟件結(jié)構(gòu)是虛擬桌面基礎(chǔ)架構(gòu)中最重要的組件,它的典型結(jié)構(gòu)如圖2所示。服務(wù)器204a中的典型結(jié)構(gòu)包括3個(gè)部分,分別為硬件平臺(tái)300、虛擬化平臺(tái)Hypervisor301和虛擬機(jī)執(zhí)行空間302。硬件平臺(tái)中包括服務(wù)器物理結(jié)構(gòu)中的硬盤310、中央處理器311、網(wǎng)絡(luò)接口卡(即網(wǎng)卡)312和存儲(chǔ)器313。Hyperv i sor 301和虛擬機(jī)執(zhí)行空間302分別提供了虛擬機(jī)的硬件平臺(tái)和軟件平臺(tái)。Hypervisor它包含了虛擬機(jī)監(jiān)視器320a、320b"〃320n。Hypervisor是物理硬件和虛擬機(jī)之間的中間層,負(fù)責(zé)協(xié)調(diào)各個(gè)虛擬機(jī)對(duì)服務(wù)器硬件的訪問。虛擬機(jī)監(jiān)視器包括實(shí)現(xiàn)虛擬機(jī)的虛擬硬件平臺(tái)。圖3中,虛擬機(jī)監(jiān)視器320a中包含虛擬硬件平臺(tái)321a,虛擬硬件平臺(tái)中包含了虛擬出來的存儲(chǔ)器322,中央處理器323,硬盤324,顯卡325和網(wǎng)絡(luò)接口卡326等。虛擬機(jī)執(zhí)行空間302中運(yùn)行了多個(gè)虛擬機(jī)205a、205b....205η。虛擬機(jī)205a的軟件系統(tǒng)運(yùn)行在虛擬機(jī)監(jiān)視器320a的虛擬硬件平臺(tái)321a上,其他虛擬機(jī)的軟件系統(tǒng)也運(yùn)行在對(duì)應(yīng)的虛擬機(jī)監(jiān)視器的虛擬硬件平臺(tái)上??蛻舨僮飨到y(tǒng)330運(yùn)行在虛擬機(jī)205a中,客戶操作系統(tǒng)330包含了一個(gè)設(shè)備驅(qū)動(dòng)層331,設(shè)備驅(qū)動(dòng)層331安裝了虛擬顯示驅(qū)動(dòng)334、網(wǎng)絡(luò)接口卡驅(qū)動(dòng)336等驅(qū)動(dòng)程序。虛擬機(jī)205a中包括視頻播放器332。其中,客戶操作系統(tǒng)330可以為微軟?公司提供的Windows?操作系統(tǒng)平臺(tái)。根據(jù)本發(fā)明方案,同樣可以擴(kuò)展到其他常見的系統(tǒng)平臺(tái),如Linux?操作系統(tǒng)等。
[0067]用戶使用客戶端IOla登陸到虛擬機(jī)205a時(shí),用戶觀看視頻時(shí),比如觀看優(yōu)酷⑧網(wǎng)絡(luò)視頻,或者虛擬機(jī)本地視頻文件時(shí),通過視頻播放器332,加載視頻文件。本發(fā)明實(shí)施例以觀看本地視頻為例,通過顯示協(xié)議代理335接收到來自客戶端IOla的視頻播放請(qǐng)求,視頻播放器332根據(jù)該視頻播放請(qǐng)求,加載視頻文件。視頻播放器332對(duì)加載的視頻文件解復(fù)用獲得視頻數(shù)據(jù)幀。 [0068]視頻播放器332加載視頻文件后,啟動(dòng)視頻硬件加速功能,通過DirectX?運(yùn)行庫333向虛擬顯示驅(qū)動(dòng)334發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀處理指令。視頻硬件加速(DirectX? Video Acceleration,簡(jiǎn)稱為DXVA),是微軟?.公司專門定制的視頻加速規(guī)范,它共有兩個(gè)版本,分別是DXVA1.0和DXVA 2.0。DirectX?運(yùn)行庫是由微軟?公司創(chuàng)建的多媒體編程接口。由C++編程語言實(shí)現(xiàn),被廣泛使用于Microsoft? Windows?、Microsoft? Xbox?和Microsoft?Xbox360?電子游戲開發(fā),本發(fā)明實(shí)施例及后面發(fā)明實(shí)施例描述的DirectX?運(yùn)行庫與此相同。視頻硬件加速是指利用計(jì)算機(jī)硬件代替視頻播放器的軟件算法對(duì)視頻數(shù)據(jù)幀進(jìn)行處理。
[0069]通常,視頻數(shù)據(jù)幀發(fā)送到虛擬顯示驅(qū)動(dòng)334,根據(jù)視頻數(shù)據(jù)幀解碼指令,對(duì)該視頻數(shù)據(jù)幀進(jìn)行解碼。其中,在本發(fā)明實(shí)施例一種實(shí)施方案中,視頻數(shù)據(jù)幀及視頻數(shù)據(jù)幀處理指令發(fā)送至虛擬顯示驅(qū)動(dòng)334時(shí),虛擬顯示驅(qū)動(dòng)334截獲該視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令,并將截獲的該視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到顯示協(xié)議代理335,顯示協(xié)議代理335通過虛擬網(wǎng)絡(luò)接口卡326再經(jīng)物理網(wǎng)絡(luò)接口卡312,將截獲的該視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到客戶端101a。虛擬顯卡驅(qū)動(dòng)334實(shí)際上并沒有根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻數(shù)據(jù)幀進(jìn)行處理,而是將視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令截獲,并通過顯示協(xié)議代理335發(fā)送至客戶端IOla進(jìn)行處理。在實(shí)現(xiàn)視頻重定向時(shí),節(jié)約了服務(wù)器計(jì)算資源和網(wǎng)絡(luò)傳輸帶寬,同時(shí)不依賴某一種視頻播放器,并且充分利用了客戶端的計(jì)算機(jī)資源。本發(fā)明實(shí)施例中截獲具體是將視頻播放器332向虛擬顯示驅(qū)動(dòng)334發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令攔截,發(fā)送到客戶端101a,從而使視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀處理指令在服務(wù)器204a側(cè)并未進(jìn)行處理。
[0070]具體地,虛擬機(jī)205a中的視頻播放器332根據(jù)對(duì)應(yīng)的客戶端IOla發(fā)送的視頻播放請(qǐng)求,加載視頻文件之后,開啟視頻硬件加速,向虛擬顯示驅(qū)動(dòng)334發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。視頻播放器332加載視頻文件后,對(duì)加載后的視頻文件,即對(duì)視頻數(shù)據(jù)流解復(fù)用,獲得其中的視頻數(shù)據(jù)幀。具體地,就視頻播放而言,在DirectX?運(yùn)行庫333中定義了視頻硬件加速接口,通過視頻播放器332調(diào)用DirectX?.運(yùn)行庫333啟動(dòng)視頻硬件加速,通知虛擬顯示驅(qū)動(dòng)334根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻播放器332發(fā)送的視頻數(shù)據(jù)幀進(jìn)行解碼。當(dāng)視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送至虛擬顯示驅(qū)動(dòng)334時(shí),虛擬顯示驅(qū)動(dòng)334截獲視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。如圖3所示,在Windows?操作系統(tǒng)平臺(tái),虛擬顯示驅(qū)動(dòng)334為Windows? Display Driver Model (簡(jiǎn)稱WDDM顯示驅(qū)動(dòng)模型)或者為Windows? XP Display Driver Model (簡(jiǎn)稱XPDM顯示驅(qū)動(dòng)模型)。具體地,WDDM或XPDM顯示驅(qū)動(dòng)模型均包括DisplayDriver和Miniport Driver兩部分模塊。本發(fā)明實(shí)施例中,一種實(shí)施方案為虛擬顯示驅(qū)動(dòng)Display Driver模塊截獲視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。本發(fā)明實(shí)施例中虛擬顯示驅(qū)動(dòng)Display Driver模塊將截獲的視頻數(shù)據(jù)巾貞和視頻數(shù)據(jù)幀解碼指令,發(fā)送到顯示協(xié)議代理335,顯示協(xié)議代理335將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到客戶端IOla進(jìn)行處理。具體地以WDDM顯示驅(qū)動(dòng)模型為例,,一種實(shí)現(xiàn)方案為WDDM顯示驅(qū)動(dòng)模型在Display Driver模塊中定義視頻硬件加速接口,當(dāng)視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令通過該接口時(shí),截獲該視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。另一種實(shí)施方案是Display Driver模塊截獲該視頻數(shù)據(jù)巾貞和視頻數(shù)據(jù)巾貞解碼指令,經(jīng)MiniportDriver模塊,將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到顯示協(xié)議代理335,顯示協(xié)議代理335向客戶端IOla發(fā)送截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。
[0071]如圖4所示,本發(fā)明實(shí)施例另一種實(shí)施方案中,虛擬機(jī)205a中的視頻播放器332根據(jù)對(duì)應(yīng)的客戶端IOla發(fā)送的視頻播放請(qǐng)求,加載視頻文件之后,開啟視頻硬件加速,向虛擬顯示驅(qū)動(dòng)334發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。視頻播放器332加載視頻文件后,對(duì)加載后的視頻文件,即對(duì)視頻數(shù)據(jù)流解復(fù)用,獲得其中的視頻數(shù)據(jù)幀。具體地,就視頻播放而言,在Di rectX?運(yùn)行庫333中定義了視頻硬件加速接口,通過視頻播放器332調(diào)用DirectX?運(yùn)行庫333啟動(dòng)視頻硬件加速,通知虛擬顯示驅(qū)動(dòng)334根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻播放器332發(fā)送的視頻數(shù)據(jù)幀進(jìn)行解碼。當(dāng)所述視頻播放器332調(diào)用DirectX?運(yùn)行庫333向虛擬顯示驅(qū)動(dòng)334發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。即在視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令經(jīng)過DirectX?運(yùn)行庫333之前,動(dòng)態(tài)鏈接庫截獲該視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。具體的,其中一種動(dòng)態(tài)鏈接庫實(shí)現(xiàn)方式為,采用Hook技術(shù)截獲視頻播放器332對(duì)DirectX?運(yùn)行庫333產(chǎn)生的調(diào)用,建立對(duì)DirectX?運(yùn)行庫333的動(dòng)態(tài)鏈接庫文件(dll文件),在注冊(cè)表中將該動(dòng)態(tài)鏈接庫文件設(shè)置為最先加載,以此截獲視頻播放器332對(duì)DirectX?運(yùn)行庫333的調(diào)用,從而截獲視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到顯示協(xié)議代理335,顯示協(xié)議代理335將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到客戶端101a。
[0072]如圖5所示,本發(fā)明實(shí)施例另一種實(shí)施方案中,虛擬機(jī)205a中的視頻播放器332根據(jù)對(duì)應(yīng)的客戶端IOla發(fā)送的視頻播放請(qǐng)求,加載視頻文件之后,開啟視頻硬件加速,向虛擬顯示驅(qū)動(dòng)334發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。視頻播放器332加載視頻文件后,對(duì)加載后的視頻文件,即對(duì)視頻數(shù)據(jù)流解復(fù)用,獲得其中的視頻數(shù)據(jù)幀。具體地,就視頻播放而言,在DirectX?運(yùn)行庫333中定義了視頻硬件加速接口,通過視頻播放器332調(diào)用DirectX?運(yùn)行庫333啟動(dòng)視頻硬件加速,通知虛擬顯示驅(qū)動(dòng)334根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻播放器332發(fā)送的視頻數(shù)據(jù)幀進(jìn)行解碼。在視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令經(jīng)過DirectX?運(yùn)行庫333時(shí),DirectX ?運(yùn)行庫333截獲該視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令,將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到顯示協(xié)議代理335,顯示協(xié)議代理335將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到客戶端101a。具體地,一種DirectX?運(yùn)行庫實(shí)現(xiàn)方案為在DirectX⑧運(yùn)行庫333中定義視頻硬件加速接口,當(dāng)視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令通過該接口時(shí),通過視頻硬件加速接口函數(shù)截獲該視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。
[0073]如圖6所示,本發(fā)明實(shí)施例另一種實(shí)現(xiàn)方案中,虛擬機(jī)205a中的視頻播放器332根據(jù)對(duì)應(yīng)的客戶端IOla發(fā)送的視頻播放請(qǐng)求,加載視頻文件之后,開啟視頻硬件加速,向虛擬顯示驅(qū)動(dòng)334發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。視頻播放器332加載視頻文件后,對(duì)加載后的視頻文件,即對(duì)視頻數(shù)據(jù)流解復(fù)用,獲得其中的視頻數(shù)據(jù)幀。具體地,就視頻播放而言,在DirectX?運(yùn)行庫333中定義了視頻硬件加速接口,通過視頻播放器332調(diào)用DirectX?運(yùn)行庫333啟動(dòng)視頻硬件加速,通知虛擬顯示驅(qū)動(dòng)334根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻播放器332發(fā)送的視頻數(shù)據(jù)幀進(jìn)行解碼。當(dāng)所述視頻播放器332向所述虛擬顯示驅(qū)動(dòng)334發(fā)送所述視頻數(shù)據(jù)幀和所述數(shù)據(jù)幀解碼指令,DirectX?運(yùn)行庫333調(diào)用所述虛擬顯示驅(qū)動(dòng)334對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。即在視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令通過DirectX?運(yùn)行庫333之后,到達(dá)虛擬顯示驅(qū)動(dòng)334之前,動(dòng)態(tài)鏈接庫截獲該視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。具體地,其中一種動(dòng)態(tài)鏈接庫實(shí)現(xiàn)方式為采用Hook技術(shù)截獲DirectX?運(yùn)行庫333對(duì)虛擬顯示驅(qū)動(dòng)334的調(diào)用,建立對(duì)虛擬顯示驅(qū)動(dòng)334的動(dòng)態(tài)連接庫文件(dll文件)。將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到顯示協(xié)議代理335,顯示協(xié)議代理335將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令發(fā)送到客戶端101a。
[0074]本發(fā)明實(shí)施例上述各實(shí)施方案,在實(shí)現(xiàn)視頻重定向時(shí),節(jié)約了服務(wù)器計(jì)算資源和網(wǎng)絡(luò)傳輸帶寬,同時(shí)不依賴某一種視頻播放器,并且充分利用了客戶端的計(jì)算機(jī)資源。
[0075]如圖7所示,本發(fā)明實(shí)施例中,以虛擬顯示驅(qū)動(dòng)334截獲視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀處理指令為例,介紹本發(fā)明實(shí)施例流程。服務(wù)器204a上的虛擬機(jī)205a通過顯示協(xié)議代理335接收來自客戶端IOla發(fā)送的視頻播放請(qǐng)求。步驟701:視頻播放器332根據(jù)視頻播放請(qǐng)求加載視頻文件;步驟702:視頻播放器向虛擬顯示驅(qū)動(dòng)334發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;步驟703:虛擬顯示驅(qū)動(dòng)334截獲視頻播放器332向虛擬顯示驅(qū)動(dòng)334發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;步驟704:顯示協(xié)議代理335向客戶端IOla發(fā)送截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;步驟705:客戶端IOla接收視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;步驟706:客戶端IOla根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻數(shù)據(jù)幀進(jìn)行解碼。
[0076]如圖8所示,客戶端101a,通過遠(yuǎn)程協(xié)議接收模塊801接收虛擬機(jī)205a通過顯示協(xié)議代理335發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。具體地,圖8,作為客戶端的一種示例性說明,并不是對(duì)本發(fā)明中使用的客戶端的具體限定,同時(shí)附圖中只是給出了一些組件的說明,對(duì)于實(shí)現(xiàn)客戶端正常功能的一些其他組件此處并沒有說明,但是本領(lǐng)域技術(shù)人員根據(jù)具體實(shí)現(xiàn),可以從附圖中獲得這些組件。客戶端IOla包括存儲(chǔ)器800、中央處理器810、網(wǎng)絡(luò)接口卡820、顯卡830、硬盤840和串行接口 850,串行接口 850可以連接鼠標(biāo)和鍵盤等外設(shè)。其中,顯卡830連接顯示器860,在另一種客戶端IOla中,顯示器860可以與客戶端IOla連接在一起,而不必是兩個(gè)獨(dú)立的裝置??蛻舳薎Ola運(yùn)行時(shí),存儲(chǔ)器800中加載計(jì)算機(jī)程序,圖8中,存儲(chǔ)器800中包括遠(yuǎn)程桌面協(xié)議接收模塊801、視頻播放器802和操作系統(tǒng)803,遠(yuǎn)程桌面協(xié)議接收模塊801用于接收網(wǎng)絡(luò)接口卡820接收到的虛擬機(jī)205a通過顯示協(xié)議代理335發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。視頻播放器802對(duì)遠(yuǎn)程桌面協(xié)議接收模塊801接收到的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令進(jìn)行處理。操作系統(tǒng)803為客戶端提供系統(tǒng)運(yùn)行環(huán)境,可以為Windows?操作系統(tǒng)、Linux?操作系統(tǒng)及其他操作系統(tǒng),本發(fā)明對(duì)此不作具體限定。視頻播放器802根據(jù)接收到的視頻數(shù)據(jù)幀解碼指令對(duì)視頻數(shù)據(jù)幀進(jìn)行解碼。
[0077]當(dāng)客戶端IOla支持視頻硬件加速時(shí),視頻播放器802調(diào)用視頻硬件加速應(yīng)用程序接口(API),啟動(dòng)視頻硬件加速,將視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀處理指令通過視頻硬件加速API發(fā)送至相應(yīng)的硬件(如Nvidia?、AMD?或ATI?等公司的顯卡芯片,或者Intel?Atom CPU芯片中的核芯顯卡),進(jìn)行視頻硬件加速,從而根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻數(shù)據(jù)幀進(jìn)行解碼,本實(shí)施例中,當(dāng)操作系統(tǒng)803為Mircosof t?.操作系統(tǒng)時(shí),視頻硬件加速API可以為DirectX?運(yùn)行庫。如果支持視頻硬件加速,則遠(yuǎn)程協(xié)議接收模塊501接收虛擬機(jī)205a通過顯示協(xié)議代理335發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀處理指令,視頻播放器502通過調(diào)用視頻硬件加速API,啟動(dòng)視頻硬件加速。客戶端101啟動(dòng)視頻硬件加速功能,可以節(jié)約客戶端IOla中央處理器的計(jì)算資源。本發(fā)明實(shí)施例中如果客戶端IOla為非Mircosof t?操作系統(tǒng),則可以使用其他視頻硬件加速功能根據(jù)視頻數(shù)據(jù)幀處理對(duì)視頻數(shù)據(jù)幀進(jìn)行處理。
[0078]本發(fā)明實(shí)施例另一種應(yīng)用場(chǎng)景為遠(yuǎn)程桌面連接服務(wù)。當(dāng)某臺(tái)計(jì)算機(jī)開啟了遠(yuǎn)程桌面連接功能后,就可以通過網(wǎng)絡(luò)在另一端控制這臺(tái)計(jì)算機(jī),通過遠(yuǎn)程桌面功能我們可以實(shí)時(shí)的操作這臺(tái)開啟了遠(yuǎn)程桌面連接功能的計(jì)算機(jī)。這里,我們稱開啟了遠(yuǎn)程桌面連接功能的計(jì)算機(jī)為服務(wù)器,另一端控制這臺(tái)服務(wù)器的計(jì)算機(jī)為客戶端。如圖9所示,服務(wù)器902開啟了遠(yuǎn)程桌面連接功能,客戶端901遠(yuǎn)程連接到服務(wù)器902。本應(yīng)用場(chǎng)景中的服務(wù)器902可以為普通的個(gè)人計(jì)算機(jī)或其他終端,也可以為商業(yè)服務(wù)器等;客戶端可以為普通的個(gè)人計(jì)算機(jī),也可以為平板電腦、智能手機(jī)等,在本發(fā)明實(shí)施例中不作具體限定,本發(fā)明實(shí)施例以向客戶端提供基于Windows?操作系統(tǒng)平臺(tái)的遠(yuǎn)程桌面服務(wù)為例。
[0079]服務(wù)器902接收通過網(wǎng)絡(luò)接口卡接收來自客戶端901發(fā)送的視頻播放請(qǐng)求,比如觀看優(yōu)酷?網(wǎng)絡(luò)視頻,或者服務(wù)器902本地視頻文件時(shí),通過視頻播放器,加載視頻文件。本發(fā)明實(shí)施例以觀看本地視頻為例,視頻播放器加載本地視頻文件,并對(duì)加載的視頻文件進(jìn)行解難復(fù)用獲得視頻數(shù)據(jù)幀。啟動(dòng)視頻硬件加速,向虛擬顯示驅(qū)動(dòng)334發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令。截獲視頻播放器發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令,顯示協(xié)議代理335將截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令最終通過物理網(wǎng)絡(luò)接口卡312發(fā)送到客戶端901,使客戶端902根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻數(shù)據(jù)幀進(jìn)行解碼。具體截獲視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀的實(shí)現(xiàn)方案請(qǐng)參見本發(fā)明實(shí)施例對(duì)圖2、圖3、圖4、圖5和圖6的描述。關(guān)于客戶端901根據(jù)接收到的視頻數(shù)據(jù)幀解碼指令對(duì)視頻數(shù)據(jù)幀進(jìn)行解碼的過程請(qǐng)參見圖8的描述,在此不再贅述。本發(fā)明實(shí)施例在圖9所示場(chǎng)景下的實(shí)施方案,在實(shí)現(xiàn)視頻重定向時(shí),節(jié)約了服務(wù)器計(jì)算資源和網(wǎng)絡(luò)傳輸帶寬,同時(shí)不依賴某一種視頻播放器,并且充分利用了客戶端的計(jì)算機(jī)資源。
[0080]基于上述對(duì)本發(fā)明實(shí)施例的描述,本發(fā)明實(shí)施例提供了一種服務(wù)器10,如圖10所示,包括截獲單元1001和發(fā)送單元1002。其中截獲單元1001,用于截獲視頻播放器向虛擬顯示驅(qū)動(dòng)發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;所述視頻數(shù)據(jù)幀是由所述視頻播放器對(duì)加載的視頻文件解復(fù)用獲得的;發(fā)送單元1002,用于向所述客戶端發(fā)送截獲的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。其中,所述截獲單元1001,為所述虛擬顯示驅(qū)動(dòng)。在另一種實(shí)施方案中,所述截獲單元1001,為DirectX?運(yùn)行庫。在第三種實(shí)施方案中,所述截獲單元1001,為動(dòng)態(tài)鏈接庫。所述截獲單元1001,為動(dòng)態(tài)鏈接庫時(shí),截獲視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令有兩種方式:其中一種方式為當(dāng)所述視頻播放器332調(diào)用DirectX?運(yùn)行庫333向所述虛擬顯示驅(qū)動(dòng)334發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。即當(dāng)所述視頻播放器332調(diào)用DirectX?運(yùn)行庫333向所述虛擬顯示驅(qū)動(dòng)334發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令到達(dá)所述DirectX?運(yùn)行庫333之前,動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令;另一種方式為當(dāng)所述視頻播放器332通過DirectX?運(yùn)行庫333向所述虛擬顯示驅(qū)動(dòng)334發(fā)送所述視頻數(shù)據(jù)幀和所述數(shù)據(jù)幀解碼指令,DirectX?運(yùn)行庫333調(diào)用所述虛擬顯示驅(qū)動(dòng)334根據(jù)所述視頻數(shù)據(jù)幀解碼指令對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。即當(dāng)所述視頻播放器調(diào)用Di rec tX?運(yùn)行庫333向所述虛擬顯示驅(qū)動(dòng)334發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令通過所述DirectX?運(yùn)行庫333之后到達(dá)所述虛擬顯示驅(qū)動(dòng)334之前,動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。關(guān)于本發(fā)明實(shí)施例服務(wù)器10功能的具體實(shí)現(xiàn)可以參見發(fā)明實(shí)施例對(duì)圖2、圖3、圖4、圖5和圖6的描述。[0081 ] 本發(fā)明實(shí)施例提供的服務(wù)器在實(shí)現(xiàn)視頻重定向時(shí),節(jié)約了服務(wù)器計(jì)算資源和網(wǎng)絡(luò)傳輸帶寬,同時(shí)不依賴某一種視頻播放器,并且充分利用了客戶端的計(jì)算機(jī)資源。
[0082]如圖11所示,為一種視頻重定向系統(tǒng),包括圖10所述的服務(wù)器10和客戶端11??蛻舳?1接收如圖10所述的服務(wù)器發(fā)送的截獲的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令,客戶端根據(jù)視頻數(shù)據(jù)幀解碼指令對(duì)視頻數(shù)據(jù)幀進(jìn)行解碼。具體描述可以參見本發(fā)明實(shí)施例關(guān)于服務(wù)器和客戶端部分的描述,在此不再贅述。本發(fā)明實(shí)施例中提供的服務(wù)器10和客戶端11具體可以為普通的計(jì)算機(jī)、移動(dòng)終端、工作站或?qū)S梅?wù)器等,本發(fā)明不作具體限定,具有存儲(chǔ)器和至少一個(gè)中央處理器,所述存儲(chǔ)器與所述至少一個(gè)中央處理器通過總線相連,存儲(chǔ)器存儲(chǔ)計(jì)算機(jī)指令,所述至少一個(gè)中央處理器用于執(zhí)行存儲(chǔ)器中的計(jì)算機(jī)指令,同時(shí)也包含通用的外部接口等實(shí)現(xiàn)服務(wù)器功能的一些必要組件。其中,存儲(chǔ)器中存儲(chǔ)的計(jì)算機(jī)指令的算法可以參照發(fā)明實(shí)施例中對(duì)應(yīng)的方法描述。
[0083]本發(fā)明實(shí)施例提供的視頻重定向的系統(tǒng),在實(shí)現(xiàn)視頻重定向時(shí),節(jié)約了服務(wù)器計(jì)算資源和網(wǎng)絡(luò)傳輸帶寬,同時(shí)不依賴某一種視頻播放器,并且充分利用了客戶端的計(jì)算機(jī)資源。
[0084]本發(fā)明實(shí)施例提供的基于虛擬桌面的遠(yuǎn)程桌面架構(gòu),本領(lǐng)域技術(shù)人員可以意識(shí)至IJ,本發(fā)明并不限于本實(shí)施例的所描述的虛擬桌面架構(gòu),對(duì)于基于其他類型的虛擬桌面的遠(yuǎn)程桌面本發(fā)明同樣適用。另外,本發(fā)明并不僅僅適用于基于虛擬桌面的遠(yuǎn)程桌面架構(gòu),同樣也適用于其他向遠(yuǎn)程客戶端提供視頻數(shù)據(jù)的應(yīng)用場(chǎng)景。
[0085]本領(lǐng)域普通技術(shù)人員可以意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計(jì)算機(jī)軟件和電子硬件的結(jié)合來實(shí)現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
[0086]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡(jiǎn)潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
[0087]在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所公開的系統(tǒng)、裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0088]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
[0089]另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。
[0090]所述功能如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:NAS(Network AttachedStorage)、U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM, Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0091]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種視頻重定向的方法,其特征在于,包括: 截獲視頻播放器向虛擬顯示驅(qū)動(dòng)發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;所述視頻數(shù)據(jù)幀是由所述視頻播放器對(duì)加載的視頻文件解復(fù)用獲得的; 向所述客戶端發(fā)送截獲的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
2.如權(quán)利要求1所述的方法,其特征在于,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括: 當(dāng)所述視頻播放器向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述虛擬顯示驅(qū)動(dòng)截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
3.如權(quán)利要求1所述的方法,其特征在于,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括: 當(dāng)所述視頻播放器通過DirectX運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述數(shù)據(jù)幀解碼指令,所述DirectX運(yùn)行庫調(diào)用所述虛擬顯示驅(qū)動(dòng)對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
4.如權(quán)利要求1所述的方法,其特征在于,所述截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令,具體包括: 當(dāng)所述視頻播放器通過DirectX運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述DirectX運(yùn)行庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
5.如權(quán)利要求1所述`的方法,其特征在于,所述截獲所述視頻數(shù)據(jù)幀和所述頻數(shù)據(jù)幀解碼指令,具體包括: 當(dāng)所述視頻播放器調(diào)用DirectX運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
6.如權(quán)利要求1至5所述的方法,其特征在于,所述視頻播放器運(yùn)行在虛擬機(jī)中。
7.一種服務(wù)器,其特征在于,包括: 截獲單元,用于截獲視頻播放器向虛擬顯示驅(qū)動(dòng)發(fā)送視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;所述視頻數(shù)據(jù)幀是由所述視頻播放器對(duì)加載的視頻文件解復(fù)用獲得的; 發(fā)送單元,用于向所述客戶端發(fā)送截獲的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
8.如權(quán)利要求7所述的服務(wù)器,其特征在于,所述截獲單元,具體為所述虛擬顯示驅(qū)動(dòng),用于當(dāng)所述視頻播放器向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述虛擬顯示驅(qū)動(dòng)截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
9.如權(quán)利要求7所述的服務(wù)器,其特征在于,所述截獲單元,具體為動(dòng)態(tài)鏈接庫,用于當(dāng)所述視頻播放器通過DirectX運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述數(shù)據(jù)幀解碼指令,所述DirectX運(yùn)行庫調(diào)用所述虛擬顯示驅(qū)動(dòng)對(duì)所述視頻數(shù)據(jù)幀進(jìn)行解碼時(shí),所述動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
10.如權(quán)利要求7所述的服務(wù)器,其特征在于,所述截獲單元具體為DirectX運(yùn)行庫,用于當(dāng)所述視頻播放器通過所述DirectX運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送的所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述DirectX運(yùn)行庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
11.如權(quán)利要求7所述的服務(wù)器,其特征在于,所述截獲單元具體為動(dòng)態(tài)鏈接庫,用于當(dāng)所述視頻播放器調(diào)用DirectX運(yùn)行庫向所述虛擬顯示驅(qū)動(dòng)發(fā)送所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令時(shí),所述動(dòng)態(tài)鏈接庫截獲所述視頻數(shù)據(jù)幀和所述視頻數(shù)據(jù)幀解碼指令。
12.一種視頻重定向的系統(tǒng),其特征在于,包括客戶端和權(quán)利要求7至11任一所述的服務(wù)器;其中,所述客戶端用于接收所述服務(wù)器發(fā)送的視頻數(shù)據(jù)幀和視頻數(shù)據(jù)幀解碼指令;根據(jù)所述視頻數(shù)據(jù)幀解碼指令對(duì)所述`視頻數(shù)據(jù)幀進(jìn)行解碼。
【文檔編號(hào)】H04N21/858GK103873924SQ201210535654
【公開日】2014年6月18日 申請(qǐng)日期:2012年12月12日 優(yōu)先權(quán)日:2012年12月12日
【發(fā)明者】陳普, 許天錫 申請(qǐng)人:華為技術(shù)有限公司