專利名稱:基于端口號和ip地址的多視頻轉(zhuǎn)發(fā)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及視頻轉(zhuǎn)發(fā)方法,尤其是一種基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法。
背景技術(shù):
在視頻傳輸領(lǐng)域,通常由視頻服務(wù)器直接向終端提供視頻數(shù)據(jù),如圖I所示。然而,當(dāng)多個(gè)終端同時(shí)向視頻服務(wù)器請求視頻傳輸時(shí),為了保證視頻傳輸?shù)牧鲿承?,必須開通較大的寬帶,否則視頻傳輸效果不好,從而導(dǎo)致目前視頻傳輸?shù)某杀据^高,并且當(dāng)多個(gè)終端向視頻服務(wù)器請求同一路視頻傳輸時(shí),會(huì)給視頻服務(wù)器造成很大的壓力。此外,目前視頻服務(wù)器是將本地存儲(chǔ)的視頻傳輸給終端,而在諸如視頻監(jiān)控等某些領(lǐng)域,要求在視頻傳輸?shù)耐瑫r(shí)實(shí)現(xiàn)視頻的采集,僅僅采用視頻服務(wù)器無法做到。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法,每一視頻對應(yīng)于一個(gè)子線程,且由主線程實(shí)現(xiàn)終端信息的更新和子線程啟閉的控制,由子線程實(shí)現(xiàn)視頻轉(zhuǎn)發(fā),保證了線程之間的并發(fā)執(zhí)行,互不干擾;此外當(dāng)端口號減少時(shí)關(guān)閉與該端口號對應(yīng)的線程,當(dāng)端口號增加時(shí)開啟與該端口號對應(yīng)的線程,實(shí)現(xiàn)了對子線程啟閉的控制,不僅保證了多路視頻的同時(shí)轉(zhuǎn)發(fā),而且防止減少的線程占用帶寬,降低了視頻傳輸成本,使得視頻傳輸?shù)男Ч^好。為了實(shí)現(xiàn)上述目的,本發(fā)明提供了一種基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法,包括多個(gè)終端,其特征在于還包括轉(zhuǎn)發(fā)服務(wù)器,該轉(zhuǎn)發(fā)服務(wù)器用于接收多路視頻并將對應(yīng)的視頻轉(zhuǎn)發(fā)給需視頻傳輸?shù)慕K端;在轉(zhuǎn)發(fā)服務(wù)器向需視頻傳輸?shù)慕K端轉(zhuǎn)發(fā)對應(yīng)的視頻時(shí),轉(zhuǎn)發(fā)服務(wù)器通過主線程實(shí)現(xiàn)終端信息和子線程啟閉的更新,通過子線程實(shí)現(xiàn)視頻的轉(zhuǎn)發(fā),并且每一路視頻對應(yīng)于一個(gè)單獨(dú)的子線程,每一子線程對應(yīng)于一個(gè)端口號;該轉(zhuǎn)發(fā)服務(wù)器創(chuàng)建待分發(fā)鏈表來存儲(chǔ)更新后的終端信息,并創(chuàng)建線程鏈表來存儲(chǔ)增加和減少的端口號,從而實(shí)現(xiàn)該端口號對應(yīng)的子線程的啟閉,其中該終端信息包括終端的端口號和IP地址,該線程鏈表具有線程鏈表標(biāo)記位變量;該多視頻轉(zhuǎn)發(fā)方法包括該轉(zhuǎn)發(fā)服務(wù)器定時(shí)獲取終端信息,并且通過主線程對子線程的啟閉進(jìn)行控制的步驟S10、將該線程鏈表的線程鏈表標(biāo)記位變量初始化為0,創(chuàng)建第一分發(fā)鏈表和第二分發(fā)鏈表,并且建立分發(fā)線程數(shù)組,該分發(fā)線程數(shù)組由多個(gè)第二元素組成,每一第二元素均對應(yīng)于一個(gè)端口號并由該第二兀素的下標(biāo)來表不該端口號,每一第二兀素均存儲(chǔ)有一個(gè)變量分發(fā)線程標(biāo)記位;S11、該第一分發(fā)鏈表用于獲取上次需視頻傳輸?shù)慕K端信息并進(jìn)行排序,該第二分發(fā)鏈表用于獲取本次需視頻傳輸?shù)慕K端信息并進(jìn)行排序;S12、該第一端口號鏈表用于獲取第一分發(fā)鏈表中終端信息的端口號并進(jìn)行排序、刪除重復(fù)元素,該第二端口號鏈表用于獲取第二分發(fā)鏈表中終端信息的端口號并進(jìn)行排序、刪除重復(fù)元素;S13、求取第二端口號鏈表與第一端口號鏈表的差集并存儲(chǔ)至第一端口差集鏈表中,由此獲得增加的端口號;求取第一端口號鏈表與第二端口號鏈表的差集并存儲(chǔ)至第二端口差集鏈表中,由此獲得減少的端口號;S14、判斷第一端口差集鏈表和第二端口差集鏈表是否均為空如果均為空,則表示端口號未改變,即端口號對應(yīng)的視頻轉(zhuǎn)發(fā)子線程未改變,該線程鏈表中的線程鏈表標(biāo)記位變量保持為0,并且將第二分發(fā)鏈表的終端信息賦給第一分發(fā)鏈表;
否則表示端口號發(fā)生改變,即端口號對應(yīng)的視頻轉(zhuǎn)發(fā)子線程發(fā)生改變,將線程鏈表中的線程鏈表標(biāo)記位變量設(shè)置為I,將第一端口差集鏈表中的端口號分別賦給線程鏈表的一個(gè)結(jié)點(diǎn)并將這些結(jié)點(diǎn)的屬性值設(shè)置為第一值,將第二端口差集鏈表中的端口號分別賦給線程鏈表的一個(gè)結(jié)點(diǎn)并將這些結(jié)點(diǎn)的屬性值設(shè)置為第二值,并且將第二分發(fā)鏈表的終端信息賦給第一分發(fā)鏈表;S15、判斷該線程鏈表的線程鏈表標(biāo)記位變量是否為I :如果該線程鏈表標(biāo)記位變量為0,則重復(fù)執(zhí)行步驟Sll S15 ;如果該線程鏈表標(biāo)記位變量為1,則進(jìn)一步判斷線程鏈表中結(jié)點(diǎn)的屬性值如果結(jié)點(diǎn)的屬性值為第一值則在該分發(fā)線程數(shù)組中查找與該結(jié)點(diǎn)中端口號對應(yīng)的第二元素,并將該第二元素的分發(fā)線程標(biāo)記設(shè)置為0,從而開啟與該結(jié)點(diǎn)中端口號對應(yīng)的子線程;如果結(jié)點(diǎn)的屬性值為第二值則在該分發(fā)線程數(shù)組中查找與該結(jié)點(diǎn)中端口號對應(yīng)的第二元素,并將該第二元素的分發(fā)線程標(biāo)記設(shè)置為1,從而關(guān)閉與該結(jié)點(diǎn)中端口號對應(yīng)的子線程;并且將該線程鏈表中的線程鏈表標(biāo)記位變量重新設(shè)置為0,重復(fù)執(zhí)行步驟Sll S15。該基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法還包括該轉(zhuǎn)發(fā)服務(wù)器對終端信息進(jìn)行更新的步驟,將本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息進(jìn)行比較如果相同則不更新終端信息;如果不相同則更新終端信息,其中該終端信息包括終端的端口號和IP地址。該待分發(fā)鏈表具有待分發(fā)鏈表改變標(biāo)記位變量,該轉(zhuǎn)發(fā)服務(wù)器定時(shí)獲取終端信息,并且通過主線程對終端信息進(jìn)行更新的過程由以下步驟組成S20、將待分發(fā)鏈表的待分發(fā)鏈表改變標(biāo)記位變量初始化為0,并創(chuàng)建第一分發(fā)鏈表和第二分發(fā)鏈表,建立全局變量分發(fā)信息數(shù)組,該分發(fā)信息數(shù)組由多個(gè)第一元素組成,每一第一兀素均對應(yīng)于一個(gè)端口號且由該第一兀素的下標(biāo)來表不該端口號,每一第一兀素均存儲(chǔ)有三個(gè)變量分發(fā)信息標(biāo)記位iFlag、端口號所對應(yīng)IP地址的起始位置iPos以及端口號所對應(yīng)IP地址的數(shù)量iCount ;S21、該第一分發(fā)鏈表用于獲取上次需視頻傳輸?shù)慕K端信息并進(jìn)行排序,該第二分發(fā)鏈表用于獲取本次需視頻傳輸?shù)慕K端信息并進(jìn)行排序,其中該終端信息包括終端的端口號和IP地址;S22、求取第二分發(fā)鏈表與第一分發(fā)鏈表的差集并存儲(chǔ)至第一差集鏈表中,由此獲得增加的終端信息;求取第一分發(fā)鏈表與第二分發(fā)鏈表的差集并存儲(chǔ)至第二差集鏈表中,由此獲得減少的終端信息;S23、判斷第一差集鏈表和第二差集鏈表是否均為空如果均為空,則表示本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息相同,該待分發(fā)鏈表的待分發(fā)鏈表改變標(biāo)記位變量保持為O ;否則表示本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息不相同,將待分發(fā)鏈表的待分發(fā)鏈表改變標(biāo)記位變量設(shè)置為I ;S24、判斷該待分發(fā)鏈表改變標(biāo)記位變量是否為I :如果該待分發(fā)鏈表改變標(biāo)記位變量為0,則不更新待分發(fā)鏈表中的終端信息;如果該待分發(fā)鏈表改變標(biāo)記位變量為I則重新計(jì)算該分發(fā)信息數(shù)組的每一第一元素中端口號所對應(yīng)IP地址的起始位置iPos、端口號所對應(yīng)IP地址的數(shù)量iCount,將每 一元素的分發(fā)信息標(biāo)記位iFlag設(shè)置為1,將第二分發(fā)鏈表的終端信息賦給待分發(fā)鏈表,并將該待分發(fā)鏈表改變標(biāo)記位變量重新設(shè)置為O。該基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法還包括該轉(zhuǎn)發(fā)服務(wù)器通過子線程向?qū)?yīng)終端轉(zhuǎn)發(fā)視頻的步驟S30、轉(zhuǎn)發(fā)服務(wù)器根據(jù)待分發(fā)鏈表中的端口號,分別開啟與該端口號對應(yīng)的子線程,并根據(jù)該待分發(fā)鏈表中的IP地址,分別與對應(yīng)的終端建立RTP會(huì)話,發(fā)送SR包和RTP包;S31、分別對每一RTP會(huì)話進(jìn)行檢錯(cuò)如果RTP會(huì)話存在錯(cuò)誤則退出該子線程,否則執(zhí)行下一步;S32、根據(jù)RTP會(huì)話中子線程對應(yīng)的端口號,在分發(fā)線程數(shù)組中查找與該端口號對應(yīng)的第二元素,并且判斷該第二元素的分發(fā)線程標(biāo)記位是否為I :如果該第二元素的分發(fā)線程標(biāo)記位為I則將該第二元素的分發(fā)線程標(biāo)記位設(shè)置為0,并退出該子線程,否則直接執(zhí)行下一步;S33、判斷對應(yīng)終端是否接收到轉(zhuǎn)發(fā)服務(wù)器發(fā)送的SR包如果接收到轉(zhuǎn)發(fā)服務(wù)器發(fā)送的SR包則將RR包反饋給該轉(zhuǎn)發(fā)服務(wù)器,轉(zhuǎn)發(fā)服務(wù)器根據(jù)RR包對視頻轉(zhuǎn)發(fā)參數(shù)進(jìn)行調(diào)節(jié),從而保證視頻的清晰轉(zhuǎn)發(fā),否則直接執(zhí)行下一步;S34、根據(jù)RTP會(huì)話中子線程對應(yīng)的端口號,在分發(fā)信息數(shù)組中查找與該端口號對應(yīng)的第一元素,并且判斷該第一元素的分發(fā)信息標(biāo)記位iFlag是否為I :如果該第一元素的分發(fā)信息標(biāo)記位iFlag為1,則將該分發(fā)信息標(biāo)記設(shè)置為O并執(zhí)行步驟S35 ;否則執(zhí)行步驟S36 ;S35、判斷目的IP地址是否與本機(jī)IP地址一致,若一致則目的IP地址設(shè)置為“127. O. O. 1”,轉(zhuǎn)發(fā)目的端口為當(dāng)前端口增加或減少某一固定值,若目的IP地址與本機(jī)IP地址不一致,則目的IP地址不變,目的端口為當(dāng)前端口,并將分發(fā)線程數(shù)組中該端口號對應(yīng)的第二元素的分發(fā)線程標(biāo)記位設(shè)置為O ;S36、判斷子線程中是否具有視頻流如果子線程中不具有視頻流,則結(jié)束RTP會(huì)話,否則執(zhí)行下一步;S37、判斷對應(yīng)終端是否接收到轉(zhuǎn)發(fā)服務(wù)器轉(zhuǎn)發(fā)的RTP包如果未接收到轉(zhuǎn)發(fā)服務(wù)器轉(zhuǎn)發(fā)的RTP包則結(jié)束RTP會(huì)話,發(fā)送RTP會(huì)話中的Bye包給轉(zhuǎn)發(fā)服務(wù)器,否則執(zhí)行下一
I K
少;S38、判斷該RTP包是否具有mark位如果該RTP包具有mark位則表示該RTP包所在的幀結(jié)束,將下一 RTP包的時(shí)間戳增加一個(gè)單位量,并轉(zhuǎn)發(fā)該RTP包,否則直接轉(zhuǎn)發(fā)該RTP 包;
S39、轉(zhuǎn)發(fā)服務(wù)器刪除已發(fā)送的RTP包,并轉(zhuǎn)發(fā)未發(fā)送的RTP包。該基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法還包括視頻服務(wù)器與轉(zhuǎn)發(fā)服務(wù)器之間視頻傳輸?shù)臋z測步驟S40、視頻服務(wù)器實(shí)時(shí)地向轉(zhuǎn)發(fā)服務(wù)器發(fā)送RTP會(huì)話的SR包;S41、轉(zhuǎn)發(fā)服務(wù)器將RR包反饋給視頻服務(wù)器,視頻服務(wù)器根據(jù)RR包對視頻傳輸參數(shù)進(jìn)行調(diào)節(jié),從而保證視頻的清晰傳輸。該基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法還包括終端自身轉(zhuǎn)發(fā)的步驟具有自身轉(zhuǎn)發(fā)功能的終端請求第一端口號對應(yīng)的視頻流時(shí),將該第一端口號增加或者減少一個(gè)固定數(shù)值,形成第二端口號,由此將第一端口號對應(yīng)的視頻流轉(zhuǎn)發(fā)至該終端的第二端口號處,其他終端可以在該終端的第二端口號處采集第一端口號對應(yīng)的視頻流。綜上所述,由于采用了上述技術(shù)方案,本發(fā)明的有益效果是I、首先,本發(fā)明中每一視頻對應(yīng)于一個(gè)子線程,且由主線程實(shí)現(xiàn)子線程啟閉的控制,由子線程實(shí)現(xiàn)視頻轉(zhuǎn)發(fā),保證了線程之間的并發(fā)執(zhí)行,互不干擾;其次,當(dāng)端口號減少時(shí)關(guān)閉與該端口號對應(yīng)的線程,當(dāng)端口號增加時(shí)開啟與該端口號對應(yīng)的線程,實(shí)現(xiàn)了對子線程啟閉的控制,不僅保證了多路視頻的同時(shí)轉(zhuǎn)發(fā),而且防止減少的線程占用帶寬,降低了視頻傳輸成本,使得視頻傳輸?shù)男Ч^好;最后,本發(fā)明建立分發(fā)線程數(shù)組,對端口號以及端口號對應(yīng)線程的啟閉狀態(tài)進(jìn)行存儲(chǔ);2、實(shí)現(xiàn)了終端信息的更新,本發(fā)明中轉(zhuǎn)發(fā)服務(wù)器只需獲取或者指定對應(yīng)終端的端口號和IP地址,即可實(shí)現(xiàn)多路視頻的同時(shí)轉(zhuǎn)發(fā),此外,本發(fā)明建立分發(fā)信息數(shù)組,對端口號以及端口號對應(yīng)的IP地址的起始位置、數(shù)量進(jìn)行存儲(chǔ),在視頻轉(zhuǎn)發(fā)查找IP地址時(shí)不必逐一遍歷待分發(fā)鏈表中的IP地址,縮短了目的IP地址的查找時(shí)間,從而減少轉(zhuǎn)發(fā)過程中的延時(shí);3、本發(fā)明采用RTP會(huì)話實(shí)現(xiàn)了轉(zhuǎn)發(fā)服務(wù)器向終端轉(zhuǎn)發(fā)視頻,在RTP會(huì)話中轉(zhuǎn)發(fā)服務(wù)器向終端發(fā)送SR包,并且終端向轉(zhuǎn)發(fā)服務(wù)器反饋RR包,轉(zhuǎn)發(fā)服務(wù)器根據(jù)RR包對視頻轉(zhuǎn)發(fā)的速度等視頻轉(zhuǎn)發(fā)參數(shù)進(jìn)行調(diào)節(jié),從而保證視頻的清晰轉(zhuǎn)發(fā),防止視頻流的中斷;此外,在RTP會(huì)話中在接收到具有mark位的RTP包時(shí)將下一 RTP包的時(shí)間戳增加一個(gè)單位量,從而區(qū)別由RTP包組成的各幀,在RTP包發(fā)送完成后刪除,從而節(jié)約了內(nèi)存;4、本發(fā)明中視頻服務(wù)器實(shí)時(shí)地向轉(zhuǎn)發(fā)服務(wù)器發(fā)送RTP會(huì)話的SR包,且轉(zhuǎn)發(fā)服務(wù)器將RR包反饋給視頻服務(wù)器,視頻服務(wù)器根據(jù)RR包對視頻傳輸?shù)乃俣鹊纫曨l傳輸參數(shù)進(jìn)行調(diào)節(jié),從而保證視頻的清晰傳輸,防止視頻流傳輸?shù)闹袛啵?、具有自身轉(zhuǎn)發(fā)功能的終端請求第一端口號對應(yīng)的視頻流時(shí),將該第一端口號增加或者減少一個(gè)固定數(shù)值,形成第二端口號,由此將第一端口號對應(yīng)的視頻流轉(zhuǎn)發(fā)至該終端的第二端口號處,其他終端可以在該終端的第二端口號處采集第一端口號對應(yīng)的視頻流,由于在轉(zhuǎn)發(fā)視頻信息中做了掩飾,轉(zhuǎn)發(fā)視頻信息中寫入的還是該終端的第一端口,此時(shí)視頻流轉(zhuǎn)發(fā)并未經(jīng)過網(wǎng)卡,因此延時(shí)性和視頻效果更好。
本發(fā)明將通過例子并參照附圖的方式說明,其中
圖I是傳統(tǒng)視頻傳輸系統(tǒng)的電路原理圖;圖2是本發(fā)明中多視頻轉(zhuǎn)發(fā)系統(tǒng)的電路原理圖;圖3是轉(zhuǎn)發(fā)服務(wù)器對終端信息進(jìn)行更新和對子線程啟閉進(jìn)行控制的流程圖;圖4是轉(zhuǎn)發(fā)服務(wù)器向?qū)?yīng)終端轉(zhuǎn)發(fā)視頻的流程圖;圖5是本發(fā)明的第一實(shí)施例中,轉(zhuǎn)發(fā)服務(wù)器對終端信息進(jìn)行更新和對子線程啟閉進(jìn)行控制的流程圖。
具體實(shí)施例方式本說明書中公開的所有特征,或公開的所有方法或過程中的步驟,除了互相排斥的特征和/或步驟以外,均可以以任何方式組合。本說明書(包括任何附加權(quán)利要求、摘要和附圖)中公開的任一特征,除非特別敘述,均可被其他等效或具有類似目的的替代特征加以替換。即,除非特別敘述,每個(gè)特征只是一系列等效或類似特征中的一個(gè)例子而已。如圖2所示,該基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)系統(tǒng)包括視頻服務(wù)器、轉(zhuǎn)發(fā)服務(wù)器和多個(gè)終端,其中視頻服務(wù)器用于將多路視頻發(fā)送給轉(zhuǎn)發(fā)服務(wù)器,轉(zhuǎn)發(fā)服務(wù)器用于將對應(yīng)的視頻轉(zhuǎn)發(fā)給需視頻傳輸?shù)慕K端。在轉(zhuǎn)發(fā)服務(wù)器向需視頻傳輸?shù)慕K端轉(zhuǎn)發(fā)對應(yīng)的視頻時(shí),轉(zhuǎn)發(fā)服務(wù)器通過主線程實(shí)現(xiàn)終端信息和子線程啟閉的更新,通過子線程實(shí)現(xiàn)視頻的轉(zhuǎn)發(fā),并且每一路視頻對應(yīng)于一個(gè)單獨(dú)的子線程,每一子線程對應(yīng)于一個(gè)端口號;該轉(zhuǎn)發(fā)服務(wù)器創(chuàng)建待分發(fā)鏈表來存儲(chǔ)更新后的終端信息,并創(chuàng)建線程鏈表來存儲(chǔ)增加和減少的端口號,從而實(shí)現(xiàn)該端口號對應(yīng)的線程的啟閉,其中該待分發(fā)鏈表具有待分發(fā)鏈表改變標(biāo)記位變量,該終端信息包括終端的端口號和IP地址,該線程鏈表具有線程鏈表標(biāo)記位變量。此夕卜,該轉(zhuǎn)發(fā)服務(wù)器建立分發(fā)信息數(shù)組和分發(fā)線程數(shù)組,其中該分發(fā)信息數(shù)組由多個(gè)第一元素組成,每一第一兀素均對應(yīng)于一個(gè)端口號且由該第一兀素的下標(biāo)來表不該端口號,每一第一兀素均存儲(chǔ)有三個(gè)變量分發(fā)信息標(biāo)記位iFlag、端口號所對應(yīng)IP地址在待分發(fā)鏈表中的起始位置iPos以及端口號所對應(yīng)IP地址的數(shù)量iCount ;該分發(fā)線程數(shù)組由多個(gè)第二元素組成,每一第二元素均對應(yīng)于一個(gè)端口號并由該第二元素的下標(biāo)來表示該端口號,每一第二元素均存儲(chǔ)有一個(gè)變量分發(fā)線程標(biāo)記位。該基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法包括轉(zhuǎn)發(fā)服務(wù)器轉(zhuǎn)發(fā)服務(wù)器對終端信息的更新步驟,轉(zhuǎn)發(fā)服務(wù)器對子線程啟閉的控制步驟,轉(zhuǎn)發(fā)服務(wù)器向終端轉(zhuǎn)發(fā)視頻的步驟,視頻服務(wù)器與轉(zhuǎn)發(fā)服務(wù)器之間視頻傳輸?shù)臋z測步驟以及終端自身轉(zhuǎn)發(fā)的步驟。如圖3所示,該轉(zhuǎn)發(fā)服務(wù)器對終端信息進(jìn)行更新,將本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息進(jìn)行比較如果相同則不更新終端信息,如果不相同則更新終端信息,其中該終端信息包括終端的端口號和IP地址。具體地,該轉(zhuǎn)發(fā)服務(wù)器定時(shí)獲取終端信息,并且通過主線程按照以下步驟對終端信息進(jìn)行更新并對子線程的啟閉進(jìn)行控制 Al、將待分發(fā)鏈表的待分發(fā)鏈表改變標(biāo)記位變量初始化為0,并將該線程鏈表的線程鏈表標(biāo)記位變量初始化為O,創(chuàng)建第一分發(fā)鏈表和第二分發(fā)鏈表; A2、該第一分發(fā)鏈表用于獲取上次需視頻傳輸?shù)慕K端信息并進(jìn)行排序,該第二分發(fā)鏈表用于獲取本次需視頻傳輸?shù)慕K端信息并進(jìn)行排序;
A3、求取第二分發(fā)鏈表與第一分發(fā)鏈表的差集并存儲(chǔ)至第一差集鏈表中,由此獲得增加的終端信息;求取第一分發(fā)鏈表與第二分發(fā)鏈表的差集并存儲(chǔ)至第二差集鏈表中,由此獲得減少的終端信息;A4、判斷第一差集鏈表與第二差集鏈表是否均為空如果均為空則表示本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息相同(即終端信息未發(fā)生變化),該待分發(fā)鏈表的待分發(fā)鏈表改變標(biāo)記位變量保持為O ;否則表示本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息不相同(即終端信息發(fā)生改變),將待分發(fā)鏈表的待分發(fā)鏈表改變標(biāo)記位變量設(shè)置為I ;A5、創(chuàng)建第一端口號鏈表和第二端口號鏈表,該第一端口號鏈表用于獲取第一分發(fā)鏈表中終端信息的端口號并進(jìn)行排序、刪除重復(fù)元素,該第二端口號鏈表用于獲取第二分發(fā)鏈表中終端信息的端口號并進(jìn)行排序、刪除重復(fù)元素;
A6、求取第二端口號鏈表與第一端口號鏈表的差集并存儲(chǔ)至第一端口差集鏈表中,由此獲得增加的端口號;求取第一端口號鏈表與第二端口號鏈表的差集并存儲(chǔ)至第二端口差集鏈表中,由此獲得減少的端口號;A7、判斷第一端口差集鏈表與第二端口差集鏈表是否均為空如果均為空,則表示端口號未改變,即端口號對應(yīng)的視頻轉(zhuǎn)發(fā)子線程未改變,該線程鏈表中的線程鏈表標(biāo)記位變量保持為0,并且將第二分發(fā)鏈表的終端信息賦給第一分發(fā)鏈表;否則表示端口號發(fā)生改變,即端口號對應(yīng)的視頻轉(zhuǎn)發(fā)子線程發(fā)生改變,將線程鏈表中的線程鏈表標(biāo)記位變量設(shè)置為I,將第一端口差集鏈表中的端口號分別賦給線程鏈表的一個(gè)結(jié)點(diǎn)并將這些結(jié)點(diǎn)的屬性值設(shè)置為第一值(諸如將iType值設(shè)置為I),將第二端口差集鏈表中的端口號分別賦給線程鏈表的一個(gè)結(jié)點(diǎn)并將這些結(jié)點(diǎn)的屬性值設(shè)置為第二值(諸如將iType值設(shè)置為2),并且將第二分發(fā)鏈表的終端信息賦給第一分發(fā)鏈表;AS、判斷該待分發(fā)鏈表改變標(biāo)記位變量是否為I :如果該待分發(fā)鏈表改變標(biāo)記位變量為0,則不更新待分發(fā)鏈表中的終端信息,待分發(fā)鏈表中的終端信息仍然為上次需視頻傳輸?shù)慕K端信息;如果該待分發(fā)鏈表改變標(biāo)記位變量為1,則重新計(jì)算該分發(fā)信息數(shù)組的每一第一元素中端口號所對應(yīng)IP地址的起始位置iPos、端口號所對應(yīng)IP地址的數(shù)量iCount,將每一元素的分發(fā)信息標(biāo)記位iFlag設(shè)置為1,將第二分發(fā)鏈表的終端信息賦給待分發(fā)鏈表,并將待分發(fā)鏈表改變標(biāo)記位變量重新設(shè)置為O。A9、判斷該線程鏈表的線程鏈表標(biāo)記位變量是否為I :如果該線程鏈表標(biāo)記位變量為0,則重復(fù)執(zhí)行上述步驟;如果該線程鏈表標(biāo)記位變量為1,則進(jìn)一步判斷線程鏈表中結(jié)點(diǎn)的屬性值如果結(jié)點(diǎn)的屬性值為第一值則在該分發(fā)線程數(shù)組中查找與該結(jié)點(diǎn)中端口號對應(yīng)的第二元素,并將該第二元素的分發(fā)線程標(biāo)記設(shè)置為0,從而開啟與該結(jié)點(diǎn)中端口號對應(yīng)的子線程;如果結(jié)點(diǎn)的屬性值為第二值則在該分發(fā)線程數(shù)組中查找與該結(jié)點(diǎn)中端口號對應(yīng)的第二元素,并將該第二元素的分發(fā)線程標(biāo)記設(shè)置為1,從而關(guān)閉與該結(jié)點(diǎn)中端口號對應(yīng)的子線程;并且將該線程鏈表中的線程鏈表標(biāo)記位變量重新設(shè)置為0,重復(fù)執(zhí)行上述步驟。綜上所述,上述步驟中步驟Al A4、步驟AS為終端信息的更新過程,步驟A5 A7、步驟A9為對子線程啟閉的控制過程。本發(fā)明通過上述步驟更新終端信息,轉(zhuǎn)發(fā)服務(wù)器只需獲取或者指定對應(yīng)終端的端口號和IP地址,即可實(shí)現(xiàn)多路視頻的同時(shí)轉(zhuǎn)發(fā),并且本發(fā)明建立分發(fā)信息數(shù)組,對端口號以及端口號對應(yīng)的IP地址的起始位置、數(shù)量進(jìn)行存儲(chǔ),在視頻轉(zhuǎn)發(fā)查找IP地址時(shí)不必逐一遍歷待分發(fā)鏈表中的IP地址,縮短了目的IP地址的查找時(shí)間,從而減少轉(zhuǎn)發(fā)過程中的延時(shí)。此外,當(dāng)端口號減少時(shí)關(guān)閉與該端口號對應(yīng)的線程,當(dāng)端口號增加時(shí)開啟與該端口號對應(yīng)的線程,從而不僅保證了多路視頻的同時(shí)轉(zhuǎn)發(fā),而且防止減少的線程占用帶寬,降低了視頻傳輸成本,使得視頻傳輸?shù)男Ч^好。此外,由于終端信息的更新以及子線程啟閉的控制均在主線程中實(shí)現(xiàn),視頻的轉(zhuǎn)發(fā)在子線程中實(shí)現(xiàn)且每一視頻對應(yīng)于一個(gè)子線程,因此保證了線程之間的并發(fā)執(zhí)行,互不干擾。如圖4所示,該轉(zhuǎn)發(fā)服務(wù)器通過子線程向?qū)?yīng)終端轉(zhuǎn)發(fā)視頻的過程由以下步驟組成
Cl、轉(zhuǎn)發(fā)服務(wù)器根據(jù)待分發(fā)鏈表中的端口號,分別開啟與該端口號對應(yīng)的子線程,并根據(jù)待分發(fā)鏈表中的IP地址,分別與對應(yīng)的終端建立RTP(Real-Time TransportProtocol,實(shí)時(shí)傳輸協(xié)議)會(huì)話,發(fā)送SR包和RTP包;C2、分別對每一 RTP會(huì)話進(jìn)行檢錯(cuò)如果RTP會(huì)話存在錯(cuò)誤則退出該子線程,否則執(zhí)行下一步;C3、根據(jù)RTP會(huì)話中子線程對應(yīng)的端口號,在分發(fā)線程數(shù)組中查找與該端口號對應(yīng)的第二元素,并且判斷該第二元素的分發(fā)線程標(biāo)記位是否為I :如果該第二元素的分發(fā)線程標(biāo)記位為I則將該第二元素的分發(fā)線程標(biāo)記位設(shè)置為0,并退出該子線程,否則直接執(zhí)行下一步;C4、判斷對應(yīng)終端是否接收到該轉(zhuǎn)發(fā)服務(wù)器發(fā)送的SR包如果接收到該轉(zhuǎn)發(fā)服務(wù)器發(fā)送的SR包則將RR包反饋給該轉(zhuǎn)發(fā)服務(wù)器,轉(zhuǎn)發(fā)服務(wù)器根據(jù)RR包對視頻轉(zhuǎn)發(fā)的速度等視頻轉(zhuǎn)發(fā)參數(shù)進(jìn)行調(diào)節(jié),從而保證視頻的清晰轉(zhuǎn)發(fā),防止視頻流的中斷;否則直接執(zhí)行下一
I K
少;C5、根據(jù)RTP會(huì)話中子線程對應(yīng)的端口號,在分發(fā)信息數(shù)組中查找與該端口號對應(yīng)的第一元素,并且判斷該第一元素的分發(fā)信息標(biāo)記位iFlag是否為I :如果該第一元素的分發(fā)信息標(biāo)記位iFlag為1,則將該分發(fā)信息標(biāo)記設(shè)置為O并執(zhí)行步驟C6 ;否則執(zhí)行步驟C7 ;C6、判斷目的IP地址是否與本機(jī)IP地址一致,若一致則轉(zhuǎn)發(fā)目的地址設(shè)置為“127. O. O. 1”,轉(zhuǎn)發(fā)目的端口為當(dāng)前端口增加或減少某一固定值,若目的IP地址與本機(jī)IP地址不一致,則目的IP地址不變,目的端口為當(dāng)前端口,并將分發(fā)線程數(shù)組中該端口對應(yīng)的第二元素的分發(fā)線程標(biāo)記位設(shè)置為O ;C7、判斷子線程中是否具有視頻流如果子線程中不具有視頻流則結(jié)束該RTP會(huì)話,否則執(zhí)行下一步;CS、判斷對應(yīng)的終端是否接收到該轉(zhuǎn)發(fā)服務(wù)器發(fā)送的RTP包如果未接收到該轉(zhuǎn)發(fā)服務(wù)器發(fā)送的RTP包則結(jié)束該RTP會(huì)話,發(fā)送RTP會(huì)話中的Bye包給轉(zhuǎn)發(fā)服務(wù)器,否則執(zhí)行下一步;C9、判斷該RTP包是否具有mark位如果該RTP包具有mark位則表示該RTP包所在的幀結(jié)束,將下一 RTP包的時(shí)間戳增加一個(gè)單位量,并轉(zhuǎn)發(fā)該RTP包,否則直接轉(zhuǎn)發(fā)該RTP包;其中在一個(gè)幀內(nèi)RTP包的時(shí)間戳是相等的,在視頻轉(zhuǎn)發(fā)過程中以幀為單位進(jìn)行轉(zhuǎn)發(fā),終端接收到以幀為單位的視頻數(shù)據(jù)后會(huì)進(jìn)行組幀,為了統(tǒng)計(jì)丟包率等,從而反映視頻轉(zhuǎn)發(fā)的品質(zhì),需要對各幀進(jìn)行區(qū)分,當(dāng)終端接收到具有mark位的RTP包時(shí)表示該幀結(jié)束;C10、為了節(jié)省內(nèi)存,轉(zhuǎn)發(fā)服務(wù)器會(huì)刪除已發(fā)送的RTP包,并轉(zhuǎn)發(fā)未發(fā)送的RTP包,重復(fù)步驟C7 C8上述步驟Cl C4用于確定RTP會(huì)話是否成功建立,步驟C5用于更新視頻轉(zhuǎn)發(fā)的終端IP地址,步驟C6用于判斷是否接收到視頻流,步驟C7用于確定終端是否接收到RTP包,步驟CS用于進(jìn)一步對由RTP包組成的各幀進(jìn)行區(qū)別,步驟C9用于刪除已發(fā)送的RTP包,節(jié)約了內(nèi)存。視頻服務(wù)器與轉(zhuǎn)發(fā)服務(wù)器之間視頻傳輸?shù)臋z測過程由以下步驟組成D1、視頻服務(wù)器實(shí)時(shí)地向轉(zhuǎn)發(fā)服務(wù)器發(fā)送RTP會(huì)話的SR包;D2、轉(zhuǎn)發(fā)服務(wù)器將RR包反饋給視頻服務(wù)器,視頻服務(wù)器根據(jù)RR包對視頻傳輸?shù)乃俣鹊纫曨l傳輸參數(shù)進(jìn)行調(diào)節(jié),從而保證視頻的清晰傳輸,防止視頻流傳輸?shù)闹袛唷=K端自身轉(zhuǎn)發(fā)的過程由以下步驟組成具有自身轉(zhuǎn)發(fā)功能的終端請求第一端口號對應(yīng)的視頻流時(shí),將該第一端口號增加或者減少一個(gè)固定數(shù)值,形成第二端口號,由此將第一端口號對應(yīng)的視頻流轉(zhuǎn)發(fā)至該終端的第二端口號處,其他終端可以在該終端的第二端口號處采集第一端口號對應(yīng)的視頻流。例如,具有自身轉(zhuǎn)發(fā)功能的終端請求5000端口對應(yīng)的視頻流時(shí),采用算法增加固定數(shù)值3000,則該5000端口的視頻流被該終端轉(zhuǎn)發(fā)到了該終端的8000端口,其他終端可在該終端的8000端口采集該視頻流,由于在轉(zhuǎn)發(fā)視頻信息中做了掩飾,轉(zhuǎn)發(fā)視頻信息中寫入的還是該終端的5000端口,此時(shí)視頻流轉(zhuǎn)發(fā)并未經(jīng)過網(wǎng)卡,因此延時(shí)性和視頻效果更好。在本發(fā)明的第一實(shí)施例中,如圖5所示,轉(zhuǎn)發(fā)服務(wù)器對終端信息進(jìn)行更新以及對子線程啟閉進(jìn)行控制的過程由以下步驟組成(I)將線程鏈表deqtDistThread的線程鏈表標(biāo)記位變量m_ideqDistThreadFlag初始化為0,并將待分發(fā)鏈表deqtDist的待分發(fā)鏈表改變標(biāo)記位變初始化為O。(2)創(chuàng)建第二分發(fā)鏈表deqstrDist2和第一分發(fā)鏈表deqstrDistl,第二分發(fā)鏈表deqstrDist2用于獲取本次需視頻傳輸?shù)慕K端信息并進(jìn)行排序,第一分發(fā)鏈表deqstrDistl用于從待分發(fā)鏈表中獲取上次需視頻傳輸?shù)慕K端信息并進(jìn)行排序,其中該終端信息包括終端的端口號和IP地址。(3)求取第二分發(fā)鏈表deqstrDist2與第一分發(fā)鏈表deqstrDistl的差集并存儲(chǔ)至第一差集鏈表deqstrDistlpDifl中,從而獲得增加的終端信息,求取第一分發(fā)鏈表deqstrDistl與第二分發(fā)鏈表deqstrDist2的差集并存儲(chǔ)至第二差集鏈表deqstrDistIpDif2中,從而獲得減少的終端信息。(4)判斷第一差集鏈表 deqstrDistlpDifl 和第二差集鏈表 deqstrDistIpDif2 是否均為空,如果均為空,則表示本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息相同,將待分發(fā)鏈表deqtDist的待分發(fā)鏈表改變標(biāo)記位變量HijdeqDistFlag保持為O ;否則表示本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息不相同,將待分發(fā)鏈表deqtDist的待分發(fā)鏈表改變標(biāo)記位變量m_ideqDistFlag設(shè)置為I。(5)將第一分發(fā)鏈表deqstrDistl和第二分發(fā)鏈表deqstrDist2的端口號分別置于第一端口號鏈表deqstrDistPortl和第二端口號鏈表deqstrDistPort2中,并分別對第一端口號鏈表deqstrDistPortl和第二端口號鏈表deqstrDistPort2進(jìn)行排序、去掉重復(fù)元素。(6)求取第二端口號鏈表 deqstrDistPort2 與第一端口號鏈表 deqstrDistPortl的差集并存儲(chǔ)至第一端口差集鏈表deqstrDistPortDifl中,從而獲得增加的端口號,求取第一端口號鏈表deqstrDistPortl與第二端口號鏈表deqstrDistPort2的差集并存儲(chǔ)至第二端口差集鏈表 deqstrDistPortDif2 中。 (7)判斷第一端口差集鏈表deqstrDistPortDifl與第二端口差集鏈表deqstrDiStPortDif2 是否均為空如果均為空,則該線程鏈表中的線程鏈表標(biāo)記位變量m_ideqDistThreadFlag保持為O,并將第二分發(fā)鏈表deqstrDist2的終端信息賦給第一分發(fā)鏈表deqstrDistl ;否則將該線程鏈表中的線程鏈表標(biāo)記位變量m_ideqDistThreadFlag設(shè)置為1,將第一端口差集鏈表deqstrDistPortDifl中的端口號分別賦給線程鏈表deqtDistThread的一個(gè)結(jié)點(diǎn)并將這些結(jié)點(diǎn)的iType值設(shè)置為I,將第二端口差集鏈表deqstrDistPortDif2中的端口號分別賦給線程鏈表deqtDistThread的一個(gè)結(jié)點(diǎn)并將這些結(jié)點(diǎn)的iType值設(shè)置為2,并且第二分發(fā)鏈表deqstrDist2中的終端信息賦給第一分發(fā)鏈表deqstrDistl。(8)判斷待分發(fā)鏈表deqtDist的待分發(fā)鏈表改變標(biāo)記位變量m_ideqDistFlag是否為I :如果該待分發(fā)鏈表改變標(biāo)記位變量HijdeqDistFlag為1,則更新分發(fā)信息數(shù)組的元素(該分發(fā)數(shù)組為全局變量),將重新計(jì)算該分發(fā)信息數(shù)組的每一第一元素中端口號所對應(yīng)IP地址的起始位置iPos、端口號所對應(yīng)IP地址的數(shù)量iCount,將每一元素的分發(fā)信息標(biāo)記位iFlag設(shè)置為I,將第二分發(fā)鏈表中的終端信息賦給待分發(fā)鏈表,并且將待分發(fā)鏈表改變標(biāo)記位變量m_ideqDistFlag置為O ;如果該待分發(fā)鏈表改變標(biāo)記位變量HijdeqDistFlag為0,則不更新待分發(fā)鏈表deqtDist中的終端信息。(9)判斷線程鏈表deqtDistThread的線程鏈表標(biāo)記位變量m_ideqDistThreadFlag 是否為 I :如果該線程鏈表標(biāo)記位變量m_ideqDistThreadFlag為O,則重復(fù)執(zhí)行上述步驟;如果該線程鏈表標(biāo)記位變量m_ideqDistThreadFlag為I,則進(jìn)一步判斷線程鏈表deqtDistThread 中結(jié)點(diǎn)的 iType 值如果結(jié)點(diǎn)的iType值等于I則在該分發(fā)線程數(shù)組中查找與該結(jié)點(diǎn)中端口號對應(yīng)的第二元素,并將該第二元素的分發(fā)線程標(biāo)記設(shè)置為0,從而開啟與該結(jié)點(diǎn)中端口號對應(yīng)的子線程;如果結(jié)點(diǎn)的iType值等于2則在該分發(fā)線程數(shù)組中查找與該結(jié)點(diǎn)中端口號對應(yīng)的第二元素,并將該第二元素的分發(fā)線程標(biāo)記設(shè)置為1,從而關(guān)閉與該結(jié)點(diǎn)中端口號對應(yīng)的子線程;并且將該線程鏈表deqtDistThread中的線程鏈表標(biāo)記位變量m_ideqDistThreadFlag重新設(shè)置為O。在上述步驟中步驟⑴ ⑷為終端信息的更新流程,步驟(5) (7)為子線程啟閉的控制流程,步驟(8)為根據(jù)終端信息的變化結(jié)果更新分發(fā)信息數(shù)組的流程,步驟(9)為根據(jù)子線程變化的結(jié)果更新分發(fā)線程的流程。
本發(fā)明并不局限于前述的具體實(shí)施方式
。本發(fā)明擴(kuò)展到任何在本說明書中披露的新特征或任何新的組合,以及披露的任一新的方法或過程的步驟或任何新的組合。
權(quán)利要求
1.一種基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法,包括多個(gè)終端,其特征在于還包括轉(zhuǎn)發(fā)服務(wù)器,該轉(zhuǎn)發(fā)服務(wù)器用于接收多路視頻并將對應(yīng)的視頻轉(zhuǎn)發(fā)給需視頻傳輸?shù)慕K端; 在轉(zhuǎn)發(fā)服務(wù)器向需視頻傳輸?shù)慕K端轉(zhuǎn)發(fā)對應(yīng)的視頻時(shí),轉(zhuǎn)發(fā)服務(wù)器通過主線程實(shí)現(xiàn)終端信息和子線程啟閉的更新,通過子線程實(shí)現(xiàn)視頻的轉(zhuǎn)發(fā),并且每一路視頻對應(yīng)于一個(gè)單獨(dú)的子線程,每一子線程對應(yīng)于一個(gè)端口號; 該轉(zhuǎn)發(fā)服務(wù)器創(chuàng)建待分發(fā)鏈表來存儲(chǔ)更新后的終端信息,并創(chuàng)建線程鏈表來存儲(chǔ)增加和減少的端口號,從而實(shí)現(xiàn)該端口號對應(yīng)的子線程的啟閉,其中該終端信息包括終端的端口號和IP地址,該線程鏈表具有線程鏈表標(biāo)記位變量; 該多視頻轉(zhuǎn)發(fā)方法包括該轉(zhuǎn)發(fā)服務(wù)器定時(shí)獲取終端信息,并且通過主線程對子線程的啟閉進(jìn)行控制的步驟 510、將該線程鏈表的線程鏈表標(biāo)記位變量初始化為O,創(chuàng)建第一分發(fā)鏈表和第二分發(fā)鏈表,并且建立分發(fā)線程數(shù)組,該分發(fā)線程數(shù)組由多個(gè)第二元素組成,每一第二元素均對應(yīng)于一個(gè)端口號并由該第二兀素的下標(biāo)來表不該端口號,每一第二兀素均存儲(chǔ)有一個(gè)變量分發(fā)線程標(biāo)記位; 511、該第一分發(fā)鏈表用于獲取上次需視頻傳輸?shù)慕K端信息并進(jìn)行排序,該第二分發(fā)鏈表用于獲取本次需視頻傳輸?shù)慕K端信息并進(jìn)行排序; 512、該第一端口號鏈表用于獲取第一分發(fā)鏈表中終端信息的端口號并進(jìn)行排序、刪除重復(fù)元素,該第二端口號鏈表用于獲取第二分發(fā)鏈表中終端信息的端口號并進(jìn)行排序、刪除重復(fù)元素; 513、求取第二端口號鏈表與第一端口號鏈表的差集并存儲(chǔ)至第一端口差集鏈表中,由此獲得增加的端口號;求取第一端口號鏈表與第二端口號鏈表的差集并存儲(chǔ)至第二端口差集鏈表中,由此獲得減少的端口號; 514、判斷第一端口差集鏈表和第二端口差集鏈表是否均為空如果均為空,則表示端口號未改變,即端口號對應(yīng)的視頻轉(zhuǎn)發(fā)子線程未改變,該線程鏈表中的線程鏈表標(biāo)記位變量保持為O,并且將第二分發(fā)鏈表的終端信息賦給第一分發(fā)鏈表; 否則表示端口號發(fā)生改變,即端口號對應(yīng)的視頻轉(zhuǎn)發(fā)子線程發(fā)生改變,將線程鏈表中的線程鏈表標(biāo)記位變量設(shè)置為I,將第一端口差集鏈表中的端口號分別賦給線程鏈表的一個(gè)結(jié)點(diǎn)并將這些結(jié)點(diǎn)的屬性值設(shè)置為第一值,將第二端口差集鏈表中的端口號分別賦給線程鏈表的一個(gè)結(jié)點(diǎn)并將這些結(jié)點(diǎn)的屬性值設(shè)置為第二值,并且將第二分發(fā)鏈表的終端信息賦給第一分發(fā)鏈表; 515、判斷該線程鏈表的線程鏈表標(biāo)記位變量是否為I: 如果該線程鏈表標(biāo)記位變量為O,則重復(fù)執(zhí)行步驟Sll S15 ; 如果該線程鏈表標(biāo)記位變量為1,則進(jìn)一步判斷線程鏈表中結(jié)點(diǎn)的屬性值如果結(jié)點(diǎn)的屬性值為第一值則在該分發(fā)線程數(shù)組中查找與該結(jié)點(diǎn)中端口號對應(yīng)的第二元素,并將該第二元素的分發(fā)線程標(biāo)記設(shè)置為O,從而開啟與該結(jié)點(diǎn)中端口號對應(yīng)的子線程;如果結(jié)點(diǎn)的屬性值為第二值則在該分發(fā)線程數(shù)組中查找與該結(jié)點(diǎn)中端口號對應(yīng)的第二元素,并將該第二元素的分發(fā)線程標(biāo)記設(shè)置為1,從而關(guān)閉與該結(jié)點(diǎn)中端口號對應(yīng)的子線程;并且將該線程鏈表中的線程鏈表標(biāo)記位變量重新設(shè)置為O,重復(fù)執(zhí)行步驟Sll S15。
2.根據(jù)權(quán)利要求I所述的基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法,其特征在于還包括該轉(zhuǎn)發(fā)服務(wù)器對終端信息進(jìn)行更新的步驟,將本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息進(jìn)行比較如果相同則不更新終端信息;如果不相同則更新終端信息,其中該終端信息包括終端的端口號和IP地址。
3.根據(jù)權(quán)利要求2所述的基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法,其特征在于該待分發(fā)鏈表具有待分發(fā)鏈表改變標(biāo)記位變量,該轉(zhuǎn)發(fā)服務(wù)器定時(shí)獲取終端信息,并且通過主線程對終端信息進(jìn)行更新的過程由以下步驟組成 520、將待分發(fā)鏈表的待分發(fā)鏈表改變標(biāo)記位變量初始化為O,并創(chuàng)建第一分發(fā)鏈表和第二分發(fā)鏈表,建立全局變量分發(fā)信息數(shù)組,該分發(fā)信息數(shù)組由多個(gè)第一元素組成,每一第一兀素均對應(yīng)于一個(gè)端口號且由該第一兀素的下標(biāo)來表不該端口號,每一第一兀素均存儲(chǔ)有三個(gè)變量分發(fā)信息標(biāo)記位iFlag、端口號所對應(yīng)IP地址的起始位置iPos以及端口號所對應(yīng)IP地址的數(shù)量iCount ; 521、該第一分發(fā)鏈表用于獲取上次需視頻傳輸?shù)慕K端信息并進(jìn)行排序,該第二分發(fā)鏈表用于獲取本次需視頻傳輸?shù)慕K端信息并進(jìn)行排序,其中該終端信息包括終端的端口號和IP地址; 522、求取第二分發(fā)鏈表與第一分發(fā)鏈表的差集并存儲(chǔ)至第一差集鏈表中,由此獲得增加的終端信息;求取第一分發(fā)鏈表與第二分發(fā)鏈表的差集并存儲(chǔ)至第二差集鏈表中,由此獲得減少的終端信息; 523、判斷第一差集鏈表和第二差集鏈表是否均為空如果均為空,則表示本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息相同,該待分發(fā)鏈表的待分發(fā)鏈表改變標(biāo)記位變量保持為O ; 否則表示本次需視頻傳輸?shù)慕K端信息與上次需視頻傳輸?shù)慕K端信息不相同,將待分發(fā)鏈表的待分發(fā)鏈表改變標(biāo)記位變量設(shè)置為I; 524、判斷該待分發(fā)鏈表改變標(biāo)記位變量是否為I:如果該待分發(fā)鏈表改變標(biāo)記位變量為0,則不更新待分發(fā)鏈表中的終端信息; 如果該待分發(fā)鏈表改變標(biāo)記位變量為I則重新計(jì)算該分發(fā)信息數(shù)組的每一第一元素中端口號所對應(yīng)IP地址的起始位置iPos、端口號所對應(yīng)IP地址的數(shù)量iCount,將每一元素的分發(fā)信息標(biāo)記位iFlag設(shè)置為1,將第二分發(fā)鏈表的終端信息賦給待分發(fā)鏈表,并將該待分發(fā)鏈表改變標(biāo)記位變量重新設(shè)置為O。
4.根據(jù)權(quán)利要求I 3中任何一項(xiàng)所述的基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法,其特征在于還包括該轉(zhuǎn)發(fā)服務(wù)器通過子線程向?qū)?yīng)終端轉(zhuǎn)發(fā)視頻的步驟 、 530、轉(zhuǎn)發(fā)服務(wù)器根據(jù)待分發(fā)鏈表中的端口號,分別開啟與該端口號對應(yīng)的子線程,并根據(jù)該待分發(fā)鏈表中的IP地址,分別與對應(yīng)的終端建立RTP會(huì)話,發(fā)送SR包和RTP包; 、 531、分別對每一RTP會(huì)話進(jìn)行檢錯(cuò)如果RTP會(huì)話存在錯(cuò)誤則退出該子線程,否則執(zhí)行下一步; 、532、根據(jù)RTP會(huì)話中子線程對應(yīng)的端口號,在分發(fā)線程數(shù)組中查找與該端口號對應(yīng)的第二元素,并且判斷該第二元素的分發(fā)線程標(biāo)記位是否為I :如果該第二元素的分發(fā)線程標(biāo)記位為I則將該第二元素的分發(fā)線程標(biāo)記位設(shè)置為0,并退出該子線程,否則直接執(zhí)行下一步; 、 533、判斷對應(yīng)終端是否接收到轉(zhuǎn)發(fā)服務(wù)器發(fā)送的SR包如果接收到轉(zhuǎn)發(fā)服務(wù)器發(fā)送的SR包則將RR包反饋給該轉(zhuǎn)發(fā)服務(wù)器,轉(zhuǎn)發(fā)服務(wù)器根據(jù)RR包對視頻轉(zhuǎn)發(fā)參數(shù)進(jìn)行調(diào)節(jié),從而保證視頻的清晰轉(zhuǎn)發(fā),否則直接執(zhí)行下一步; ·534、根據(jù)RTP會(huì)話中子線程對應(yīng)的端口號,在分發(fā)信息數(shù)組中查找與該端口號對應(yīng)的第一元素,并且判斷該第一元素的分發(fā)信息標(biāo)記位iFlag是否為I :如果該第一元素的分發(fā)信息標(biāo)記位iFlag為1,則將該分發(fā)信息標(biāo)記設(shè)置為O并執(zhí)行步驟S35 ;否則執(zhí)行步驟S36 ; ·535、判斷目的IP地址是否與本機(jī)IP地址一致,若一致則目的IP地址設(shè)置為“ 127. O. O. I ”,轉(zhuǎn)發(fā)目的端口為當(dāng)前端口增加或減少某一固定值,若目的IP地址與本機(jī)IP地址不一致,則目的IP地址不變,目的端口為當(dāng)前端口,并將分發(fā)線程數(shù)組中該端口號對應(yīng)的第二元素的分發(fā)線程標(biāo)記位設(shè)置為O ; ·536、判斷子線程中是否具有視頻流如果子線程中不具有視頻流,則結(jié)束RTP會(huì)話,否 則執(zhí)行下一步; ·537、判斷對應(yīng)終端是否接收到轉(zhuǎn)發(fā)服務(wù)器轉(zhuǎn)發(fā)的RTP包如果未接收到轉(zhuǎn)發(fā)服務(wù)器轉(zhuǎn)發(fā)的RTP包則結(jié)束RTP會(huì)話,發(fā)送RTP會(huì)話中的Bye包給轉(zhuǎn)發(fā)服務(wù)器,否則執(zhí)行下一步; ·538、判斷該RTP包是否具有mark位如果該RTP包具有mark位則表示該RTP包所在的幀結(jié)束,將下一 RTP包的時(shí)間戳增加一個(gè)單位量,并轉(zhuǎn)發(fā)該RTP包,否則直接轉(zhuǎn)發(fā)該RTP包; · 539、轉(zhuǎn)發(fā)服務(wù)器刪除已發(fā)送的RTP包,并轉(zhuǎn)發(fā)未發(fā)送的RTP包。
5.根據(jù)權(quán)利要求4所述的基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法,其特征在于還包括視頻服務(wù)器與轉(zhuǎn)發(fā)服務(wù)器之間視頻傳輸?shù)臋z測步驟 · 540、視頻服務(wù)器實(shí)時(shí)地向轉(zhuǎn)發(fā)服務(wù)器發(fā)送RTP會(huì)話的SR包; ·541、轉(zhuǎn)發(fā)服務(wù)器將RR包反饋給視頻服務(wù)器,視頻服務(wù)器根據(jù)RR包對視頻傳輸參數(shù)進(jìn)行調(diào)節(jié),從而保證視頻的清晰傳輸。
6.根據(jù)權(quán)利要求5所述的基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法,其特征在于還包括終端自身轉(zhuǎn)發(fā)的步驟 具有自身轉(zhuǎn)發(fā)功能的終端請求第一端口號對應(yīng)的視頻流時(shí),將該第一端口號增加或者減少一個(gè)固定數(shù)值,形成第二端口號,由此將第一端口號對應(yīng)的視頻流轉(zhuǎn)發(fā)至該終端的第二端口號處,其他終端可以在該終端的第二端口號處采集第一端口號對應(yīng)的視頻流。
全文摘要
本發(fā)明公開了一種基于端口號和IP地址的多視頻轉(zhuǎn)發(fā)方法,屬于視頻傳輸領(lǐng)域。本發(fā)明包括視頻服務(wù)器、轉(zhuǎn)發(fā)服務(wù)器和終端,該視頻服務(wù)器將多路視頻發(fā)送給該轉(zhuǎn)發(fā)服務(wù)器,該轉(zhuǎn)發(fā)服務(wù)器將對應(yīng)的視頻轉(zhuǎn)發(fā)給需視頻傳輸?shù)慕K端;在轉(zhuǎn)發(fā)服務(wù)器向需視頻傳輸?shù)慕K端轉(zhuǎn)發(fā)對應(yīng)的視頻時(shí),轉(zhuǎn)發(fā)服務(wù)器通過主線程實(shí)現(xiàn)終端信息和子線程啟閉的更新,通過子線程實(shí)現(xiàn)視頻的轉(zhuǎn)發(fā),并且每一路視頻對應(yīng)于一個(gè)單獨(dú)的子線程,每一子線程對應(yīng)于一個(gè)端口號。本發(fā)明保證了線程之間的并發(fā)執(zhí)行,互不干擾;此外實(shí)現(xiàn)對子線程啟閉的控制,不僅保證了多路視頻的同時(shí)轉(zhuǎn)發(fā),而且防止減少的線程占用帶寬,降低了視頻傳輸成本,使得視頻傳輸?shù)男Ч^好。
文檔編號H04N21/266GK102647625SQ20121013513
公開日2012年8月22日 申請日期2012年5月3日 優(yōu)先權(quán)日2012年5月3日
發(fā)明者劉輝, 李校林, 李津, 楊豐瑞 申請人:重慶信科設(shè)計(jì)有限公司, 重慶郵電大學(xué)