專利名稱:一種流媒體分發(fā)方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及無線數(shù)據(jù)傳輸領(lǐng)域,特別涉及一種流媒體分發(fā)方法和裝置。
背景技術(shù):
目前對流媒體進(jìn)行轉(zhuǎn)發(fā)時(shí),一般都會(huì)用一定的方法對流媒體進(jìn)行分發(fā)。分發(fā)時(shí)主要有兩種形式,一種形式是將單播協(xié)議的源流轉(zhuǎn)換為組播協(xié)議的目標(biāo)流進(jìn)行分發(fā),該種方法需要路由對組播的支持所以主要用于局域網(wǎng)的分發(fā)。第二種形式為轉(zhuǎn)發(fā)服務(wù)器將源流復(fù)用后使用單播協(xié)議分發(fā)成多路目標(biāo)流。該方法需要轉(zhuǎn)發(fā)服務(wù)器采取一定方法對源流進(jìn)行復(fù)用。移動(dòng)前端設(shè)備一般都采用廣域網(wǎng)與服務(wù)器進(jìn)行通訊,因此移動(dòng)流媒體的分發(fā)將主要采 取第二種形式。該分發(fā)形式的實(shí)現(xiàn)步驟主要為每個(gè)源流創(chuàng)建一個(gè)源流緩沖區(qū)隊(duì)列;為隊(duì)列設(shè)定一個(gè)緩沖區(qū)大小閾值;源產(chǎn)生數(shù)據(jù)后判斷該數(shù)據(jù)加入緩沖區(qū)后是否超過緩沖區(qū)的閾值,如果沒有超過則將數(shù)據(jù)寫入該緩沖區(qū)隊(duì)列,否則將緩沖區(qū)隊(duì)列中最先進(jìn)入隊(duì)列的數(shù)據(jù)取出并刪除,直到可以向隊(duì)列中加入當(dāng)前源產(chǎn)生的新數(shù)據(jù),而緩沖區(qū)大小不超過設(shè)置的閾值為止,然后將源產(chǎn)生的新數(shù)據(jù)寫入緩沖區(qū)隊(duì)列。目標(biāo)流對源緩沖區(qū)的使用可以采用兩種策略,策略I:檢測源流緩沖區(qū)中是否有數(shù)據(jù),如果有則進(jìn)入b,如果沒有等待一段時(shí)間后再次進(jìn)入a進(jìn)行檢測;從源流緩沖區(qū)中取出最先進(jìn)入源流緩沖區(qū)中的數(shù)據(jù),進(jìn)入c ;取出的數(shù)據(jù)每個(gè)目標(biāo)流依次使用,所有目標(biāo)流使用完成后進(jìn)入d ;對該數(shù)據(jù)進(jìn)行刪除,進(jìn)入a。策略2 :為每個(gè)目標(biāo)流也創(chuàng)建一個(gè)緩沖區(qū)隊(duì)列;檢測源流緩沖區(qū)中是否有數(shù)據(jù),如果有則進(jìn)入b如果沒有等待一段時(shí)間后再次進(jìn)入a進(jìn)行檢測;從源流緩沖區(qū)中取出最先進(jìn)入源流緩沖區(qū)中的數(shù)據(jù),進(jìn)入d;將取出數(shù)據(jù)進(jìn)行復(fù)制n份,分別加入目標(biāo)流緩沖區(qū)隊(duì)列,無需等待進(jìn)入e,以后目標(biāo)流使用數(shù)據(jù)直接從自己的緩沖隊(duì)列中進(jìn)行讀?。粚υ摂?shù)據(jù)進(jìn)行刪除,進(jìn)入a。對于策略I源數(shù)據(jù)只有一份,占用內(nèi)存少,實(shí)現(xiàn)簡單。弊端為當(dāng)其中一路目標(biāo)流出現(xiàn)網(wǎng)絡(luò)擁塞或處理速度過慢等異常,導(dǎo)致源緩沖區(qū)數(shù)據(jù)過多,將出現(xiàn)流數(shù)據(jù)丟失,一旦數(shù)據(jù)丟失所有目標(biāo)流的數(shù)據(jù)都將丟失。即一路目標(biāo)流出現(xiàn)異常將影響其他目標(biāo)流。對于策略2由于數(shù)據(jù)的復(fù)制速度一般比源數(shù)據(jù)產(chǎn)生速度高出多個(gè)數(shù)量級所以基本不會(huì)出現(xiàn)源緩沖區(qū)不夠?qū)е碌臄?shù)據(jù)丟失,但是數(shù)據(jù)的拷貝和重復(fù)存儲將使分發(fā)效率降低。因此,現(xiàn)有技術(shù)存在分發(fā)效率低,占用資源多,一路目標(biāo)流出現(xiàn)異常而影響其他目標(biāo)流的缺陷。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是提供一種流媒體分發(fā)方法和裝置。為了解決上述技術(shù)問題,本發(fā)明提供了一種流媒體分發(fā)方法,包括以下步驟
步驟S101,判斷源流是否已經(jīng)創(chuàng)建,
如果未創(chuàng)建,轉(zhuǎn)步驟S201 ;如果已創(chuàng)建,轉(zhuǎn)步驟S301,
步驟S201,創(chuàng)建源流,轉(zhuǎn)步驟301,步驟S301,創(chuàng)建目標(biāo)流,
步驟S401,將所述源流添加至該目標(biāo)流,
步驟S501,該目標(biāo)流進(jìn)行分發(fā),
步驟S601,該目標(biāo)流接收指示,停止分發(fā),
步驟S701,所述源流刪除該目標(biāo)流,
步驟S801,銷毀該目標(biāo)流,
步驟S901,判斷所述源流中所有目標(biāo)流是否已經(jīng)刪除,
如果已刪除,轉(zhuǎn)步驟SlOOl ;如果未刪除,流程結(jié)束,
步驟S1001,銷毀所述源流,流程結(jié)束。進(jìn)一步地,上述實(shí)現(xiàn)方法還可具有以下特點(diǎn)
步驟S2011,接收數(shù)據(jù)流,
步驟S2012,判斷該數(shù)據(jù)流是否能生成流片,
如果能生成流片,轉(zhuǎn)步驟S2013 ;如果不能生成流片,轉(zhuǎn)步驟S2011,
步驟S2013,清理流緩沖隊(duì)列,
步驟S2014,將所述流片加入該流緩沖隊(duì)列,
步驟S2015,通知目標(biāo)流有新流片產(chǎn)生,轉(zhuǎn)步驟S2011。進(jìn)一步地,上述實(shí)現(xiàn)方法還可具有以下特點(diǎn)
步驟S20131,判斷該緩沖隊(duì)列首流片可否立即刪除,
如果能夠立即刪除,轉(zhuǎn)步驟S20132 ;如果不能夠立即刪除,轉(zhuǎn)步驟S20134,
步驟S20132,刪除該緩沖隊(duì)列首流片,
步驟S20133,判斷當(dāng)前流片緩沖隊(duì)列是否為空,
如果不為空,轉(zhuǎn)步驟S20131 ;如果為空,流程結(jié)束,
步驟S20134,判斷該緩沖隊(duì)列流片數(shù)量是否超過閾值,
如果超過閾值,轉(zhuǎn)步驟S20135 ;如果未超過閾值,流程結(jié)束,
步驟S20135,判斷刪除流片數(shù)是否為零,當(dāng)前流片是否為關(guān)鍵幀,
如果刪除流片數(shù)不為零,且當(dāng)前流片為關(guān)鍵幀,流程結(jié)束;其他狀態(tài),轉(zhuǎn)步驟S20136, 步驟S20136,判斷當(dāng)前流片是否讀鎖定,
如果當(dāng)前流片讀鎖定,轉(zhuǎn)步驟S20137 ;如果當(dāng)前流片非讀鎖定,轉(zhuǎn)步驟S20139,
步驟S20137,將流片從該緩沖隊(duì)列移除添加進(jìn)延遲刪除流片隊(duì)列,轉(zhuǎn)步驟S20138, 步驟S20139,將流片立即刪除,轉(zhuǎn)步驟S20138,
步驟S20138,判斷當(dāng)前流片緩沖隊(duì)列是否為空,
如果不為空,轉(zhuǎn)步驟S20135 ;如果為空,流程結(jié)束。進(jìn)一步地,上述實(shí)現(xiàn)方法還可具有以下特點(diǎn)
步驟S4011,判斷流片緩沖區(qū)中是否有關(guān)鍵幀,
如果有關(guān)鍵幀,轉(zhuǎn)步驟S4013 ;如果沒有關(guān)鍵幀,轉(zhuǎn)步驟S4012, 步驟S4012,等待關(guān)鍵幀生成或請求關(guān)鍵幀,轉(zhuǎn)步驟S4011,
步驟S4013,將最后進(jìn)入緩沖區(qū)的關(guān)鍵幀流片及其后流片讀剩余記數(shù)加1,
步驟S4014,將本目標(biāo)流加入源流目標(biāo)流信息鏈表,
步驟S4015,將該目標(biāo)流的流片索引設(shè)置為該關(guān)鍵幀流片的索引。
進(jìn)一步地,上述實(shí)現(xiàn)方法還可具有以下特點(diǎn)
步驟S6011,查找目標(biāo)流的索引號,
步驟S6012,判斷目標(biāo)流索引號是否在流片隊(duì)列索引號有效范圍內(nèi),
如果在有效范圍內(nèi),轉(zhuǎn)步驟S6014 ;如果不在有效范圍內(nèi),轉(zhuǎn)步驟S6013,
步驟S6013,該流隊(duì)列中該索引號后的所有流片讀剩余記數(shù)減1,
步驟S6014,將本目標(biāo)流信息列表中信息刪除。進(jìn)一步地,上述實(shí)現(xiàn)方法還可具有以下特點(diǎn)
步驟S5011,判斷前一任務(wù)是否完畢,
如果完畢,轉(zhuǎn)步驟S5012 ;如果未完畢,流程結(jié)束,
步驟S5012,投遞一個(gè)處理流片任務(wù),
步驟S5013,處理流片任務(wù)向源流申請讀流片,
步驟S5014,判斷申請是否成功,
如果未成功,轉(zhuǎn)步驟S5015 ;如果成功,轉(zhuǎn)步驟S5016,
步驟S5015,設(shè)置本目標(biāo)流為前一個(gè)任務(wù)已經(jīng)完成,
步驟S5016,使用流片,
步驟S5017,流片解除讀鎖定。進(jìn)一步地,上述實(shí)現(xiàn)方法還可具有以下特點(diǎn)
步驟S50131,判斷目標(biāo)流是否已經(jīng)鎖定一個(gè)流片,
如果沒有鎖定,轉(zhuǎn)步驟S50132 ;如果已經(jīng)鎖定,返回申請失敗,流程結(jié)束,
步驟S50132,查找目標(biāo)流對應(yīng)流片索引,
步驟S50133,判斷流片索引是否等于當(dāng)前流隊(duì)列索引最大值加1,
如果不等于,轉(zhuǎn)步驟S50134 ;如果等于,返回申請失敗,流程結(jié)束,
步驟S50134,判斷流片索引是否為有效索引,
如果不為有效索引,轉(zhuǎn)步驟S50135 ;如果為有效索引,轉(zhuǎn)步驟S50136,
步驟S50135,將流片索引修改為當(dāng)前流隊(duì)列索引最小值,
步驟S50136,將流隊(duì)列中對應(yīng)流片索引的流片讀鎖定加I,設(shè)置本目標(biāo)鎖定一個(gè)流片, 步驟S50137,返回成功鎖定的流片。進(jìn)一步地,上述實(shí)現(xiàn)方法還可具有以下特點(diǎn)
步驟S50171,判斷目標(biāo)流是否已經(jīng)鎖定一個(gè)流片,
如果目標(biāo)流已鎖定,轉(zhuǎn)步驟S50172 ;如果未鎖定,流程結(jié)束,
步驟S50172,查找目標(biāo)流對應(yīng)流片索引,
步驟S50173,判斷對應(yīng)索引是否在流隊(duì)列中,
如果在流隊(duì)列中,轉(zhuǎn)步驟S50174 ;如果不在流隊(duì)列中,轉(zhuǎn)步驟S50175,
步驟S50174,流片讀鎖定記數(shù)減1,流片讀剩余記數(shù)減1,目標(biāo)流的流片索引加1,設(shè)置目標(biāo)流未鎖定流片,
步驟S50175,判斷是否在延遲刪除流隊(duì)列中,
如果在隊(duì)列中,轉(zhuǎn)步驟S50176;如果不在隊(duì)列中,返回錯(cuò)誤信息,流程結(jié)束,
步驟S50176,流片讀鎖定記數(shù)減1,
步驟S50177,判斷流片讀鎖定是否為0,如果為O,轉(zhuǎn)步驟S50178 ;如果不為O,轉(zhuǎn)步驟S50179,
步驟S50178,刪除流片,轉(zhuǎn)步驟S50179,
步驟S50179,目標(biāo)流的流片索引加1,設(shè)置目標(biāo)流未鎖定流片。進(jìn)一步地,上述實(shí)現(xiàn)方法還可具有以下特點(diǎn)
所述流片還包括片信息,所 述片信息包括流類型、關(guān)鍵幀標(biāo)識、讀取鎖定記數(shù)和讀取剩余記數(shù)。本發(fā)明提供了一種流媒體分發(fā)裝置,包括源流模塊和目標(biāo)流模塊,
所述源流模塊用于接收流數(shù)據(jù),對所述流數(shù)據(jù)進(jìn)行分片,清理流片緩沖隊(duì)列,將所述流片加入所述流片緩沖隊(duì)列,通知所述目標(biāo)流模塊有新流片生成,向所述目標(biāo)流模塊發(fā)送新任務(wù),
所述目標(biāo)流模塊用于判斷前一任務(wù)是否處理完畢,向所述源流模塊申請接收所述流片,使用所述流片。由上可知,本發(fā)明方法和裝置達(dá)到具有相同源流的目標(biāo)流間出現(xiàn)異常后互不影響,目標(biāo)流出現(xiàn)異??煽焖倩謴?fù),提高分發(fā)效率的技術(shù)效果。
圖I是本發(fā)明一較佳實(shí)施例的流媒體結(jié)構(gòu)示意圖,
圖2是本發(fā)明一較佳實(shí)施例的流媒體分發(fā)流程示意圖,
圖3是本發(fā)明一較佳實(shí)施例的源流流程示意圖,
圖4是本發(fā)明一較佳實(shí)施例的流緩沖隊(duì)列清理流程示意圖,
圖5是本發(fā)明一較佳實(shí)施例的源流添加一個(gè)目標(biāo)流流程示意圖,
圖6是本發(fā)明一較佳實(shí)施例的源流刪除一個(gè)目標(biāo)流流程示意圖,
圖7是本發(fā)明一較佳實(shí)施例的目標(biāo)流流程示意圖,
圖8是本發(fā)明一較佳實(shí)施例的源流讀鎖定目標(biāo)流流片流程示意圖,
圖9是本發(fā)明一較佳實(shí)施例的源流解鎖目標(biāo)流流片流程示意圖,
圖10是本發(fā)明一較佳實(shí)施例的流媒體分發(fā)裝置結(jié)構(gòu)示意圖。
具體實(shí)施例方式以下結(jié)合附圖及較佳實(shí)施例,對依據(jù)本發(fā)明提出的其具體方法,詳細(xì)說明如后。本發(fā)明的總體思路是,流媒體分發(fā)方法
對流數(shù)據(jù)進(jìn)行分片,較佳的視頻流采取每幀分一片,音頻流使用相應(yīng)時(shí)間長度的數(shù)據(jù)為一片;分片后的流數(shù)據(jù)有一個(gè)對應(yīng)的片信息,包括該片的流類型,是否關(guān)鍵幀,讀取鎖定記數(shù)(當(dāng)前被鎖定使用且未使用完的記數(shù),初始化為0),讀取剩余記數(shù)(當(dāng)前需要被使用但還未被使用的記數(shù),初始化為目標(biāo)流數(shù)量);分片后的流數(shù)據(jù)和對應(yīng)的片信息組成一個(gè)流片;
將生成流片的對象稱為源流,將使用流片的對象稱為目標(biāo)流;
將多個(gè)目標(biāo)流對象與源流對象進(jìn)行關(guān)聯(lián);
進(jìn)行關(guān)聯(lián)后源流和目標(biāo)流將比較獨(dú)立的進(jìn)行工作;
源流只負(fù)責(zé)流片緩沖區(qū)的清理,目標(biāo)流的添加與刪除,流片的生成,有新流片生成時(shí)通知需要接收通知的目標(biāo)流。目標(biāo)流只負(fù)責(zé)接收到有新流片生成的通知時(shí),依次鎖定使用流緩沖區(qū)中所有本目標(biāo)流未使用過的流片,直到緩沖中無本目標(biāo)流未使用過的流片后,將本目標(biāo)流設(shè)置為需要接收新流片生成通知。源流清理流片緩沖隊(duì)列采用的方法為,首先將所有讀取鎖定記數(shù)和讀取剩余記數(shù)均為0的流片立即刪除,如果刪除后還是未能將流片數(shù)量降到閾值以下則可以判定存在一個(gè)目標(biāo)流處理流片異常,此時(shí)需要將最先進(jìn)入緩沖區(qū)的流片進(jìn)行判定,如果是讀取鎖定記數(shù)為0的進(jìn)行立即刪除,如果讀取鎖定記數(shù)不為0的進(jìn)行延遲刪除,直到遇到關(guān)鍵幀。延遲刪除的流片在讀取使用完成后進(jìn)行立即刪除。該清理流片緩沖隊(duì)列方法可以保證緩沖區(qū)不會(huì)出現(xiàn)數(shù)據(jù)超出預(yù)先設(shè)定的閾值,而且可以讓出現(xiàn)異常的目標(biāo)流,下次獲取流片時(shí)直接獲取到關(guān)鍵幀,可以在丟失部分?jǐn)?shù)據(jù)的情況下快速恢復(fù)。源流對目添加標(biāo)流與刪除目標(biāo)流采用的方法為,添加一個(gè)目標(biāo)流時(shí)在流片緩沖區(qū) 中查找最后進(jìn)入緩沖區(qū)為關(guān)鍵幀的流片,如果存在則將該關(guān)鍵幀及其后進(jìn)入緩沖區(qū)的流片讀取剩余記數(shù)加1,并通知?jiǎng)偧尤氲哪繕?biāo)流有新流片生成。如果緩沖隊(duì)列中無關(guān)鍵幀流片則需等到源流中有關(guān)鍵幀生成后才增加以后的所有流片的讀取剩余記數(shù),并通知關(guān)聯(lián)的目標(biāo)流。刪除一個(gè)目標(biāo)流時(shí)需要查看源流緩沖區(qū)中是否存在本目標(biāo)流,未使用的流片,如果存在則需將這些流片的讀取剩余記數(shù)減I然后將本目標(biāo)流從源流中刪除。源流流片的生成采用的方法為,有流數(shù)據(jù)生成將流進(jìn)行分片,較佳的視頻流采取每幀分一片,音頻流使用相應(yīng)時(shí)間長度的數(shù)據(jù)為一片;分片后的流數(shù)據(jù)有一個(gè)對應(yīng)的片信息,包括該片的流類型,是否關(guān)鍵幀,讀取鎖定記數(shù)(當(dāng)前被鎖定使用且未使用完的記數(shù),初始化為0),讀取剩余記數(shù)(當(dāng)前需要被使用但還未被使用的記數(shù),初始化為目標(biāo)流數(shù)量);分片后的流數(shù)據(jù)和對應(yīng)的片信息組成一個(gè)流片,將流片寫入源流的流片緩沖隊(duì)列。源流有新流片生成時(shí)通知需要接收通知的目標(biāo)流的方法為,當(dāng)有新的流片生成,加入流片緩沖區(qū)后,即判斷出需要通知的目標(biāo)流,并進(jìn)行通知。源流接到一個(gè)目標(biāo)流鎖定讀取一個(gè)流片的請求后,首先查找該目標(biāo)流對應(yīng)的流片索引值,得到流片索引值后如果索引值為當(dāng)前流片緩沖隊(duì)列的索引最大值加I則返回鎖定失敗,如果不是則判斷索引值是否為流隊(duì)列的有效值范圍,不在有效值范圍內(nèi)需要將該索引設(shè)置為隊(duì)列首的索引,然后將索引對應(yīng)的流片的讀鎖定記數(shù)加I后返回該流片給目標(biāo)流使用。源流接到一個(gè)目標(biāo)流解鎖定一個(gè)流片的請求后,首先查找該目標(biāo)流對應(yīng)的流片索引值,對應(yīng)流片索引在流隊(duì)列中則流片的讀鎖定記數(shù)和讀剩余記數(shù)均減I然后本流片索引值加1,完成解讀鎖定;如果索引值對應(yīng)流片不在流隊(duì)列中,則在延遲刪除流片隊(duì)列中查找,查找不到則發(fā)生錯(cuò)誤,查找到后將該流片的讀鎖定記數(shù)減I,如果流片的讀鎖定為0則將該流片刪除,將本目標(biāo)流的流片索引值加I完成流片解鎖定。目標(biāo)流接收到源流有流片生成的通知后,對源流緩沖區(qū)中本目標(biāo)流未讀取過的最先生成的一個(gè)流片進(jìn)行鎖定使用,使用完成后對流片的讀剩余記數(shù)進(jìn)行減I操作,然后對下一個(gè)流片進(jìn)行鎖定使用,直到緩沖區(qū)中沒有需要本目標(biāo)流需要讀取的流片為止,然后將本目標(biāo)流設(shè)置為當(dāng)源流有新流片產(chǎn)生時(shí)需要進(jìn)行通知。流媒體分發(fā)裝置源流對象,對本源的流緩沖區(qū)管理,目標(biāo)流的關(guān)聯(lián)與取消關(guān)聯(lián),流片的生成,有新流片生成時(shí)通知需要接收通知的目標(biāo)流,對外提供四個(gè)接口 AddTarget (Target*ptarget) DelTarget (Target* ptarget) , LockReadOneSlice (Target* ptarget),UnlockReadOneSlice (Target* ptarget)分別對應(yīng)分發(fā)方法中的添加目標(biāo)流,刪除目標(biāo)流,鎖定讀流片,解鎖流片。目標(biāo)流對象,接收到有新流片生成的通知時(shí),依次鎖定使用流緩沖區(qū)中所有本目標(biāo)流未使用過的流片,直到緩沖中無本目標(biāo)流未使用過的流片后,將本目標(biāo)流設(shè)置為需要接收新流片生成通知。對外部只提供一個(gè)通知其有新流片生成的接口 NewSliceReady()。對應(yīng)目標(biāo)流的接受新流片通知。 任務(wù)池,為源流的流片生成,目標(biāo)流的流片使用,提供任務(wù)線程。對外提供接口為PushTask(ITask氺 ptask)
較佳的所述源流對象包括
流片緩沖隊(duì)列,對生成的流片進(jìn)行緩沖保存;當(dāng)有新流片進(jìn)入緩沖隊(duì)列時(shí)源流將調(diào)用所有與本源流關(guān)聯(lián)的目標(biāo)流的NewSliceReady()接口 .
目標(biāo)流信息鏈表,保存所有目標(biāo)流的信息,包括每個(gè)目標(biāo)流下一個(gè)該讀取的流片的索引號,新流片生成后是否進(jìn)行通知,以及通知的接口地址。較佳的,目標(biāo)流接收到有新流片生成的通知時(shí),馬上向任務(wù)池申請一個(gè)任務(wù),該任務(wù)通過調(diào)用源流的LockReadOneSlice (Target* ptarget)接口鎖定讀一個(gè)流片,當(dāng)讀鎖定成功則對該流片進(jìn)行使用,使用完成后調(diào)用源流的UnlockReadOneSlice (Target*ptarget)解除鎖定,然后馬上再次向任務(wù)池申請一個(gè)相同的任務(wù)。直到任務(wù)向源流鎖定讀取一個(gè)流片失敗,則設(shè)置本目標(biāo)流再次需要接收新流片產(chǎn)生的通知,等待下一個(gè)新流片產(chǎn)生通知的到達(dá)。源流有新流片生成時(shí)通過Target的NewSliceReadyO接口通知目標(biāo)流有新流片生成。本發(fā)明一較佳實(shí)施例的流媒體結(jié)構(gòu)示意圖參見圖I,一個(gè)源流包括一個(gè)目標(biāo)流信息鏈表,該鏈表包括所有添加到該源流的目標(biāo)流信息(是否已經(jīng)鎖定讀取一個(gè)流片,下次讀取或已經(jīng)讀取流片的索引號,目標(biāo)流的流片生成通知接口);一個(gè)流片緩沖隊(duì)列,緩沖隊(duì)列中緩沖的為最新的流片數(shù)據(jù)(包括流片是否為關(guān)鍵幀,流片的類型,流片的索引號,流片讀鎖定記數(shù),流片讀剩余記數(shù),流數(shù)據(jù));和一個(gè)延遲刪除流片鏈表,當(dāng)目標(biāo)流中有異常情況發(fā)生時(shí),流緩沖隊(duì)列的未讀完流片會(huì)超出緩沖閾值,此時(shí)將對最陳舊的流片進(jìn)行刪除,當(dāng)發(fā)現(xiàn)需要?jiǎng)h除的陳舊流片,有目標(biāo)流在讀取未解鎖時(shí)需要進(jìn)行延遲刪除,所有需要延遲刪除的流片都將進(jìn)入該鏈表,進(jìn)入該鏈表的流片以后將無法被其他目標(biāo)流鎖定讀取,只可解除鎖定,解鎖完成后再進(jìn)行刪除。本發(fā)明一較佳實(shí)施例的流媒體分發(fā)流程示意圖參見圖2,步驟S101,判斷源流是否已經(jīng)創(chuàng)建,如果未創(chuàng)建,轉(zhuǎn)步驟S201 ;如果已創(chuàng)建,轉(zhuǎn)步驟S301,步驟S201,創(chuàng)建源流,轉(zhuǎn)步驟301,步驟S301,創(chuàng)建目標(biāo)流,步驟S401,將所述源流添加至該目標(biāo)流,步驟S501,該目標(biāo)流進(jìn)行分發(fā),步驟S601,該目標(biāo)流接收指示,停止分發(fā),步驟S701,所述源流刪除該目標(biāo)流,步驟S801,銷毀該目標(biāo)流,步驟S901,判斷所述源流中所有目標(biāo)流是否已經(jīng)刪除,如果已刪除,轉(zhuǎn)步驟SlOOl ;如果未刪除,流程結(jié)束,步驟S1001,銷毀所述源流,流程結(jié)束。
本發(fā)明一較佳實(shí)施例的源流流程示意圖參見圖3,步驟S2011,接收數(shù)據(jù)流,步驟S2012,判斷該數(shù)據(jù)流是否能生成流片,如果能生成流片,轉(zhuǎn)步驟S2013;如果不能生成流片,轉(zhuǎn)步驟S2011,步驟S2013,清理流緩沖隊(duì)列,步驟S2014,將所述流片加入該流緩沖隊(duì)列,步驟S2015,通知目標(biāo)流有新流片產(chǎn)生,轉(zhuǎn)步驟S2011。源流啟動(dòng)后開始接收數(shù)據(jù),當(dāng)接收到一幀數(shù)據(jù)后即可生成一個(gè)流片,產(chǎn)生流片后先對流片隊(duì)列進(jìn)行一次清理,一旦清理后隊(duì)列肯定可以再次放入一個(gè)流片,然后將流片放入緩沖隊(duì)列即可,加入成功后通知所有目標(biāo)流有新流片生成,然后繼續(xù)接收數(shù)據(jù)重復(fù)上述過程。本發(fā)明一較佳實(shí)施例的流緩沖隊(duì)列清理流程示意圖參見圖4,步驟S20131,判斷該緩沖隊(duì)列首流片可否立即刪除,如果能夠立即刪除,轉(zhuǎn)步驟S20132 ;如果不能夠立即刪除,轉(zhuǎn)步驟S20134,步驟S20132,刪除該緩沖隊(duì)列首流片,步驟S20133,判斷當(dāng)前流片緩沖隊(duì)列是否為空,如果不為空,轉(zhuǎn)步驟S20131 ;如果為空,流程結(jié)束,步驟S20134,判斷該緩沖隊(duì)列流片數(shù)量是否超過閾值,如果超過閾值,轉(zhuǎn)步驟S20135;如果未超過閾值,流程結(jié)束,步驟S20135,判斷刪除流片數(shù)是否為零,當(dāng)前流片是否為關(guān)鍵幀,如果刪除流片數(shù)不為零,且當(dāng)前流片為關(guān)鍵幀,流程結(jié)束;其他狀態(tài),轉(zhuǎn)步驟S20136,判斷當(dāng)前流片是否讀鎖定,如果當(dāng)前流片讀鎖定,轉(zhuǎn)步驟S20137 ;如果當(dāng)前流片非讀鎖定,轉(zhuǎn)步驟S20139,步驟S20137,將流片從該緩沖隊(duì)列移除添加進(jìn)延遲刪除流片隊(duì)列,轉(zhuǎn)步驟S20138,步驟S20139,將流片立即刪除,轉(zhuǎn)步驟S20138,步驟S20138,判斷當(dāng)前流片緩沖隊(duì)列是否為空,如果不為空,轉(zhuǎn)步驟S20135 ;如果為空,流程結(jié)束。上述“其他狀態(tài)”,包括如下幾種情況如果刪除流片數(shù)為零,無論當(dāng)前流片是否為關(guān)鍵幀,轉(zhuǎn)步驟S20136;如果刪除流片數(shù)不為零,且當(dāng)前流片不為關(guān)鍵幀,轉(zhuǎn)步驟S20136。開始清理流片緩沖區(qū)時(shí)首先判斷流片緩沖區(qū)隊(duì)列中的最陳舊流片是否有已經(jīng)被所有目標(biāo)流讀取讀取完畢且未被讀鎖定,肯定則進(jìn)行立即刪除然后再次進(jìn)行上述相同操作,直到緩沖隊(duì)列為空或上述判斷為否定,否定則檢測緩沖隊(duì)列緩沖的流片數(shù)量是否超過設(shè)定閾值,沒有超過清理完畢,如果超過則可確定有一個(gè)目標(biāo)流出現(xiàn)異?;蜃x取流片的速度低于源產(chǎn)生的速度,這時(shí)需要強(qiáng)制刪除流片,強(qiáng)制刪除流片需要對最陳舊流片進(jìn)行一直刪除直到遇到關(guān)鍵幀流片且最少強(qiáng)制刪除一個(gè)流片,則可認(rèn)為清理完畢。需要注意的是當(dāng)強(qiáng)制刪除遇到被讀鎖定的流片時(shí)需要將其放入延遲刪除流片鏈表中,因?yàn)楸蛔x鎖定的流片說明還有目標(biāo)流在使用,當(dāng)使用完成后才能進(jìn)行刪除,經(jīng)過清理的流片緩沖隊(duì)列,將最少有一個(gè)位置用來放置新生成的流片。本發(fā)明一較佳實(shí)施例的源流添加一個(gè)目標(biāo)流流程示意圖參見圖5,步驟S4011,判斷流片緩沖區(qū)中是否有關(guān)鍵幀,如果有關(guān)鍵幀,轉(zhuǎn)步驟S4013 ;如果沒有關(guān)鍵幀,轉(zhuǎn)步驟S4012,步驟S4012,等待關(guān)鍵幀生成或請求關(guān)鍵幀,轉(zhuǎn)步驟S4011,步驟S4013,將最后進(jìn)入緩沖區(qū)的關(guān)鍵幀流片及其后流片讀剩余記數(shù)加1,步驟S4014,將本目標(biāo)流加入源流目標(biāo)流信息鏈表,步驟S4015,將該目標(biāo)流的流片索引設(shè)置為該關(guān)鍵幀流片的索引。該流程為需要增加分發(fā)目標(biāo)時(shí)的流程圖,當(dāng)添加一個(gè)目標(biāo)流的時(shí)候?yàn)榱吮WC目標(biāo)流得到流后可以立即解碼,所以需要將關(guān)鍵幀流片作為第一個(gè)流片給目標(biāo)流,因此首先檢測流緩沖隊(duì)列中是否有關(guān)鍵幀,如果不存在則需要將該目標(biāo)流先等待到有關(guān)鍵幀生成的時(shí) 候再加入目標(biāo)流信息鏈表,等到關(guān)鍵幀產(chǎn)生或在流片隊(duì)列中存在關(guān)鍵幀時(shí)將該流片和在這個(gè)流片之后加入隊(duì)列的流片的讀剩余記數(shù)分別加1,這是因?yàn)樘砑恿艘粋€(gè)目標(biāo)流后所有的流片的讀者都將加I,然后將目標(biāo)流的信息加入目標(biāo)流信息列表,將查找到的關(guān)鍵幀流片的索引設(shè)置為該目標(biāo)流的索引。完成目標(biāo)流的添加,目標(biāo)流添加完成后,一旦有新流片生成新添加的目標(biāo)流會(huì)得到通知,且可以正確的鎖定讀取流片和釋放流片。本發(fā)明一較佳實(shí)施例的源流刪除一個(gè)目標(biāo)流流程示意圖參見圖6,步驟S6011,查找目標(biāo)流的索引號,步驟S6012,判斷目標(biāo)流索引號是否在流片隊(duì)列索引號有效范圍內(nèi),如果在有效范圍內(nèi),轉(zhuǎn)步驟S6014 ;如果不在有效范圍內(nèi),轉(zhuǎn)步驟S6013,步驟S6013,該流隊(duì)列中該索引號后的所有流片讀剩余記數(shù)減1,步驟S6014,將本目標(biāo)流信息列表中信息刪除。
當(dāng)一個(gè)目標(biāo)流不再需要源流數(shù)據(jù),從源流將這個(gè)目標(biāo)流刪除,刪除的時(shí)候需要注意就是,因?yàn)樵戳鞯牧髌蓵r(shí)是認(rèn)為目標(biāo)流信息中所有的目標(biāo)流都要對這個(gè)流片進(jìn)行讀取的,本目標(biāo)流沒有讀取過的目標(biāo)流的流片需要對其讀剩余記數(shù)減I后,將本目標(biāo)流的信息從目標(biāo)流信息鏈表中刪除即完成刪除目標(biāo)流。本發(fā)明一較佳實(shí)施例的目標(biāo)流流程示意圖參見圖7,步驟S5011,判斷前一任務(wù)是否完畢,如果完畢,轉(zhuǎn)步驟S5012 ;如果未完畢,流程結(jié)束,步驟S5012,投遞一個(gè)處理流片任務(wù),步驟S5013,處理流片任務(wù)向源流申請讀流片,步驟S5014,判斷申請是否成功,如果未成功,轉(zhuǎn)步驟S5015 ;如果成功,轉(zhuǎn)步驟S5016,步驟S5015,設(shè)置本目標(biāo)流為前一個(gè)任務(wù)已經(jīng)完成,步驟S5016,使用流片,步驟S5017,流片解除讀鎖定。目標(biāo)流接到通知后先判斷前一個(gè)任務(wù)是否完成,沒有完成直接退出,如果已經(jīng)完成則投遞一個(gè)處理流片任務(wù),處理流片任務(wù)從流片讀鎖定一個(gè)流片,然后使用使用完成后解鎖定,然后再次投遞任務(wù),直到鎖定流片失敗認(rèn)為已經(jīng)沒有流片需要讀取,將本目標(biāo)流設(shè)置為前一個(gè)任務(wù)完成需要接收下一個(gè)新流片生成通知,然后退出等待下一個(gè)通知的到來。本發(fā)明一較佳實(shí)施例的源流讀鎖定目標(biāo)流流片流程示意圖參見圖8,步驟S50131,判斷目標(biāo)流是否已經(jīng)鎖定一個(gè)流片,如果沒有鎖定,轉(zhuǎn)步驟S50132 ;如果已經(jīng)鎖定,返回申請失敗,流程結(jié)束,步驟S50132,查找目標(biāo)流對應(yīng)流片索引,步驟S50133,判斷流片索引是否等于當(dāng)前流隊(duì)列索引最大值加1,如果不等于,轉(zhuǎn)步驟S50134;如果等于,返回申請失敗,流程結(jié)束,步驟S50134,判斷流片索引是否為有效索引,如果不為有效索引,轉(zhuǎn)步驟S50135 ;如果為有效索引,轉(zhuǎn)步驟S50136,步驟S50135,將流片索引修改為當(dāng)前流隊(duì)列索引最小值,步驟S50136,將流隊(duì)列中對應(yīng)流片索引的流片讀鎖定加1,設(shè)置本目標(biāo)鎖定一個(gè)流片,步驟S50137,返回成功鎖定的流片。每個(gè)目標(biāo)流使用源流的流片時(shí),均需先讀鎖定一個(gè)流片,該流程保證每次讀鎖定獲取到得流片均為連續(xù)的流片,或一個(gè)關(guān)鍵幀流片。當(dāng)鎖定時(shí),首先判斷本目標(biāo)流是否已經(jīng)鎖定過一個(gè)流片,已經(jīng)鎖定則直接返回鎖定失??;未鎖定則將目標(biāo)流對應(yīng)的流片索引獲取至IJ,然后判斷該目標(biāo)流的流片索引是否為流片緩沖隊(duì)列中索引的最大值加1,是則說明已經(jīng)將流隊(duì)列中所有流片都已經(jīng)讀取過,返回申請失敗,目標(biāo)流等待下一個(gè)流片生成通知后再來讀取流片;否則判斷流片索引是否在流隊(duì)列流片的有效索引范圍內(nèi),如果流片索引不在有效范圍且目標(biāo)流沒有將隊(duì)列中的所有流片都讀取過則可判明發(fā)生了流片丟失,此時(shí)需要將流片的索引設(shè)置到隊(duì)列的頭,由流片緩沖隊(duì)列清理方法保證了發(fā)生流片丟失時(shí)隊(duì)列頭肯定是關(guān)鍵幀流片,這時(shí)可保證發(fā)生異常的目標(biāo)流可快速恢復(fù)。索引值對應(yīng)的流片可在流片緩沖區(qū)中找到時(shí)需要將該對應(yīng)的流片的鎖定讀取記數(shù)加I并設(shè)置本目標(biāo)流已經(jīng)鎖定一個(gè)流片,然后將該流片返回給目標(biāo)流,完成流片的讀取鎖定。本發(fā)明一較佳實(shí)施例的源流解鎖目標(biāo)流流片流程示意圖參見圖9,步驟S50171,判斷目標(biāo)流是否已經(jīng)鎖定一個(gè)流片,如果目標(biāo)流已鎖定,轉(zhuǎn)步驟S50172;如果未鎖定,流程結(jié)束,步驟S50172,查找目標(biāo)流對應(yīng)流片索引,步驟S50173,判斷對應(yīng)索引是否在流隊(duì)列中,如果在流隊(duì)列中,轉(zhuǎn)步驟S50174 ;如果不在流隊(duì)列中,轉(zhuǎn)步驟S50175,步驟S50174,流片讀鎖定記數(shù)減1,流片讀剩余記數(shù)減1,目標(biāo)流的流片索引加1,設(shè)置目標(biāo)流未鎖定流片,步驟S50175,判斷是否在延遲刪除流隊(duì)列中,如果在隊(duì)列中,轉(zhuǎn)步驟S50176 ;如果不在隊(duì)列中,返回錯(cuò)誤信息,流程結(jié)束,步驟S50176,流片讀鎖定記數(shù)減I,步驟S50177,判斷流片讀鎖定是否為0,如果為0,轉(zhuǎn)步驟S50178 ;如果不為0,轉(zhuǎn)步驟S50179,步驟S50178,刪除流片,轉(zhuǎn)步驟S50179,步驟S50179,目標(biāo)流的流片索引加I,設(shè)置目標(biāo)流未鎖定流片。當(dāng)一個(gè)目標(biāo)流使用完自己鎖定的流片后,需要對該流片進(jìn)行讀解鎖,表面自己已經(jīng)讀取過該流片一次,下次鎖定讀取時(shí)需要讀取下一個(gè)流片,解鎖開始需要判斷是否已經(jīng)鎖定過一個(gè)流片如果沒有則返回錯(cuò)誤,如果已經(jīng)鎖定一個(gè)流片則獲取該目標(biāo)流的索引,獲取到得索引在流隊(duì)列中可以找到相應(yīng)的流片,則將該流片的讀鎖定記數(shù)、讀剩余記數(shù)減I、目標(biāo)流的流片索引加1,設(shè)置本目標(biāo)流未鎖定流片,即完成解鎖;如果目標(biāo)流長時(shí)間為對流片解鎖可能需要解鎖的流片已經(jīng)被強(qiáng)制移出緩沖隊(duì)列,此時(shí)需要在延遲刪除鏈表中對該流片進(jìn)行解鎖,如果所有的鎖定都解鎖則還需從延遲刪除鏈表中將流片徹底刪除。然后再將本目標(biāo)流的流片索引加I設(shè)置本目標(biāo)流未鎖定流片,完成流片的解鎖。流片還包括片信息,片信息包括流類型、關(guān)鍵幀標(biāo)識、讀取鎖定記數(shù)和讀取剩余記數(shù)。本發(fā)明一較佳實(shí)施例的流媒體分發(fā)裝置結(jié)構(gòu)示意圖參見圖10,包括源流模塊和目標(biāo)流模塊,源流模塊用于接收流數(shù)據(jù),對所述流數(shù)據(jù)進(jìn)行分片,清理流片緩沖隊(duì)列,將所述流片加入所述流片緩沖隊(duì)列,通知所述目標(biāo)流模塊有新流片生成,向所述目標(biāo)流模塊發(fā)送 新任務(wù),目標(biāo)流模塊用于判斷前一任務(wù)是否處理完畢,向所述源流模塊申請接收所述流片,使用所述流片。以上具體實(shí)施方式
僅用于說明本發(fā)明,而非用于限定本發(fā)明。
權(quán)利要求
1.一種流媒體分發(fā)方法,其特征在于,包括以下步驟,步驟S101,判斷源流是否已經(jīng)創(chuàng)建,如果未創(chuàng)建,轉(zhuǎn)步驟S201 ;如果已創(chuàng)建,轉(zhuǎn)步驟S301,步驟S201,創(chuàng)建源流,轉(zhuǎn)步驟301,步驟S301,創(chuàng)建目標(biāo)流,步驟S401,將所述源流添加至該目標(biāo)流,步驟S501,該目標(biāo)流進(jìn)行分發(fā),步驟S601,該目標(biāo)流接收指示,停止分發(fā),步驟S701,所述源流刪除該目標(biāo)流,步驟S801,銷毀該目標(biāo)流,步驟S901,判斷所述源流中所有目標(biāo)流是否已經(jīng)刪除,如果已刪除,轉(zhuǎn)步驟S1001 ;如果未刪除,流程結(jié)束,步驟S1001,銷毀所述源流,流程結(jié)束。
2.根據(jù)權(quán)利要求I所述的流媒體分發(fā)方法,其特征在于,所述步驟S201具體為步驟S2011,接收數(shù)據(jù)流,步驟S2012,判斷該數(shù)據(jù)流是否能生成流片,如果能生成流片,轉(zhuǎn)步驟S2013 ;如果不能生成流片,轉(zhuǎn)步驟S2011,步驟S2013,清理流緩沖隊(duì)列,步驟S2014,將所述流片加入該流緩沖隊(duì)列,步驟S2015,通知目標(biāo)流有新流片產(chǎn)生,轉(zhuǎn)步驟S2011。
3.根據(jù)權(quán)利要求2所述的流媒體分發(fā)方法,其特征在于,所述步驟S2013具體為步驟S20131,判斷該緩沖隊(duì)列首流片可否立即刪除,如果能夠立即刪除,轉(zhuǎn)步驟S20132 ;如果不能夠立即刪除,轉(zhuǎn)步驟S20134,步驟S20132,刪除該緩沖隊(duì)列首流片,步驟S20133,判斷當(dāng)前流片緩沖隊(duì)列是否為空,如果不為空,轉(zhuǎn)步驟S20131 ;如果為空,流程結(jié)束,步驟S20134,判斷該緩沖隊(duì)列流片數(shù)量是否超過閾值,如果超過閾值,轉(zhuǎn)步驟S20135 ;如果未超過閾值,流程結(jié)束,步驟S20135,判斷刪除流片數(shù)是否為零,當(dāng)前流片是否為關(guān)鍵幀,如果刪除流片數(shù)不為零,且當(dāng)前流片為關(guān)鍵幀,流程結(jié)束;其他狀態(tài),轉(zhuǎn)步驟S20136,步驟S20136,判斷當(dāng)前流片是否讀鎖定,如果當(dāng)前流片讀鎖定,轉(zhuǎn)步驟S20137 ;如果當(dāng)前流片非讀鎖定,轉(zhuǎn)步驟S20139,步驟S20137,將流片從該緩沖隊(duì)列移除添加進(jìn)延遲刪除流片隊(duì)列,轉(zhuǎn)步驟S20138,步驟S20139,將流片立即刪除,轉(zhuǎn)步驟S20138,步驟S20138,判斷當(dāng)前流片緩沖隊(duì)列是否為空,如果不為空,轉(zhuǎn)步驟S20135 ;如果為空,流程結(jié)束。
4.根據(jù)權(quán)利要求I所述的流媒體分發(fā)方法,其特征在于,步驟S401具體為步驟S4011,判斷流片緩沖區(qū)中是否有關(guān)鍵幀,如果有關(guān)鍵幀,轉(zhuǎn)步驟S4013 ;如果沒有關(guān)鍵幀,轉(zhuǎn)步驟S4012,步驟S4012,等待關(guān)鍵幀生成或請求關(guān)鍵幀,轉(zhuǎn)步驟S4011, 步驟S4013,將最后進(jìn)入緩沖區(qū)的關(guān)鍵幀流片及其后流片讀剩余記數(shù)加1, 步驟S4014,將本目標(biāo)流加入源流目標(biāo)流信息鏈表, 步驟S4015,將該目標(biāo)流的流片索引設(shè)置為該關(guān)鍵幀流片的索引。
5.根據(jù)權(quán)利要求4所述的流媒體分發(fā)方法,其特征在于,步驟S601具體為 步驟S6011,查找目標(biāo)流的索引號, 步驟S6012,判斷目標(biāo)流索引號是否在流片隊(duì)列索引號有效范圍內(nèi), 如果在有效范圍內(nèi),轉(zhuǎn)步驟S6014 ;如果不在有效范圍內(nèi),轉(zhuǎn)步驟S6013, 步驟S6013,該流隊(duì)列中該索引號后的所有流片讀剩余記數(shù)減1, 步驟S6014,將本目標(biāo)流信息列表中信息刪除。
6.根據(jù)權(quán)利要求I所述的流媒體分發(fā)方法,其特征在于,步驟S501具體為 步驟S5011,判斷前一任務(wù)是否完畢, 如果完畢,轉(zhuǎn)步驟S5012 ;如果未完畢,流程結(jié)束, 步驟S5012,投遞一個(gè)處理流片任務(wù), 步驟S5013,處理流片任務(wù)向源流申請讀流片, 步驟S5014,判斷申請是否成功, 如果未成功,轉(zhuǎn)步驟S5015 ;如果成功,轉(zhuǎn)步驟S5016, 步驟S5015,設(shè)置本目標(biāo)流為前一個(gè)任務(wù)已經(jīng)完成, 步驟S5016,使用流片, 步驟S5017,流片解除讀鎖定。
7.根據(jù)權(quán)利要求6所述的流媒體分發(fā)方法,其特征在于,所述步驟S5013具體為 步驟S50131,判斷目標(biāo)流是否已經(jīng)鎖定一個(gè)流片, 如果沒有鎖定,轉(zhuǎn)步驟S50132 ;如果已經(jīng)鎖定,返回申請失敗,流程結(jié)束, 步驟S50132,查找目標(biāo)流對應(yīng)流片索引, 步驟S50133,判斷流片索引是否等于當(dāng)前流隊(duì)列索引最大值加1, 如果不等于,轉(zhuǎn)步驟S50134 ;如果等于,返回申請失敗,流程結(jié)束, 步驟S50134,判斷流片索引是否為有效索引, 如果不為有效索引,轉(zhuǎn)步驟S50135 ;如果為有效索引,轉(zhuǎn)步驟S50136, 步驟S50135,將流片索引修改為當(dāng)前流隊(duì)列索引最小值, 步驟S50136,將流隊(duì)列中對應(yīng)流片索引的流片讀鎖定加I,設(shè)置本目標(biāo)鎖定一個(gè)流片, 步驟S50137,返回成功鎖定的流片。
8.根據(jù)權(quán)利要求7所述的流媒體分發(fā)方法,其特征在于,所述步驟S5017具體為 步驟S50171,判斷目標(biāo)流是否已經(jīng)鎖定一個(gè)流片, 如果目標(biāo)流已鎖定,轉(zhuǎn)步驟S50172 ;如果未鎖定,流程結(jié)束, 步驟S50172,查找目標(biāo)流對應(yīng)流片索引, 步驟S50173,判斷對應(yīng)索引是否在流隊(duì)列中, 如果在流隊(duì)列中,轉(zhuǎn)步驟S50174 ;如果不在流隊(duì)列中,轉(zhuǎn)步驟S50175, 步驟S50174,流片讀鎖定記數(shù)減1,流片讀剩余記數(shù)減1,目標(biāo)流的流片索引加1,設(shè)置目標(biāo)流未鎖定流片,步驟S50175,判斷是否在延遲刪除流隊(duì)列中, 如果在隊(duì)列中,轉(zhuǎn)步驟S50176;如果不在隊(duì)列中,返回錯(cuò)誤信息,流程結(jié)束, 步驟S50176,流片讀鎖定記數(shù)減1, 步驟S50177,判斷流片讀鎖定是否為O, 如果為O,轉(zhuǎn)步驟S50178 ;如果不為O,轉(zhuǎn)步驟S50179, 步驟S50178,刪除流片,轉(zhuǎn)步驟S50179, 步驟S50179,目標(biāo)流的流片索引加1,設(shè)置目標(biāo)流未鎖定流片。
9.根據(jù)權(quán)利要求I至8中任何一項(xiàng)所述的流媒體分發(fā)方法,其特征在于,所述流片還包括片信息,所述片信息包括流類型、關(guān)鍵幀標(biāo)識、讀取鎖定記數(shù)和讀取剩余記數(shù)。
10.一種流媒體分發(fā)裝置,其特征在于,包括源流模塊和目標(biāo)流模塊, 所述源流模塊用于接收流數(shù)據(jù),對所述流數(shù)據(jù)進(jìn)行分片,清理流片緩沖隊(duì)列,將所述流片加入所述流片緩沖隊(duì)列,通知所述目標(biāo)流模塊有新流片生成,向所述目標(biāo)流模塊發(fā)送新任務(wù), 所述目標(biāo)流模塊用于判斷前一任務(wù)是否處理完畢,向所述源流模塊申請接收所述流片,使用所述流片。
全文摘要
本發(fā)明公開了一種流媒體分發(fā)方法和裝置,針對現(xiàn)有技術(shù)中的分發(fā)效率低,一路目標(biāo)流出現(xiàn)異常而影響其他目標(biāo)流的缺陷而發(fā)明,包括以下步驟步驟S101,判斷源流是否已經(jīng)創(chuàng)建,如果未創(chuàng)建,轉(zhuǎn)步驟S201;如果已創(chuàng)建,轉(zhuǎn)步驟S301;步驟S201,創(chuàng)建源流,轉(zhuǎn)步驟301,步驟S301,創(chuàng)建目標(biāo)流,步驟S401,將源流添加至該目標(biāo)流,步驟S501,該目標(biāo)流進(jìn)行分發(fā),步驟S601,該目標(biāo)流接收指示,停止分發(fā),步驟S701,源流刪除該目標(biāo)流,步驟S801,銷毀該目標(biāo)流,步驟S901,判斷源流中所有目標(biāo)流是否已經(jīng)刪除,如果已刪除,轉(zhuǎn)步驟S1001;如果未刪除,流程結(jié)束,步驟S1001,銷毀所述源流,流程結(jié)束。
文檔編號H04L12/56GK102664806SQ201210125858
公開日2012年9月12日 申請日期2012年4月26日 優(yōu)先權(quán)日2012年4月26日
發(fā)明者張洪燕 申請人:重慶網(wǎng)力視界科技有限公司