專利名稱:多畫面的視頻實時解碼方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及視頻編解碼技術領域,特別是涉及一種多畫面的視頻實時解碼方法以及一種多畫面的視頻實時解碼系統(tǒng)。
背景技術:
視頻監(jiān)控或者視頻會議都需具備在一個終端上觀看多路視頻的能力,而對視頻數(shù)據(jù)進行解碼是非常占用CPU (Central Processing Unit,中央處理器)資源的,因此在對多畫面視頻數(shù)據(jù)進行解碼時對CPU的要求都會 比較高。傳統(tǒng)的處理多畫面的視頻實時視頻解碼的方法,主要是采用單線程對多路視頻進行解碼的方式。即只開啟一個線程解碼所有的視頻流,這種方式的系統(tǒng)資源占用率在理論上是最低的,在解碼的視頻路數(shù)較少的情況下不會出現(xiàn)問題。然而,隨著視頻觀看路數(shù)的增力口,單線程解碼無法充分利用CPU資源進行實時解碼,導致視頻延遲的情況經(jīng)常出現(xiàn)。
發(fā)明內(nèi)容
其于此,有此要針對上述隨著視頻觀看路數(shù)的增加導致視頻延遲的問題,提供一種多畫面的視頻實時解碼方法及系統(tǒng)。為實現(xiàn)上述目的,本發(fā)明采用如下的技術方案一種多畫面的視頻實時解碼方法,包括以下步驟獲取當前存在的所有解碼線程,形成線程表;當接收到新的視頻流后,判斷所述線程表中是否存在飽和狀態(tài)為否的解碼線程;若是,則將所述新的視頻流分配給所述飽和狀態(tài)為否的解碼線程進行解碼;若否,創(chuàng)建新的解碼線程,并將所述新的視頻流分配給該創(chuàng)建的解碼線程進行解碼。一種多畫面的視頻實時解碼系統(tǒng),包括線程表生成模塊,用于獲取當前存在的所有解碼線程,形成線程表;判斷模塊,用于當接收到新的視頻流后,判斷所述線程表中是否存在飽和狀態(tài)為否的解碼線程;第一解碼模塊,用于在所述判斷模塊的判斷結(jié)果為是時,將所述新的視頻流分配給所述飽和狀態(tài)為否的解碼線程進行解碼;第一解碼模塊,用于在所述判斷模塊的判斷結(jié)果為否時,創(chuàng)建新的解碼線程,并將所述新的視頻流分配給該創(chuàng)建的解碼線程進行解碼。由以上方案可以看出,本發(fā)明的一種多畫面的視頻實時解碼方法及系統(tǒng),實時維護著一張線程表,當觀看了新的視頻畫面(即接收到新的視頻流)后,判斷線程表中是否存在飽和狀態(tài)為否的解碼線程,如果存在則說明當前已有的解碼線程仍然具備實時解碼的能力,此時不需要創(chuàng)建新的解碼線程,利用已有的解碼線程進行解碼也不會導致視頻遲延的情況出現(xiàn),從而合理利用了 CPU資源,避免了資源的浪費;另外,如果線程表中不存在飽和狀態(tài)為否的解碼線程,則說明當前已有的所有解碼線程都不再具備對該新的視頻流進行實時解碼的能力,此時如果仍然利用已有的解碼線程進行解碼必須出現(xiàn)視頻延遲的情況,因此本發(fā)明中創(chuàng)建新的解碼線程來進行解碼,從而有效避免了隨著視頻觀看路數(shù)的增多而導致的視頻延遲的情況出現(xiàn)。
圖1為本發(fā)明實施例中一種多畫面的視頻實時解碼方法的流程示意圖;圖2為本發(fā)明實施例中一種多畫面的視頻實時解碼系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施例方式下面結(jié)合附圖以及具體的實施例,對本發(fā)明的技術方案作進一步的描述。參見圖1所示,一種多畫面的視頻實時解碼方法,包括以下步驟步驟S101,獲取當前存在的所有解碼線程,形成線程表。本發(fā)明實施例中實時維護這張線程表,通過這張線程表可以查詢和操作所有的解碼線程。作為一個較好的實施例,所述解碼線程中可以包括如下數(shù)據(jù)信息DecodeBuffer :解碼緩沖區(qū);BufferSize :解碼緩沖區(qū)大??;BufferUseage :緩沖區(qū)當前使用率;SaturationState :飽和狀態(tài)。其中,所述飽和狀態(tài)包括“是”(true)和“否”(false)兩種狀態(tài)。每個解碼線程維護著一個唯一的解碼緩沖區(qū)(DecodeBuffer),所有需要解碼的視頻數(shù)據(jù)必須先寫入緩沖區(qū),解碼線程會判斷解碼緩沖區(qū)中是否有數(shù)據(jù)可讀,如果有,則立即取出,并進行解碼。解碼緩沖區(qū)大小(BufferSize)是可以配置的,它的大小決定了解碼的最高時延,假設緩沖區(qū)的大小為1Mb,而視頻流的碼率為1Mbps,意味著畫面的解碼時延不會超過Is。飽和狀態(tài)(SaturationState)的初始值為false,表示當前解碼線程處于非飽和狀態(tài)。另外,緩沖區(qū)當前使用率(BufferUseage)這個數(shù)值體現(xiàn)了解碼線程的解碼能力,如果數(shù)值比較小,例如10%,表示解碼線程的解碼速度很快,能夠及時的從緩沖區(qū)中取走數(shù)據(jù)進行解碼,從網(wǎng)絡過來并且放入緩沖區(qū)的數(shù)據(jù)堆積很小;如果數(shù)值比較大,例如80%,表示解碼線程解碼速度已經(jīng)降低了,不能及時取走緩沖區(qū)中的數(shù)據(jù)進行解碼,從網(wǎng)絡過來的數(shù)據(jù)在緩沖區(qū)中堆積的比較多。步驟S102,當客戶端需要觀看某一視頻畫面時,會給服務端發(fā)送觀看視頻請求;服務端會根據(jù)所述觀看視頻請求發(fā)送對應的新的視頻流給客戶端。因此在客戶端中,當接收到新的視頻流后,首先判斷所述線程表中是否存在飽和狀態(tài)為否的解碼線程;若是則進入步驟S103,若則進入步驟S104。步驟S103,若是,即所述線程表中存在某一飽和狀態(tài)為否的解碼線程,此時說明這個解碼線程仍然具備實時解碼的能力,則此時不需要創(chuàng)建新的解碼線程,利用上述解碼線程進行解碼也不會導致視頻遲延的情況出現(xiàn),因此本步驟中將所述新的視頻流分配給所述飽和狀態(tài)為否的解碼線程進行解碼。步驟S104,若否,即所述線程表中不存在任意一個飽和狀態(tài)為否的解碼線程,說明所有解碼線程已飽和,不再具備對該新的視頻流進行實時解碼的能力。因此本步驟中,創(chuàng)建新的解碼線程,并將所述新的視頻流分配給該創(chuàng)建的解碼線程進行解碼。需要說明的是,本發(fā)明實施列中每創(chuàng)建一個新的解碼線程,都會立即被步驟SlOl中的線程表所捕獲到并一起進行維護。作為一個較好的實施例,將所述新的視頻流分配給指定的解碼線程(該指定的解碼線程,即可以是步驟S103中已有線程表中飽和狀態(tài)為否的那個解碼線程,還可以是步驟S104中新創(chuàng)建的那個解碼線程)之后,還包括步驟啟動一個定時器,在預定時間T內(nèi),定時檢測該指定的解碼線程中解碼緩沖區(qū)的占用情況,確定該指定的解碼線程的飽和狀態(tài)。進一步的,作為一個較好的實施 例,所述確定新的解碼線程的飽和狀態(tài)的過程具體可以包括如下在所述預定時間T內(nèi),若所述新的解碼線程的緩沖區(qū)當前使用率大于預設飽和閾值的次數(shù)除以總的檢測次數(shù)的值大于預設閾值,就可以認為這個解碼線程的解碼能力已經(jīng)達到飽和狀態(tài),則可以將該指定的解碼線程的飽和狀態(tài)設置為是,后續(xù)的視頻流將不能再使用此解碼線程進行解碼。上述的預設飽和閾值、預設閾值,用戶可以根據(jù)不同情況做不同的設置。例如我們將預設飽和閾值設置為80%,預設閾值設置為50%。下面通過一個具體的例子來進行說明假設將預定時間T設置為20s,定時判斷的時間間隔為ls,那么在時間T內(nèi)我們將總共進行20次的檢測;如果在這20次的檢測中,有大于10次的檢測中發(fā)現(xiàn)緩沖區(qū)當前使用率大于飽和閾值(也就是大于預設飽和閾值的次數(shù)除以總檢測次數(shù)大于50%),那么我們認為這個解碼線程的解碼能力已經(jīng)達到飽和狀態(tài),后續(xù)新的視頻流不能放到此解碼線程進行解碼。本發(fā)明能夠在嚴格保證時延的前提下合理利用CPU資源進行多線程并行解碼。作為一個較好的實施例,在解碼過程中,若檢測到飽和狀態(tài)為是的解碼線程中有至少一路視頻流被取出,則可以將該解碼線程的飽和狀態(tài)設置為否。及時的更新解碼線程的飽和狀態(tài)信息,這樣再有新的視頻流時就可以使用這個釋放出來的解碼線程來進行解碼了,合理的利用了已有資源。另外,作為一個較好的實施例,在解碼的過程中,若檢測到所述線程表中出現(xiàn)無任何視頻流需要解碼的解碼線程,則可以立即將該解碼線程撤銷。及時的終止無任何視頻流需要解碼的解碼線程,這樣可以進一步的節(jié)省CPU資源。另外,與上述一種多畫面的視頻實時解碼方法相對應,本發(fā)明還提供一種多畫面的視頻實時解碼系統(tǒng),如圖2所示,包括線程表生成模塊101,用于獲取當前存在的所有解碼線程,形成線程表;判斷模塊102,用于當接收到新的視頻流后,判斷所述線程表中是否存在飽和狀態(tài)為否的解碼線程;第一解碼模塊103,用于在所述判斷模塊的判斷結(jié)果為是時,將所述新的視頻流分配給所述飽和狀態(tài)為否的解碼線程進行解碼;第二解碼模塊104,用于在所述判斷模塊的判斷結(jié)果為否時,創(chuàng)建新的解碼線程,并將所述新的視頻流分配給該創(chuàng)建的解碼線程進行解碼。作為一個較好的實施例,所述解碼線程中可以包括如下數(shù)據(jù)信息解碼緩沖區(qū)、解碼緩沖區(qū)大小、緩沖區(qū)當前使用率、飽和狀態(tài);所述飽和狀態(tài)包括“是”和“否”兩種狀態(tài)。作為一個較好的實施例,上述多畫面的視頻實時解碼系統(tǒng)還可以包括
檢測模塊,用于在將所述新的視頻流分配給指定的解碼線程(該指定的解碼線程,即可以是已有線程表中飽和狀態(tài)為否的那個解碼線程,還可以是新創(chuàng)建的那個解碼線程)之后,在預定時間內(nèi),定時檢測該指定的解碼線程中解碼緩沖區(qū)的占用情況,確定該指定的解碼線程的飽和狀態(tài)。作為一個較好的實施例,所述檢測模塊中可以包括第一飽和狀態(tài)更改模塊,用于在所述預定時間內(nèi),若所述指定的解碼線程的緩沖區(qū)當前使用率大于預設飽和閾值的次數(shù)除以總的檢測次數(shù)的值大于預設閾值,則將該指定的解碼線程的飽和狀態(tài)設置為“是”。作為一個較好的實施例,上述多畫面的視頻實時解碼系統(tǒng)還可以包括第二飽和狀態(tài)更改模塊,用于若檢測到飽和狀態(tài)為是的解碼線程中有至少一路視頻流被取出,則將該解碼線程的飽和狀態(tài)設置為否。及時的更新解碼線程的飽和狀態(tài)信息,這樣再有新的視頻流時就可以使用這個釋放出來的解碼線程來進行解碼了,合理的利用了 已有資源。作為一個較好的實施例,上述多畫面的視頻實時解碼系統(tǒng)還可以包括撤銷模塊,用于若檢測到所述線程表中出現(xiàn)無任何視頻流需要解碼的解碼線程,則將該解碼線程撤銷。及時的終止無任何視頻流需要解碼的解碼線程,這樣可以進一步的節(jié)省CPU資源。通過以上方案可以看出,本發(fā)明的一種多畫面的視頻實時解碼方法及系統(tǒng),實時維護著一張線程表,當觀看了新的視頻畫面(即接收到新的視頻流)后,判斷線程表中是否存在飽和狀態(tài)為否的解碼線程,如果存在則說明當前已有的解碼線程仍然具備實時解碼的能力,此時不需要創(chuàng)建新的解碼線程,利用已有的解碼線程進行解碼也不會導致視頻遲延的情況出現(xiàn),從而合理利用了 CPU資源,避免了資源的浪費;另外,如果線程表中不存在飽和狀態(tài)為否的解碼線程,則說明當前已有的所有解碼線程都不再具備對該新的視頻流進行實時解碼的能力,此時如果仍然利用已有的解碼線程進行解碼必須出現(xiàn)視頻延遲的情況,因此本發(fā)明中創(chuàng)建新的解碼線程來進行解碼,從而有效避免了隨著視頻觀看路數(shù)的增多而導致的視頻延遲的情況出現(xiàn)。以上所述實施例僅表達了本發(fā)明的幾種實施方式,其描述較為具體和詳細,但并不能因此而理解為對本發(fā)明專利范圍的限制。應當指出的是,對于本領域的普通技術人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進,這些都屬于本發(fā)明的保護范圍。因此,本發(fā)明專利的保護范圍應以所附權利要求為準。
權利要求
1.一種多畫面的視頻實時解碼方法,其特征在于,包括以下步驟獲取當前存在的所有解碼線程,形成線程表;當接收到新的視頻流后,判斷所述線程表中是否存在飽和狀態(tài)為否的解碼線程;若是,則將所述新的視頻流分配給所述飽和狀態(tài)為否的解碼線程進行解碼;若否,則創(chuàng)建新的解碼線程,并將所述新的視頻流分配給該創(chuàng)建的解碼線程進行解碼。
2.根據(jù)權利要求1所述的多畫面的視頻實時解碼方法,其特征在于,所述解碼線程中包括如下數(shù)據(jù)信息解碼緩沖區(qū)、解碼緩沖區(qū)大小、緩沖區(qū)當前使用率、飽和狀態(tài);所述飽和狀態(tài)包括是和否兩種狀態(tài)。
3.根據(jù)權利要求2所述的多畫面的視頻實時解碼方法,其特征在于,將所述新的視頻流分配給指定的解碼線程之后,還包括步驟在預定時間內(nèi),定時檢測該指定的解碼線程中解碼緩沖區(qū)的占用情況,確定該指定的解碼線程的飽和狀態(tài)。
4.根據(jù)權利要求3所述的多畫面的視頻實時解碼方法,其特征在于,所述確定指定的解碼線程的飽和狀態(tài)的過程包括在所述預定時間內(nèi),若所述指定的解碼線程的緩沖區(qū)當前使用率大于預設飽和閾值的次數(shù)除以總的檢測次數(shù)的值大于預設閾值,則將該指定的解碼線程的飽和狀態(tài)設置為是。
5.根據(jù)權利要求1-4任意一項所述的多畫面的視頻實時解碼方法,其特征在于,還包括步驟若檢測到飽和狀態(tài)為是的解碼線程中有至少一路視頻流被取出,則將該解碼線程的飽和狀態(tài)設置為否;和/或若檢測到所述線程表中出現(xiàn)無任何視頻流需要解碼的解碼線程,則將該解碼線程撤銷。
6.一種多畫面的視頻實時解碼系統(tǒng),其特征在于,包括線程表生成模塊,用于獲取當前存在的所有解碼線程,形成線程表;判斷模塊,用于當接收到新的視頻流后,判斷所述線程表中是否存在飽和狀態(tài)為否的解碼線程;第一解碼模塊,用于在所述判斷模塊的判斷結(jié)果為是時,將所述新的視頻流分配給所述飽和狀態(tài)為否的解碼線程進行解碼;第二解碼模塊,用于在所述判斷模塊的判斷結(jié)果為否時,創(chuàng)建新的解碼線程,并將所述新的視頻流分配給該創(chuàng)建的解碼線程進行解碼。
7.根據(jù)權利要求6所述的多畫面的視頻實時解碼系統(tǒng),其特征在于,所述解碼線程中包括如下數(shù)據(jù)信息解碼緩沖區(qū)、解碼緩沖區(qū)大小、緩沖區(qū)當前使用率、飽和狀態(tài);所述飽和狀態(tài)包括是和否兩種狀態(tài)。
8.根據(jù)權利要求7所述的多畫面的視頻實時解碼系統(tǒng),其特征在于,還包括檢測模塊,用于在將所述新的視頻流分配給指定的解碼線程之后,在預定時間內(nèi),定時檢測該指定的解碼線程中解碼緩沖區(qū)的占用情況,確定該指定的解碼線程的飽和狀態(tài)。
9.根據(jù)權利要求8所述的多畫面的視頻實時解碼系統(tǒng),其特征在于,所述檢測模塊中包括第一飽和狀態(tài)更改模塊,用于在所述預定時間內(nèi),若所述指定的解碼線程的緩沖區(qū)當前使用率大于預設飽和閾值的次數(shù)除以總的檢測次數(shù)的值大于預設閾值,則將該指定的解碼線程的飽和狀態(tài)設置為是。
10.根據(jù)權利要求6-9任意一項所述的多畫面的視頻實時解碼系統(tǒng),其特征在于,還包括第二飽和狀態(tài)更改模塊,用于若檢測到飽和狀態(tài)為是的解碼線程中有至少一路視頻流被取出,則將該解碼線程的飽和狀態(tài)設置為否;和/或撤銷模塊,用于若檢測到所述線程表中出現(xiàn)無任何視頻流需要解碼的解碼線程,則將該解碼線程撤銷。
全文摘要
本發(fā)明提供一種多畫面的視頻實時解碼方法及系統(tǒng),所述方法包括以下步驟獲取當前存在的所有解碼線程,形成線程表;當接收到新的視頻流后,判斷所述線程表中是否存在飽和狀態(tài)為否的解碼線程;若是,則將所述新的視頻流分配給所述飽和狀態(tài)為否的解碼線程進行解碼;若否,創(chuàng)建新的解碼線程,并將所述新的視頻流分配給該創(chuàng)建的解碼線程進行解碼。本發(fā)明的方法及系統(tǒng),當判斷發(fā)現(xiàn)當前已有的解碼線程仍然具備實時解碼的能力時,利用已有的解碼線程進行解碼,此時合理利用了CPU資源并保證不會出現(xiàn)視頻遲延;當判斷發(fā)現(xiàn)當前已有的所有解碼線程都不再具備實時解碼的能力時,創(chuàng)建新的解碼線程來進行解碼,從而有效避免了視頻延遲的情況出現(xiàn)。
文檔編號H04N7/18GK103024388SQ20121054890
公開日2013年4月3日 申請日期2012年12月17日 優(yōu)先權日2012年12月17日
發(fā)明者石金川 申請人:廣東威創(chuàng)視訊科技股份有限公司