本發(fā)明涉及圖像處理技術領域,尤其涉及基于SPICE協(xié)議的圖像傳輸方法及裝置。
背景技術:
隨著計算機和網絡技術的不斷發(fā)展,云計算變得越來越重要,虛擬桌面是云計算技術的一個典型應用,能夠為用戶提供遠程的計算機桌面服務。SPICE(Simple Protocol for Independent Computing Environment,)協(xié)議是用于遠程桌面的協(xié)議,基于SPICE協(xié)議能夠將桌面圖像的變化部分圖像直接傳輸至用戶終端,不用傳輸整幅桌面圖像。但由于采用直接傳輸圖像的方式,在傳輸圖像時占用帶寬高。
技術實現(xiàn)要素:
本發(fā)明的主要目的在于提出一種基于SPICE協(xié)議的圖像傳輸方法及裝置,旨在解決基于SPICE協(xié)議傳輸圖像時占用帶寬高的技術問題。
為實現(xiàn)上述目的,本發(fā)明提供一種基于SPICE協(xié)議的圖像傳輸方法,所述基于SPICE協(xié)議的圖像傳輸方法包括以下步驟:
在接收到服務器基于SPICE協(xié)議發(fā)送的當前幀圖像與上一幀圖像的變化圖像時,將所述變化圖像與所述上一幀圖像進行合成,以獲得當前幀圖像;
將獲得的所述當前幀圖像劃分為多個宏塊,分別對每個宏塊執(zhí)行相應的編碼壓縮處理;
將所述多個宏塊執(zhí)行編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務器,以供所述服務器將所述編碼壓縮數(shù)據發(fā)送至終端,供所述終端在接收到所述編碼壓縮數(shù)據時,對所述編碼壓縮數(shù)據進行解碼后獲得所述當前幀圖像。
優(yōu)選地,所述將獲得的所述當前幀圖像劃分為多個宏塊,分別對每個宏塊執(zhí)行相應的編碼壓縮處理的步驟包括:
將獲得的所述當前幀圖像劃分為多個宏塊,分別判斷每個宏塊是否為 P-SKIP前向預測宏塊;
當宏塊為P-SKIP宏塊時,對所述宏塊執(zhí)行P-SKIP宏塊編碼壓縮處理;
當宏塊不為P-SKIP宏塊時,對所述宏塊執(zhí)行P宏塊編碼壓縮處理。
優(yōu)選地,所述將獲得的所述當前幀圖像劃分為多個宏塊,分別判斷每個宏塊是否為P-SKIP宏塊步驟包括:
確定所述變化圖像對應的宏塊坐標范圍;
將獲得的所述當前幀圖像劃分為多個宏塊,確定每個宏塊的參考坐標;
依次判斷每個宏塊的參考坐標是否處于所述變化圖像對應的宏塊坐標范圍內;
在宏塊的參考坐標處于所述變化圖像對應的宏塊坐標范圍內時,判斷所述宏塊為P-SKIP宏塊;
在宏塊的參考坐標不處于所述變化圖像對應的宏塊坐標范圍內時,判斷所述宏塊不為P-SKIP宏塊。
優(yōu)選地,所述將獲得的所述當前幀圖像劃分為多個宏塊,確定每個宏塊的參考坐標的步驟包括:
將獲得的所述當前幀圖像劃分為多個宏塊,確定每個宏塊的參考點;
獲取每個宏塊的參考點坐標,將每個宏塊的參考點坐標設置為所述宏塊的參考坐標。
優(yōu)選地,所述在接收到服務器基于SPICE協(xié)議發(fā)送的當前幀圖像與上一幀圖像的變化圖像時,將所述變化圖像與所述上一幀圖像進行合成,以獲得當前幀圖像的步驟之前,所述基于SPICE協(xié)議的圖像傳輸方法還包括步驟:
在接收到服務器基于SPICE協(xié)議發(fā)送的一幀完整圖像以及所述完整圖像對應的IDR即時解碼刷新幀編碼指令時,對所述完整圖像進行IDR幀編碼;
將編碼后的編碼數(shù)據傳輸至所述服務器,以供所述服務器將所述編碼數(shù)據發(fā)送至終端,供所述終端在接收到所述編碼數(shù)據時,對所述編碼數(shù)據進行解碼后獲得所述完整圖像。
此外,為實現(xiàn)上述目的,本發(fā)明還提出一種基于SPICE協(xié)議的圖像傳輸裝置,所述基于SPICE協(xié)議的圖像傳輸裝置包括:
合成模塊,用于在接收到服務器基于SPICE協(xié)議發(fā)送的當前幀圖像與上 一幀圖像的變化圖像時,將所述變化圖像與所述上一幀圖像進行合成,以獲得當前幀圖像;
編碼模塊,用于將獲得的所述當前幀圖像劃分為多個宏塊,分別對每個宏塊執(zhí)行相應的編碼壓縮處理;
發(fā)送模塊,用于將所述多個宏塊執(zhí)行編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務器,以供所述服務器將所述編碼壓縮數(shù)據發(fā)送至終端,供所述終端在接收到所述編碼壓縮數(shù)據時,對所述編碼壓縮數(shù)據進行解碼后獲得所述當前幀圖像。
優(yōu)選地,所述編碼模塊包括:
判斷單元,用于將獲得的所述當前幀圖像劃分為多個宏塊,分別判斷每個宏塊是否為P-SKIP宏塊;
編碼單元,用于當宏塊為P-SKIP宏塊時,對所述宏塊執(zhí)行P-SKIP宏塊編碼壓縮處理;當宏塊不為P-SKIP宏塊時,對所述宏塊執(zhí)行P宏塊編碼壓縮處理。
優(yōu)選地,所述判斷單元包括:
第一確定子單元,用于確定所述變化圖像對應的宏塊坐標范圍;
第二確定子單元,用于將獲得的所述當前幀圖像劃分為多個宏塊,確定每個宏塊的參考坐標;
第一判斷子單元,用于依次判斷每個宏塊的參考坐標是否處于所述變化圖像對應的宏塊坐標范圍內;
第二判斷子單元,用于在宏塊的參考坐標處于所述變化圖像對應的宏塊坐標范圍內時,判斷所述宏塊為P-SKIP宏塊;在宏塊的參考坐標不處于所述變化圖像對應的宏塊坐標范圍內時,判斷所述宏塊不為P-SKIP宏塊。
優(yōu)選地,所述第二確定子單元用于:
將獲得的所述當前幀圖像劃分為多個宏塊,確定每個宏塊的參考點;
獲取每個宏塊的參考點坐標,將每個宏塊的參考點坐標設置為所述宏塊的參考坐標。
優(yōu)選地,所述編碼模塊還用于,在接收到服務器基于SPICE協(xié)議發(fā)送的一幀完整圖像以及所述完整圖像對應的IDR幀編碼指令時,對所述完整圖像進行IDR幀編碼;
所述發(fā)送模塊還用于,將編碼后的編碼數(shù)據傳輸至所述服務器,以供所述服務器將所述編碼數(shù)據發(fā)送至終端,供所述終端在接收到所述編碼數(shù)據時,對所述編碼數(shù)據進行解碼后獲得所述完整圖像。
本發(fā)明提出的基于SPICE協(xié)議的圖像傳輸方法及裝置,在所述基于SPICE協(xié)議的圖像傳輸方法中,當接收到服務器基于SPICE協(xié)議發(fā)送當前幀圖像與上一幀圖像的變化圖像時,將所述變化圖像與所述上一幀圖像進行合成獲得當前幀圖像,然后將獲得的所述當前幀圖像劃分為多個宏塊,分別對每個宏塊執(zhí)行相應的編碼壓縮處理,在對多個宏塊執(zhí)行相應的編碼壓縮處理完成后,將所述多個宏塊執(zhí)行編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務器,所述服務器將接收到的所述編碼壓縮數(shù)據發(fā)送至終端,終端解碼后即可獲得所述當前幀圖像。因此服務器不需直接將圖像發(fā)送至終端,采用發(fā)送編碼壓縮數(shù)據的方式,降低了所需占用的帶寬。
附圖說明
圖1為本發(fā)明基于SPICE協(xié)議的圖像傳輸方法第一實施例的流程示意圖;
圖2為本發(fā)明基于SPICE協(xié)議的圖像傳輸方法第二實施例中對每個宏塊執(zhí)行相應的編碼壓縮處理的細化流程示意圖;
圖3為本發(fā)明基于SPICE協(xié)議的圖像傳輸方法第三實施例的流程示意圖;
圖4為本發(fā)明基于SPICE協(xié)議的圖像傳輸裝置第一實施例的功能模塊示意圖;
圖5為本發(fā)明基于SPICE協(xié)議的圖像傳輸裝置第二實施例中編碼模塊的細化功能模塊示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結合實施例,參照附圖做進一步說明。
具體實施方式
應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種基于SPICE協(xié)議的圖像傳輸方法,參照圖1,圖1為本 發(fā)明基于SPICE協(xié)議的圖像傳輸方法第一實施例的流程示意圖。
在本實施例中,該基于SPICE協(xié)議的圖像傳輸方法包括以下步驟:
步驟S10,在接收到服務器基于SPICE協(xié)議發(fā)送的當前幀圖像與上一幀圖像的變化圖像時,將所述變化圖像與所述上一幀圖像進行合成,以獲得當前幀圖像;
在服務器基于SPICE協(xié)議(Simple Protocol for Independent Computing Environment,獨立計算環(huán)境簡單協(xié)議)發(fā)送當前幀圖像至用戶終端時,服務器只需發(fā)送當前幀圖像與上一幀圖像的變化部分的變化圖像至所述終端,而不需要發(fā)送完整的當前幀圖像至所述終端。在本實施例中,當服務器基于SPICE協(xié)議發(fā)送當前幀圖像與上一幀圖像的變化部分的變化圖像至用戶終端時,所述服務器先將所述變化圖像發(fā)送至編碼器,所述編碼器優(yōu)選為H.264編碼器。在H.264編碼器接收到所述服務器基于SPICE協(xié)議發(fā)送的當前幀圖像與上一幀圖像的變化圖像時,將接收到的所述變化圖像與保存的所述上一幀圖像進行合成,獲得所述變化圖像對應的當前幀圖像。并且,H.264編碼器以獲得的所述當前幀圖像替換保存的所述上一幀圖像,將獲得的所述當前幀圖像進行保存。以在接收到服務器基于SPICE協(xié)議發(fā)送的下一幀圖像與所述當前幀圖像的變化圖像時,將所述下一幀圖像與所述當前幀圖像的變化圖像與保存的當前幀圖像進行合成,從而獲得下一幀圖像。
步驟S20,將獲得的所述當前幀圖像劃分為多個宏塊,分別對每個宏塊執(zhí)行相應的編碼壓縮處理;
H.264編碼器通過步驟S10獲得所述當前幀圖像后,將所述當前幀圖像劃分為多個宏塊。例如,將所述當前幀圖像劃分為若干個16*16像素的宏塊。之后對所有宏塊進行遍歷,依次對每個宏塊執(zhí)行相應的編碼壓縮處理,比如對每個宏塊執(zhí)行H.264標準的P宏塊處理。
步驟S30,將所述多個宏塊執(zhí)行編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務器,以供所述服務器將所述編碼壓縮數(shù)據發(fā)送至終端,供所述終端在接收到所述編碼壓縮數(shù)據時,對所述編碼壓縮數(shù)據進行解碼后獲得所述當前幀圖像。
當對所有宏塊執(zhí)行相應的編碼壓縮處理完成后,也即對宏塊遍歷完成時,將對所有宏塊執(zhí)行相應的編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務 器。在所述服務器接收到所述編碼壓縮數(shù)據時,將所述編碼壓縮數(shù)據發(fā)送至用戶終端。當用戶終端接收到所述編碼壓縮數(shù)據時,對所述編碼壓縮數(shù)據進行解碼操作,獲得所述當前幀圖像。
下面以云桌面系統(tǒng)為例對本發(fā)明基于SPICE協(xié)議的圖像傳輸方法進行詳細說明。當云桌面服務器基于SPICE協(xié)議發(fā)送當前幀桌面圖像與上一幀桌面圖像的變化部分的變化桌面圖像至用戶終端時,云桌面服務器先將所述變化桌面圖像發(fā)送至H.264編碼器。在H.264編碼器接收到所述云桌面服務器基于SPICE協(xié)議發(fā)送的所述變化桌面圖像時,將接收到的所述變化桌面圖像與保存的上一幀桌面圖像進行合成,獲得所述變化桌面圖像對應的當前幀桌面圖像。然后,將所述當前幀桌面圖像劃分為多個宏塊,依次對每個宏塊執(zhí)行相應的編碼壓縮處理。當對所有宏塊執(zhí)行相應的編碼壓縮處理完成后,將對所有宏塊執(zhí)行相應的編碼壓縮處理后的編碼壓縮數(shù)據傳輸至云桌面服務器。在云桌面服務器接收到所述編碼壓縮數(shù)據時,將所述編碼壓縮數(shù)據發(fā)送至用戶的瘦終端。當用戶的瘦終端接收到所述編碼壓縮數(shù)據時,對所述編碼壓縮數(shù)據進行解碼操作,從而獲得所述當前幀桌面圖像。
本實施例提供的方案,當編碼器接收到服務器基于SPICE協(xié)議發(fā)送當前幀圖像與上一幀圖像的變化圖像時,將所述變化圖像與所述上一幀圖像進行合成,獲得當前幀圖像,然后將獲得的所述當前幀圖像劃分為多個宏塊,分別對每個宏塊執(zhí)行相應的編碼壓縮處理,在對多個宏塊執(zhí)行相應的編碼壓縮處理完成后,將所述多個宏塊執(zhí)行編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務器,所述服務器將接收到的所述編碼壓縮數(shù)據發(fā)送至用戶終端,終端解碼后即可獲得所述當前幀圖像,因此不需直接將圖像發(fā)送至用戶終端,采用發(fā)送編碼壓縮數(shù)據的方式,降低了所需占用的帶寬。
進一步地,如圖2所示,基于第一實施例提出本發(fā)明基于SPICE協(xié)議的圖像傳輸方法第二實施例,在本實施例中,所述步驟S20包括:
步驟S21,將獲得的所述當前幀圖像劃分為多個宏塊,分別判斷每個宏塊是否為P-SKIP前向預測宏塊;
在本實施例中,為了簡化當前幀圖像的編碼壓縮處理過程,在將獲得的所述當前幀圖像劃分為多個宏塊后,針對不同類型的宏塊執(zhí)行不同的編碼壓 縮處理。具體地,在將獲得的所述當前幀圖像劃分為多個宏塊后,首先分別判斷每個宏塊是否為P-SKIP前向預測宏塊。具體地,所述步驟S21包括:
步驟a,確定所述變化圖像對應的宏塊坐標范圍;
步驟b,將獲得的所述當前幀圖像劃分為多個宏塊,確定每個宏塊的參考坐標;
步驟c,依次判斷每個宏塊的參考坐標是否處于所述變化圖像對應的宏塊坐標范圍內;
步驟d,在宏塊的參考坐標處于所述變化圖像對應的宏塊坐標范圍內時,判斷所述宏塊為P-SKIP宏塊;
步驟e,在宏塊的參考坐標不處于所述變化圖像對應的宏塊坐標范圍內時,判斷所述宏塊不為P-SKIP宏塊。
本實施例中,在接收到所述服務器基于SPICE協(xié)議發(fā)送的當前幀圖像與上一幀圖像的變化圖像時,確定所述變化圖像對應的宏塊坐標范圍。優(yōu)選地,所述變化圖像為矩形區(qū)域,所述變化圖像的圖像信息包括所述矩形區(qū)域的頂點坐標(x、y)、寬度值、高度值等參數(shù)信息以及所述變化圖像的YUV圖像數(shù)據。優(yōu)選地,所述矩形區(qū)域的頂點坐標(x、y)為所述矩形區(qū)域的左上角的坐標。根據所述頂點坐標(x、y)的x坐標值以及寬度值,計算出所述變化圖像換算為16*16像素的宏塊后的x軸坐標范圍[x_Start,x_End],以及根據所述頂點坐標(x、y)的y坐標值以及高度值,計算出所述變化圖像換算為16*16像素的宏塊后的y軸坐標范圍[y_Start,y_End]。
在將所述變化圖像與上一幀圖像合成獲得當前幀圖像,將獲得的所述當前幀圖像劃分為多個16*16像素的宏塊后,確定每個宏塊的參考坐標(xi、yi)。具體地,在本實施例中,所述步驟b包括:
步驟f,將獲得的所述當前幀圖像劃分為多個宏塊,確定每個宏塊的參考點;
步驟g,獲取每個宏塊的參考點坐標,將每個宏塊的參考點坐標設置為所述宏塊的參考坐標。
在將獲得的所述當前幀圖像劃分為多個16*16像素的宏塊后,先確定每個宏塊的參考點。優(yōu)選地,將每個宏塊的左上角確定為所述宏塊的參考點。然后獲取每個宏塊的參考點坐標,也即獲取每個宏塊的左上角的坐標。將每 個宏塊的參考點坐標設置為所述宏塊的參考坐標(xi、yi),也即優(yōu)選將每個宏塊的左上角的坐標設置為所述宏塊的參考坐標(xi、yi)。
之后,根據每個宏塊的參考坐標(xi、yi),以及所述變化圖像對應的宏塊坐標范圍[x_Start,x_End]和[y_Start,y_End],判斷每個宏塊的參考坐標(xi、yi)是否處于所述變化圖像對應的宏塊坐標范圍[x_Start,x_End]和[y_Start,y_End]內。若x_Start≤xi≤x_End且y_Start≤yi≤y_End,則確定宏塊的的參考坐標處于所述變化圖像對應的宏塊坐標范圍內;否則,確定宏塊的的參考坐標處于所述變化圖像對應的宏塊坐標范圍外。在宏塊的參考坐標處于所述變化圖像對應的宏塊坐標范圍內時,判斷所述宏塊為P-SKIP宏塊;在宏塊的參考坐標處于所述變化圖像對應的宏塊坐標范圍外時,判斷所述宏塊不為P-SKIP宏塊。
步驟S22,當宏塊為P-SKIP宏塊時,對所述宏塊執(zhí)行P-SKIP宏塊編碼壓縮處理;
步驟S23,當宏塊不為P-SKIP宏塊時,對所述宏塊執(zhí)行P宏塊編碼壓縮處理。
當判斷宏塊不為P-SKIP宏塊時,則對所述宏塊執(zhí)行H.264標準的P宏塊編碼壓縮處理,包括幀間預測、運動估算、DCT變換(Discrete Cosine Transform,離散余弦變換)、熵編碼等。當判斷宏塊為P-SKIP宏塊時,則對所述宏塊執(zhí)行H.264標準的P-SKIP宏塊編碼壓縮處理,將所述宏塊的運動矢量MV設置為0,并跳過幀間預測、運動估算、熵編碼等,在編碼壓縮處理后輸出的編碼碼流中只有一些以bit為單位的占位符。
在對多個宏塊執(zhí)行相應的編碼壓縮處理完成后,將所述多個宏塊執(zhí)行編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務器。在所述服務器接收到所述編碼壓縮數(shù)據時,將所述編碼壓縮數(shù)據發(fā)送至用戶終端。當用戶終端接收到所述編碼壓縮數(shù)據時,對所述編碼壓縮數(shù)據進行解碼操作,獲得所述當前幀圖像。
本實施例提供的方案,在將獲得的所述當前幀圖像劃分為多個宏塊后,先分別判斷每個宏塊是否為P-SKIP宏塊,在宏塊為P-SKIP宏塊時,對所述宏塊執(zhí)行P-SKIP宏塊編碼壓縮處理;在宏塊不為P-SKIP宏塊時,對所述宏塊執(zhí)行P宏塊編碼壓縮處理,也即根據宏塊的類型執(zhí)行對應的編碼壓縮處理, 由于采用了P-SKIP宏塊編碼壓縮處理,簡化了當前幀圖像的編碼壓縮處理過程,從而降低了編碼時cpu占用率。
進一步地,如圖3所示,基于第一實施例或第二實施例提出本發(fā)明基于SPICE協(xié)議的圖像傳輸方法第三實施例,在本實施例中,所述步驟S10之前,還包括步驟:
步驟S40,在接收到服務器基于SPICE協(xié)議發(fā)送的一幀完整圖像以及所述完整圖像對應的IDR即時解碼刷新幀編碼指令時,對所述完整圖像進行IDR幀編碼;
步驟S50,將編碼后的編碼數(shù)據傳輸至所述服務器,以供所述服務器將所述編碼數(shù)據發(fā)送至終端,供所述終端在接收到所述編碼數(shù)據時,對所述編碼數(shù)據進行解碼后獲得所述完整圖像。
當服務器將要基于SPICE協(xié)議發(fā)送第一幀圖像至H.264編碼器時,首先啟動所述H.264編碼器,初始化相關參數(shù),包括圖像分辨率、幀率、碼率等。由于要求有較高的實時性,編碼級別設置為BaseLine。在所述服務器基于SPICE協(xié)議發(fā)送第一幀圖像至H.264編碼器時,或者在所述服務器發(fā)送一幀參考圖像時,所述服務器將一幀完整圖像以及所述完整圖像對應的IDR(Instantaneous Decoding Refresh,即時解碼刷新)幀編碼指令發(fā)送至所述H.264編碼器。H.264編碼器在接收到所述服務器基于SPICE協(xié)議發(fā)送的一幀完整圖像以及所述完整圖像對應的IDR幀編碼指令時,對所述完整圖像執(zhí)行H.264標準的IDR幀編碼,并將編碼后的編碼數(shù)據傳輸至所述服務器。其中,所述編碼數(shù)據中包括了SPS(sequence parameter set,序列參數(shù)集)和PPS(picture parameter set,圖像參數(shù)集)等數(shù)據信息。在所述服務器接收到所述編碼數(shù)據后,將所述編碼數(shù)據發(fā)送至用戶終端。當用戶終端接收到所述編碼數(shù)據時,對所述編碼數(shù)據進行解碼后獲得所述完整圖像。
本實施例提供的方案,在編碼器接收到服務器基于SPICE協(xié)議發(fā)送的一幀完整圖像以及所述完整圖像對應的IDR幀編碼指令時,對所述完整圖像進行IDR幀編碼,然后將編碼后的編碼數(shù)據傳輸至所述服務器,所述服務器將接收到的所述編碼數(shù)據發(fā)送至用戶終端,終端將所述編碼數(shù)據進行解碼后獲得所述完整圖像。因此,本實施例中還可以實現(xiàn)對完整圖像進行編碼后發(fā)送 至用戶終端,進一步提高了用戶體驗。
本發(fā)明進一步提供一種基于SPICE協(xié)議的圖像傳輸裝置,如圖4所示,圖4為本發(fā)明基于SPICE協(xié)議的圖像傳輸裝置第一實施例的功能模塊示意圖。
在本實施例中,該基于SPICE協(xié)議的圖像傳輸裝置包括:
合成模塊10,用于在接收到服務器基于SPICE協(xié)議發(fā)送的當前幀圖像與上一幀圖像的變化圖像時,將所述變化圖像與所述上一幀圖像進行合成,以獲得當前幀圖像;
在服務器基于SPICE協(xié)議(Simple Protocol for Independent Computing Environment,獨立計算環(huán)境簡單協(xié)議)發(fā)送當前幀圖像至用戶終端時,服務器只需發(fā)送當前幀圖像與上一幀圖像的變化部分的變化圖像至所述終端,而不需要發(fā)送完整的當前幀圖像至所述終端。在本實施例中,當服務器基于SPICE協(xié)議發(fā)送當前幀圖像與上一幀圖像的變化部分的變化圖像至用戶終端時,所述服務器先將所述變化圖像發(fā)送至編碼器,所述編碼器優(yōu)選為H.264編碼器。在H.264編碼器接收到所述服務器基于SPICE協(xié)議發(fā)送的當前幀圖像與上一幀圖像的變化圖像時,合成模塊10將接收到的所述變化圖像與保存的所述上一幀圖像進行合成,獲得所述變化圖像對應的當前幀圖像。進一步地,該基于SPICE協(xié)議的圖像傳輸裝置還包括存儲模塊,所述存儲模塊將獲得的所述當前幀圖像進行保存,以替換保存的所述上一幀圖像。以在接收到服務器基于SPICE協(xié)議發(fā)送的下一幀圖像與所述當前幀圖像的變化圖像時,合成模塊10將所述下一幀圖像與所述當前幀圖像的變化圖像與保存的當前幀圖像進行合成,從而獲得下一幀圖像。
編碼模塊20,用于將獲得的所述當前幀圖像劃分為多個宏塊,分別對每個宏塊執(zhí)行相應的編碼壓縮處理;
通過合成模塊10獲得所述當前幀圖像后,編碼模塊20將所述當前幀圖像劃分為多個宏塊。例如,將所述當前幀圖像劃分為若干個16*16像素的宏塊。之后對所有宏塊進行遍歷,依次對每個宏塊執(zhí)行相應的編碼壓縮處理,比如對每個宏塊執(zhí)行H.264標準的P宏塊處理。
發(fā)送模塊30,用于將所述多個宏塊執(zhí)行編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務器,以供所述服務器將所述編碼壓縮數(shù)據發(fā)送至終端,供所 述終端在接收到所述編碼壓縮數(shù)據時,對所述編碼壓縮數(shù)據進行解碼后獲得所述當前幀圖像。
當編碼模塊20對所有宏塊執(zhí)行相應的編碼壓縮處理完成后,發(fā)送模塊30將對所有宏塊執(zhí)行相應的編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務器。在所述服務器接收到所述編碼壓縮數(shù)據時,將所述編碼壓縮數(shù)據發(fā)送至用戶終端。當用戶終端接收到所述編碼壓縮數(shù)據時,對所述編碼壓縮數(shù)據進行解碼操作,獲得所述當前幀圖像。
下面以云桌面系統(tǒng)為例對本發(fā)明基于SPICE協(xié)議的圖像傳輸裝置進行詳細說明。當云桌面服務器基于SPICE協(xié)議發(fā)送當前幀桌面圖像與上一幀桌面圖像的變化部分的變化桌面圖像至用戶終端時,云桌面服務器先將所述變化桌面圖像發(fā)送至H.264編碼器。在H.264編碼器接收到所述云桌面服務器基于SPICE協(xié)議發(fā)送的所述變化桌面圖像時,合成模塊10將接收到的所述變化桌面圖像與保存的上一幀桌面圖像進行合成,獲得所述變化桌面圖像對應的當前幀桌面圖像。然后,編碼模塊20將所述當前幀桌面圖像劃分為多個宏塊,依次對每個宏塊執(zhí)行相應的編碼壓縮處理。當對所有宏塊執(zhí)行相應的編碼壓縮處理完成后,發(fā)送模塊30將對所有宏塊執(zhí)行相應的編碼壓縮處理后的編碼壓縮數(shù)據傳輸至云桌面服務器。在云桌面服務器接收到所述編碼壓縮數(shù)據時,將所述編碼壓縮數(shù)據發(fā)送至用戶的瘦終端。當用戶的瘦終端接收到所述編碼壓縮數(shù)據時,對所述編碼壓縮數(shù)據進行解碼操作,從而獲得所述當前幀桌面圖像。
本實施例提供的方案,當編碼器接收到服務器基于SPICE協(xié)議發(fā)送當前幀圖像與上一幀圖像的變化圖像時,合成模塊10將所述變化圖像與所述上一幀圖像進行合成,獲得當前幀圖像,然后編碼模塊20將獲得的所述當前幀圖像劃分為多個宏塊,分別對每個宏塊執(zhí)行相應的編碼壓縮處理,在對多個宏塊執(zhí)行相應的編碼壓縮處理完成后,發(fā)送模塊30將所述多個宏塊執(zhí)行編碼壓縮處理后的編碼壓縮數(shù)據傳輸至所述服務器,所述服務器將接收到的所述編碼壓縮數(shù)據發(fā)送至用戶終端,終端解碼后即可獲得所述當前幀圖像,因此不需直接將圖像發(fā)送至用戶終端,采用發(fā)送編碼壓縮數(shù)據的方式,降低了所需占用的帶寬。
進一步地,如圖5所示,基于第一實施例提出本發(fā)明基于SPICE協(xié)議的圖像傳輸裝置第二實施例,在本實施例中,所述編碼模塊20包括:
判斷單元21,用于將獲得的所述當前幀圖像劃分為多個宏塊,分別判斷每個宏塊是否為P-SKIP宏塊;
在本實施例中,為了簡化當前幀圖像的編碼壓縮處理過程,在將獲得的所述當前幀圖像劃分為多個宏塊后,針對不同類型的宏塊執(zhí)行不同的編碼壓縮處理。具體地,在將獲得的所述當前幀圖像劃分為多個宏塊后,首先判斷單元21分別判斷每個宏塊是否為P-SKIP宏塊。具體地,所述判斷單元21包括:
第一確定子單元,用于確定所述變化圖像對應的宏塊坐標范圍;
第二確定子單元,用于將獲得的所述當前幀圖像劃分為多個宏塊,確定每個宏塊的參考坐標;
第一判斷子單元,用于依次判斷每個宏塊的參考坐標是否處于所述變化圖像對應的宏塊坐標范圍內;
第二判斷子單元,用于在宏塊的參考坐標處于所述變化圖像對應的宏塊坐標范圍內時,判斷所述宏塊為P-SKIP宏塊;在宏塊的參考坐標不處于所述變化圖像對應的宏塊坐標范圍內時,判斷所述宏塊不為P-SKIP宏塊。
本實施例中,在接收到所述服務器基于SPICE協(xié)議發(fā)送的當前幀圖像與上一幀圖像的變化圖像時,第一確定子單元確定所述變化圖像對應的宏塊坐標范圍。優(yōu)選地,所述變化圖像為矩形區(qū)域,所述變化圖像的圖像信息包括所述矩形區(qū)域的頂點坐標(x、y)、寬度值、高度值等參數(shù)信息以及所述變化圖像的YUV圖像數(shù)據。優(yōu)選地,所述矩形區(qū)域的頂點坐標(x、y)為所述矩形區(qū)域的左上角的坐標。第一確定子單元根據所述頂點坐標(x、y)的x坐標值以及寬度值,計算出所述變化圖像換算為16*16像素的宏塊后的x軸坐標范圍[x_Start,x_End],以及根據所述頂點坐標(x、y)的y坐標值以及高度值,計算出所述變化圖像換算為16*16像素的宏塊后的y軸坐標范圍[y_Start,y_End]。
在合成模塊10將所述變化圖像與上一幀圖像合成獲得當前幀圖像,第二確定子單元將獲得的所述當前幀圖像劃分為多個16*16像素的宏塊后,確定每個宏塊的參考坐標(xi、yi)。具體地,在本實施例中,所述第二確定子單元 用于:
將獲得的所述當前幀圖像劃分為多個宏塊,確定每個宏塊的參考點;
獲取每個宏塊的參考點坐標,將每個宏塊的參考點坐標設置為所述宏塊的參考坐標。
在將獲得的所述當前幀圖像劃分為多個16*16像素的宏塊后,第二確定子單元先確定每個宏塊的參考點。優(yōu)選地,將每個宏塊的左上角確定為所述宏塊的參考點。然后獲取每個宏塊的參考點坐標,也即獲取每個宏塊的左上角的坐標。第二確定子單元將每個宏塊的參考點坐標設置為所述宏塊的參考坐標(xi、yi),也即優(yōu)選將每個宏塊的左上角的坐標設置為所述宏塊的參考坐標(xi、yi)。
之后,第一判斷子單元根據每個宏塊的參考坐標(xi、yi),以及所述變化圖像對應的宏塊坐標范圍[x_Start,x_End]和[y_Start,y_End],判斷每個宏塊的參考坐標(xi、yi)是否處于所述變化圖像對應的宏塊坐標范圍[x_Start,x_End]和[y_Start,y_End]內。若x_Start≤xi≤x_End且y_Start≤yi≤y_End,則確定宏塊的的參考坐標處于所述變化圖像對應的宏塊坐標范圍內;否則,確定宏塊的的參考坐標處于所述變化圖像對應的宏塊坐標范圍外。在宏塊的參考坐標處于所述變化圖像對應的宏塊坐標范圍內時,第二判斷子單元判斷所述宏塊為P-SKIP宏塊;在宏塊的參考坐標處于所述變化圖像對應的宏塊坐標范圍外時,第二判斷子單元判斷所述宏塊不為P-SKIP宏塊。
編碼單元22,用于當宏塊為P-SKIP宏塊時,對所述宏塊執(zhí)行P-SKIP宏塊編碼壓縮處理;當宏塊不為P-SKIP宏塊時,對所述宏塊執(zhí)行P宏塊編碼壓縮處理。
當?shù)诙袛嘧訂卧袛嗪陦K不為P-SKIP宏塊時,編碼單元22對所述宏塊執(zhí)行H.264標準的P宏塊編碼壓縮處理,包括幀間預測、運動估算、DCT變換(Discrete Cosine Transform,離散余弦變換)、熵編碼等。當?shù)诙袛嘧訂卧袛嗪陦K為P-SKIP宏塊時,編碼單元22對所述宏塊執(zhí)行H.264標準的P-SKIP宏塊編碼壓縮處理,將所述宏塊的運動矢量MV設置為0,并跳過幀間預測、運動估算、熵編碼等,在編碼壓縮處理后輸出的編碼碼流中只有一些以bit為單位的占位符。
本實施例提供的方案,在將獲得的所述當前幀圖像劃分為多個宏塊后, 判斷單元21先分別判斷每個宏塊是否為P-SKIP宏塊,在宏塊為P-SKIP宏塊時,編碼單元22對所述宏塊執(zhí)行P-SKIP宏塊編碼壓縮處理;在宏塊不為P-SKIP宏塊時,編碼單元22對所述宏塊執(zhí)行P宏塊編碼壓縮處理,也即編碼單元22根據宏塊的類型執(zhí)行對應的編碼壓縮處理,由于編碼單元22采用了P-SKIP宏塊編碼壓縮處理,簡化了當前幀圖像的編碼壓縮處理過程,從而降低了編碼時cpu占用率。
進一步地,基于第一實施例或第二實施例提出本發(fā)明基于SPICE協(xié)議的圖像傳輸裝置第三實施例,在本實施例中,所述編碼模塊20還用于:在接收到服務器基于SPICE協(xié)議發(fā)送的一幀完整圖像以及所述完整圖像對應的IDR幀編碼指令時,對所述完整圖像進行IDR幀編碼;
所述發(fā)送模塊30還用于:將編碼后的編碼數(shù)據傳輸至所述服務器,以供所述服務器將所述編碼數(shù)據發(fā)送至終端,供所述終端在接收到所述編碼數(shù)據時,對所述編碼數(shù)據進行解碼后獲得所述完整圖像。
當服務器將要基于SPICE協(xié)議發(fā)送第一幀圖像至H.264編碼器時,首先啟動所述H.264編碼器,初始化相關參數(shù),包括圖像分辨率、幀率、碼率等。由于要求有較高的實時性,編碼級別設置為BaseLine。在所述服務器基于SPICE協(xié)議發(fā)送第一幀圖像至H.264編碼器時,或者在所述服務器發(fā)送一幀參考圖像時,所述服務器將一幀完整圖像以及所述完整圖像對應的IDR幀編碼指令發(fā)送至所述H.264編碼器。H.264編碼器在接收到所述服務器基于SPICE協(xié)議發(fā)送的一幀完整圖像以及所述完整圖像對應的IDR幀編碼指令時,編碼模塊20對所述完整圖像執(zhí)行H.264標準的IDR幀編碼,發(fā)送模塊30將編碼后的編碼數(shù)據傳輸至所述服務器。其中,所述編碼數(shù)據中包括了SPS(sequence parameter set,序列參數(shù)集)和PPS(picture parameter set,圖像參數(shù)集)等數(shù)據信息。在所述服務器接收到所述編碼數(shù)據后,將所述編碼數(shù)據發(fā)送至用戶終端。當用戶終端接收到所述編碼數(shù)據時,對所述編碼數(shù)據進行解碼后獲得所述完整圖像。
本實施例提供的方案,在接收到服務器基于SPICE協(xié)議發(fā)送的一幀完整圖像以及所述完整圖像對應的IDR幀編碼指令時,編碼模塊20對所述完整圖像進行IDR幀編碼,發(fā)送模塊30將編碼后的編碼數(shù)據傳輸至所述服務器,所 述服務器將接收到的所述編碼數(shù)據發(fā)送至用戶終端,終端將所述編碼數(shù)據進行解碼后獲得所述完整圖像。因此,本實施例中還可以實現(xiàn)對完整圖像進行編碼后發(fā)送至用戶終端,進一步提高了用戶體驗。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內容所作的等效結構或等效流程變換,或直接或間接運用在其他相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內。