一種構建多節目ts流時使各路節目碼流均勻分布的方法
【專利摘要】本發明涉及一種構建多節目TS流時使各路節目碼流均勻分布的方法,通過在進行一次TS包的發送時,為需要發送的N路音視頻數據包分配N個內存塊,且每個內存塊中存放表信息包和整數個TS包。并在發送時刻統計N個內存塊中TS包總數,計算各個內存塊中TS包數量占TS包總數的百分比,并以此為每一個內存塊分配相互連續的序號范圍;產生一個取值范圍小于TS包總數的均勻分布隨機數;讀取產生的隨機數所落在內存塊序號范圍內的相應內存塊中的TS包并發送。重復產生均勻分布隨機數,直至發送完所有TS包。從而避免某路節目產生突發的大量數據發送,提高播出的穩定性,減輕有線電視接收端的音視頻數據緩存壓力。
【專利說明】一種構建多節目TS流時使各路節目碼流均勻分布的方法
【技術領域】
[0001]本發明屬于有線電視TS流播出【技術領域】,具體涉及一種構建多節目TS流時使各路節目碼流均勻分布的方法。
【背景技術】
[0002]通常有線電視TS流中都會承載多路節目,然而各路節目的碼流速率是不一樣的,作為有線電視播出端,應該使各路節目的數據較為均勻的分布在播出的TS流中,而避免某路節目突發的發送大量數據,這樣可以提高播出的穩定性,減輕有線電視接收端的音視頻數據緩存壓力。但是目前還未有能夠使各路節目的數據較為均勻的分布在播出的TS流中的方法。
【發明內容】
[0003]本發明的目的在于克服上述現有技術中存在的缺點,提供一種構建多節目TS流時使各路節目碼流均勻分布的方法,具有穩定性高,有線電視接收端的音視頻數據緩存壓力小的優點。
[0004]為實現上述目的,本發明采用以下技術方案:包括以下步驟:
[0005]I)為需要發送的N路音視頻數據包分配N個內存塊,且每個內存塊中存放表信息包和整數個TS包;
[0006]2)發送TS包,并在發送時刻統計N個內存塊中TS包總數,計算各個內存塊中TS包數量占TS包總數的百分比,并依次為每一個內存塊分配相互連續的序號范圍;
[0007]3)為每個內存塊分配一個取值范圍小于TS包總數的均勻分布隨機數;
[0008]4)讀取步驟3)中產生的隨機數所落在內存塊序號范圍內的相應內存塊中的TS包;
[0009]5)發送步驟4)讀取到的TS包,之后反復執行步驟3)和步驟4),直到發送完所有TS包;
[0010]6)回到步驟2),進行下一次N個內存塊中TS包的發送,如此反復,直至讀取完所有TS包。
[0011]所述步驟I)中為N路音視頻數據包分配N塊內存塊的方式為:將前端構建節目的TS包先存入其所屬內存空間,當后端需要取出該路節目的TS包時也是從該內存空間讀出,其寫入讀出的原則符合先入先出的原則,且內存空間的大小能夠保證任何一路音視頻數據包的TS包在寫入內存空間時均不會溢出。
[0012]所述步驟2)中N個內存塊中TS包總數為1000,總數不夠1000,則將空包內存塊中TS包數設為缺失的包數,并在空包內存塊中補足該數目的空包,使得TS包總數為1000。
[0013]所述步驟2)中為各個音視頻數據包內存塊分配一個連續序號范圍的具體方法為:生成的連續序號的取值范圍與隨機數的取值范圍相同,從而保證任何一個生成的隨機數都能夠與一路節目的序號相同;且為任意一路節目分配的序號數量占序號總數量的百分比等于該路節目當前內存空間中已有TS包數量占當前待發送的總TS包數量的百分比。
[0014]所述步驟3)中在要發送TS包的時刻產生一個均勻分布隨機數的方法為:在一個數組中按遞增順序存放從I到N的自然數1,2,3,…,N, N為TS包總數,利用MicrosoftVisual Stud1中的隨機數生成函數rand生成一個范圍從I到N的隨機數xl,取出這個數組中第xl個數作為所要產生的均勻分布隨機數;從數組中刪除這個數,剩下N-1個自然數,第2次產生均勻分布隨機數時則用rand生成一個范圍從I到N-1的隨機數x2,取出這個數組中第x2個數作為所要產生的均勻分布隨機數;以此類推直到取出數組中全部N個自然數。
[0015]所述步驟4)中讀取步驟3)中產生的隨機數所落在內存塊序號范圍內的相應內存塊中的TS包的具體方法為:從所有內存塊中選取具有與當前生成的隨機數相等序號的內存塊,讀取隨機數相等序號的內存塊中的一個TS包,作為待發送的TS包。
[0016]本發明具有以下的有益效果:相比較現有技術,本發明通過在進行一次TS包的發送時,為需要發送的N路音視頻數據包分配N個內存塊,且每個內存塊中存放表信息包和整數個TS包。并在發送時刻統計N個內存塊中TS包總數,計算各個內存塊中TS包數量占TS包總數的百分比,并以此為每一個內存塊分配相互連續的序號范圍;產生一個取值范圍小于TS包總數的均勻分布隨機數;讀取產生的隨機數所落在內存塊序號范圍內的相應內存塊中的TS包并發送。重復產生均勻分布隨機數,直至發送完所有TS包。再重復進行下一次TS包的發送。能夠使各路音視頻數據包的數據較為均勻的分布在播出的TS流中,從而避免某路節目產生突發的大量數據發送,這樣能夠提高播出的穩定性,減輕有線電視接收端的音視頻數據緩存壓力。傳統的輪詢各路音視頻數據包進行發送的方法,操作較為簡單,但是容易導致碼流高的音視頻數據包長時間占有發送權,使得碼流低的音視頻數據包發送TS包時呈現突發性,即在碼流高的音視頻數據包發送TS包期間沒有TS包發送,在碼流高的音視頻數據包發送完TS包后又進行一段時間的連續發送,這樣會加大接收端的音視頻數據緩存壓力。本發明所述方法使各路音視頻數據包在每一小段時間間隔內都有發送TS包的機會,這一小段時間內各路音視頻數據包所能發送的TS包數目取決于其TS包數目占TS包總數的百分比,碼流需求高的音視頻數據包會分配到更多的發送機會,但碼流需求低的音視頻數據包也會得到發送的機會。各路音視頻數據包所發送的TS包之間的間隔不會有很大的波動。本發明使得各路音視頻數據包的發送碼流是均勻的,從而具有能夠使有線電視接收端的音視頻數據緩存壓力小。
【專利附圖】
【附圖說明】
[0017]圖1是本發明方法的示意圖。
【具體實施方式】
[0018]下面結合附圖,對本發明作進一步詳細說明。
[0019]參見圖1,本發明包括以下步驟:
[0020]I)為需要發送的N路音視頻數據包分配N個內存塊,且每個內存塊中存放表信息包和整數個TS包;為N路音視頻數據包分配N塊內存塊的方式為:將前端構建節目的TS包先存入其所屬內存空間,當后端需要取出該路節目的TS包時也是從該內存空間讀出,其寫入讀出的原則符合先入先出的原則,且內存空間的大小能夠保證任何一路音視頻數據包的TS包在寫入內存空間時均不會溢出;
[0021]2)發送TS包,并在發送時刻統計N個內存塊中TS包總數,計算各個內存塊中TS包數量占TS包總數的百分比,并依次為每一個內存塊分配相互連續的序號范圍;N個內存塊中TS包總數為1000,總數不夠1000,則將空包內存塊中TS包數設為缺失的包數,并在空包內存塊中補足該數目的空包,使得TS包總數為1000 ;
[0022]3)為每個內存塊分配一個取值范圍小于TS包總數的均勻分布隨機數;在要發送TS包的時刻產生一個均勻分布隨機數的方法為:在一個數組中按遞增順序存放從I到N的自然數1,2,3,..., N, N為TS包總數,利用Microsoft Visual Stud1中的隨機數生成函數rand生成一個范圍從I到N的隨機數xl,取出這個數組中第xl個數作為所要產生的均勻分布隨機數;從數組中刪除這個數,剩下N-1個自然數,第2次產生均勻分布隨機數時則用rand生成一個范圍從I到N-1的隨機數x2,取出這個數組中第x2個數作為所要產生的均勻分布隨機數;以此類推直到取出數組中全部N個自然數;
[0023]4)讀取步驟3)中產生的隨機數所落在內存塊序號范圍內的相應內存塊中的TS包;產生的隨機數所落在內存塊序號范圍內的相應內存塊中的TS包的具體方法為:從所有內存塊中選取具有與當前生成的隨機數相等序號的內存塊,讀取隨機數相等序號的內存塊中的一個TS包,作為待發送的TS包;
[0024]5)發送步驟4)讀取到的TS包,之后反復執行步驟3)和步驟4),直到發送完所有TS包;
[0025]6)回到步驟2),進行下一次N個內存塊中TS包的發送,如此反復,直至讀取完所有TS包。
[0026]TS: (Transport Stream,傳輸流)。
[0027]步驟4)中的隨機數是有限整數,且是均勻分布隨機數,也就是該隨機數會遍歷其取值范圍中的所有數值。根據節目的數量和用戶所需要的碼流均勻分布的控制精度來設定這個隨機數的取值范圍,I?1000的取值范圍大概對應TS流中40ms的時間長度。
[0028]為音視頻數據包內存塊分配一串連續的序號包括:
[0029]生成的連續的序號的的取值范圍應該與隨機數的取值范圍完全一致,以保證任何一個生成的隨機數都會與某路音視頻數據包內存塊的序號相同。為某路音視頻數據包分配的序號數量占序號總數量的百分比應該等于該路音視頻數據包內存塊中TS包數量占當前待發送的總TS包數量的百分比。比如隨機數取值范圍為I到1000時,第I路音視頻數據包內存塊中TS包數量占待發送TS包總數量1000的50%,則為之分配I?500,第2路節目當前待發送TS包數量占待發送TS包總數量1000的20 %,則為之分配501?700。若TS包總數不夠1000,則將空包內存塊中TS包數設為缺失的包數,并在空包內存塊中補足該數目的空包,使得TS包總數為1000。
[0030]本發明的工作過程為:
[0031]I)為欲發送的N路音視頻數據包分配N個內存塊,每個內存塊可存放整數個TS包,欲發送的各路節目的音視頻TS包及表信息包寫入各自音視頻數據包內存塊;
[0032]2)發送時刻,統計N個內存塊中TS包總數(若總數不夠1000,則將空包內存塊中TS包數設為缺失的包數,并在空包內存塊中補足該數目的空包,使得TS包總數為1000),計算各個內存塊中TS包數量占TS包總數1000的百分比,并以此為之分配一個連續序號范圍,比如第I個內存塊TS包數量為50%,則為之分配序號空間I?500,第2個內存塊TS包數量為20%,則為之分配序號空間501?700 ;
[0033]3)產生一個取值范圍為I?1000的均勻分布隨機數;
[0034]4)隨機數落在哪個內存塊序號范圍內,則在該內存塊中讀取一個TS包;
[0035]5)發送讀取到的TS包,反復執行3、4步,直到發送完1000個TS包;
[0036]6)回到第2步,進行下一次1000個TS包的發送,如此反復,直至傳輸完成。
【權利要求】
1.一種構建多節目TS流時使各路節目碼流均勻分布的方法,其特征在于:包括以下步驟: 1)為需要發送的N路音視頻數據包分配N個內存塊,且每個內存塊中存放表信息包和整數個TS包; 2)發送TS包,并在發送時刻統計N個內存塊中TS包總數,計算各個內存塊中TS包數量占TS包總數的百分比,并依次為每一個內存塊分配相互連續的序號范圍; 3)為每個內存塊分配一個取值范圍小于TS包總數的均勻分布隨機數; 4)讀取步驟3)中產生的隨機數所落在內存塊序號范圍內的相應內存塊中的TS包; 5)發送步驟4)讀取到的TS包,之后反復執行步驟3)和步驟4),直到發送完所有TS包; 6)回到步驟2),進行下一次N個內存塊中TS包的發送,如此反復,直至讀取完所有TS包。
2.根據權利要求1所述的構建多節目TS流時使各路節目碼流均勻分布的方法,其特征在于,所述步驟I)中為N路音視頻數據包分配N塊內存塊的方式為:將前端構建節目的TS包先存入其所屬內存空間,當后端需要取出該路節目的TS包時也是從該內存空間讀出,其寫入讀出的原則符合先入先出的原則,且內存空間的大小能夠保證任何一路音視頻數據包的TS包在寫入內存空間時均不會溢出。
3.根據權利要求1所述的構建多節目TS流時使各路節目碼流均勻分布的方法,其特征在于,所述步驟2)中N個內存塊中TS包總數為1000,總數不夠1000,則將空包內存塊中TS包數設為缺失的包數,并在空包內存塊中補足該數目的空包,使得TS包總數為1000。
4.根據權利要求1所述的構建多節目TS流時使各路節目碼流均勻分布的方法,其特征在于,所述步驟2)中為各個音視頻數據包內存塊分配一個連續序號范圍的具體方法為:生成的連續序號的取值范圍與隨機數的取值范圍相同,從而保證任何一個生成的隨機數都能夠與一路節目的序號相同;且為任意一路節目分配的序號數量占序號總數量的百分比等于該路節目當前內存空間中已有TS包數量占當前待發送的總TS包數量的百分比。
5.根據權利要求1所述的構建多節目TS流時使各路節目碼流均勻分布的方法,其特征在于,所述步驟3)中在要發送TS包的時刻產生一個均勻分布隨機數的方法為:在一個數組中按遞增順序存放從I到N的自然數1,2,3,…,N, N為TS包總數,利用MicrosoftVisual Stud1中的隨機數生成函數rand生成一個范圍從I到N的隨機數xl,取出這個數組中第xl個數作為所要產生的均勻分布隨機數;從數組中刪除這個數,剩下N-1個自然數,第2次產生均勻分布隨機數時則用rand生成一個范圍從I到N-1的隨機數x2,取出這個數組中第x2個數作為所要產生的均勻分布隨機數;以此類推直到取出數組中全部N個自然數。
6.根據權利要求1所述的構建多節目TS流時使各路節目碼流均勻分布的方法,其特征在于,所述步驟4)中讀取步驟3)中產生的隨機數所落在內存塊序號范圍內的相應內存塊中的TS包的具體方法為:從所有內存塊中選取具有與當前生成的隨機數相等序號的內存塊,讀取隨機數相等序號的內存塊中的一個TS包,作為待發送的TS包。
【文檔編號】H04N21/238GK104185035SQ201410421672
【公開日】2014年12月3日 申請日期:2014年8月25日 優先權日:2014年8月25日
【發明者】張翠翠, 沈雪峰, 佘文帆, 陳偉, 曹峻, 符均 申請人:西安交通大學