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