專利名稱:發(fā)送流媒體數(shù)據(jù)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別地涉及一種發(fā)送流士某體數(shù)據(jù)的方法 和裝置。
背景技術(shù):
在基于Linux操作系統(tǒng)的流媒體服務(wù)器應(yīng)用中,需要將大量的流媒體數(shù)據(jù) 從磁盤上傳遞到網(wǎng)絡(luò)上。當(dāng)流媒體數(shù)據(jù)從磁盤上到網(wǎng)絡(luò)上傳輸時(shí),需要根據(jù)媒 體的格式控制發(fā)包的間隔。
流媒體數(shù)據(jù)從磁盤上到網(wǎng)絡(luò)上傳輸由媒體服務(wù)器執(zhí)行,主要包括如下3個(gè) 步驟(1 )將流媒體數(shù)據(jù)/A^茲盤空間讀入用戶數(shù)據(jù)緩存中;(2 )將用戶數(shù)據(jù)緩 存中存方文的流々某體數(shù)據(jù)打包成實(shí)時(shí)傳輸協(xié)i義RTP( Real-time Transport Protocol) 數(shù)據(jù)包然后發(fā)到用戶發(fā)送緩存中;(3)將用戶發(fā)送緩存中存放的RTP數(shù)據(jù)包通 過用戶數(shù)據(jù)報(bào)協(xié)議UDP (User Datagram Protocol)網(wǎng)絡(luò)套接字向用戶的終端設(shè) 備發(fā)送。網(wǎng)絡(luò)側(cè)的服務(wù)器可以向多個(gè)終端發(fā)送流媒體數(shù)據(jù),即形成多通道的傳 輸,每個(gè)通道對(duì)應(yīng)一個(gè)纟冬端。
在Linux操作系統(tǒng)中,用戶進(jìn)程通過調(diào)用直接輸入輸出接口系統(tǒng)調(diào)用,可 以用來讀:^盤數(shù)據(jù),該系統(tǒng)調(diào)用將磁盤數(shù)據(jù)通過直接內(nèi)存訪問DMA (Direct Memory Access)機(jī)制直接寫入到用戶緩存中;通過調(diào)用UDP網(wǎng)絡(luò)套接字相關(guān) 系統(tǒng)調(diào)用接口,可以用來發(fā)送RTP數(shù)據(jù)包,該系統(tǒng)調(diào)用將RTP數(shù)據(jù)包從用戶 空間復(fù)制到內(nèi)核空間,進(jìn)行相應(yīng)的封裝,通過DMA機(jī)制映射到網(wǎng)卡的發(fā)送緩 沖區(qū),網(wǎng)卡將該RTP數(shù)據(jù)包發(fā)送出去。
在現(xiàn)有技術(shù)的這種方式下,對(duì)于每一路媒體流,都需要使用網(wǎng)絡(luò)套接字, 用戶進(jìn)程將媒體數(shù)據(jù)打包成RTP數(shù)據(jù)包后,調(diào)用UDP數(shù)據(jù)包發(fā)送接口,將數(shù) 據(jù)包發(fā)送出去。
5在目前的技術(shù)下,對(duì)于上述步驟中的第(2)步,是用一個(gè)定時(shí)器系統(tǒng)調(diào) 用或延時(shí)系統(tǒng)調(diào)用的方式來控制媒體包發(fā)往用戶發(fā)送緩存,延時(shí)系統(tǒng)調(diào)用或者 定時(shí)器系統(tǒng)調(diào)用本身的精確性會(huì)影響到發(fā)送流媒體數(shù)據(jù)包的時(shí)間間隔的精確 性,特別是在系統(tǒng)負(fù)荷較重的情況下延時(shí)系統(tǒng)調(diào)用或者定時(shí)器系統(tǒng)調(diào)用的時(shí)間 精確性較差;在多通道傳輸?shù)那闆r下,每個(gè)通道都使用一個(gè)定時(shí)器系統(tǒng)調(diào)用或 延時(shí)系統(tǒng)調(diào)用,若通道數(shù)量較多則會(huì)導(dǎo)致通道所使用的定時(shí)器系統(tǒng)調(diào)用或延時(shí) 系統(tǒng)調(diào)用發(fā)生調(diào)用延遲。這些都會(huì)使上述第(3)步中向用戶的終端設(shè)備發(fā)送 流媒體數(shù)據(jù)的時(shí)間精確性受到影響,從而導(dǎo)致媒體服務(wù)器的力良務(wù)質(zhì)量下降
發(fā)明內(nèi)容
—
本發(fā)明的主要目的是提供一種發(fā)送流媒體數(shù)據(jù)的方法和裝置,;本發(fā)明的
另一 目的是解決多通道傳輸?shù)那闆r下定時(shí)器系統(tǒng)調(diào)用或延時(shí)系統(tǒng)調(diào)用發(fā)生調(diào)
用延遲而導(dǎo)致媒體服務(wù)器服務(wù)質(zhì)量下降的問題。 為解決上述問題,本發(fā)明提供如下的技術(shù)方案 一種發(fā)送流媒體數(shù)據(jù)的方法,包括
從流媒體文件中讀取數(shù)據(jù)然后打包得到多個(gè)數(shù)據(jù)包,以及設(shè)置每個(gè)數(shù)據(jù)包 的轉(zhuǎn)存時(shí)刻;
每隔預(yù)設(shè)的時(shí)間間隔檢查當(dāng)前是否有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),以及在確認(rèn) 當(dāng)前有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)后將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口 ,由發(fā)送接口發(fā)送 該數(shù)據(jù)包。
根據(jù)上述方法
所述設(shè)置每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻,包括將數(shù)據(jù)包按照打包的先孕順序保 存在時(shí)間隊(duì)列中,記錄每個(gè)數(shù)據(jù)包在時(shí)間隊(duì)列中的位置;所述預(yù)設(shè)的時(shí)間間隔 包括時(shí)間隊(duì)列相鄰位置的時(shí)間間隔;所述每隔預(yù)設(shè)的時(shí)間間隔檢查當(dāng)前是否有 數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),包括根據(jù)時(shí)間先后次序逐一檢查時(shí)間隊(duì)列中各位置 上是否有數(shù)據(jù)包。所述將數(shù)據(jù)包按照打包的先后順序保存在時(shí)間隊(duì)列中,包括針對(duì)多個(gè)通 道中的每個(gè)通道,按照該通道的數(shù)據(jù)打包的先后順序?qū)⒃撏ǖ赖臄?shù)據(jù)包保存在 時(shí)間隊(duì)列中;所述確認(rèn)當(dāng)前有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)后將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送 接口,包括確認(rèn)當(dāng)前有多個(gè)通道的數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),然后同時(shí)將這些 多個(gè)通道的數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口 。
一種發(fā)送流媒體數(shù)據(jù)的裝置,包括打包模塊、轉(zhuǎn)存模塊和發(fā)送模塊,其中, 打包模塊,用于從流媒體文件中讀取數(shù)據(jù)然后打包得到多個(gè)數(shù)據(jù)包; 轉(zhuǎn)存模塊,用于設(shè)置每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻,每隔預(yù)設(shè)的時(shí)間間隔檢查當(dāng) 前是否有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),以及在確認(rèn)當(dāng)前有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)后 將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送模塊;
發(fā)送模塊,用于發(fā)送來自于轉(zhuǎn)存模塊的數(shù)據(jù)包。 根據(jù)上述裝置
所述轉(zhuǎn)存模塊包括時(shí)間隊(duì)列單元,用于按照預(yù)i殳的時(shí)間間隔設(shè)置時(shí)間隊(duì) 列的各個(gè)位置,以及將數(shù)據(jù)包按照打包的先后順序保存在時(shí)間隊(duì)列中,記錄每 個(gè)數(shù)據(jù)包在時(shí)間隊(duì)列中的位置;檢查單元,用于根據(jù)時(shí)間先后次序逐一檢查時(shí) 間隊(duì)列中各位置上是否有數(shù)據(jù)包;轉(zhuǎn)存單元,用于在檢查單元確i人時(shí)l、司隊(duì)列中 的位置上有數(shù)據(jù)包后,將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送才莫塊。
所述時(shí)間隊(duì)列單元進(jìn)一步用于針對(duì)多個(gè)通道中的每個(gè)通道,按照該通道的 數(shù)據(jù)打包的先后順序?qū)⒃撏ǖ赖臄?shù)據(jù)包保存在時(shí)間隊(duì)列中;所述檢查單元進(jìn)一 步用于根據(jù)時(shí)間先后次序逐一檢查時(shí)間隊(duì)列中各位置上是否有多個(gè)通道的數(shù) 據(jù)包;所述轉(zhuǎn)存單元進(jìn)一步用于在檢查單元確認(rèn)時(shí)間隊(duì)列中的位置上有多個(gè)通 道的數(shù)據(jù)包后,同時(shí)將這些多個(gè)通道的數(shù)據(jù)包轉(zhuǎn)存到發(fā)送才莫塊。
根據(jù)本實(shí)施例的技術(shù)方案,因?yàn)閷?duì)于打包得到的每個(gè)數(shù)據(jù)包設(shè)置了轉(zhuǎn)存時(shí) 刻,并且按照數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻將數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口,所以使數(shù)無包能夠 準(zhǔn)時(shí)地到達(dá)發(fā)送接口 ,避免了現(xiàn)有技術(shù)中延時(shí)系統(tǒng)調(diào)用或者定時(shí)器系統(tǒng)調(diào)用的 精確性不足而帶來的影響。本實(shí)施例中利用時(shí)間隊(duì)列來管理數(shù)據(jù)包向發(fā)送接口的轉(zhuǎn)存,這樣能夠做到每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻都得到了記錄,保證了轉(zhuǎn)存數(shù)據(jù) 包的時(shí)間精確性。并且利用時(shí)間隊(duì)列統(tǒng)一管理多個(gè)通道的數(shù)據(jù)包轉(zhuǎn)存,在某一 時(shí)刻若有多通道數(shù)據(jù)包需轉(zhuǎn)存則作統(tǒng)一處理,這種方式節(jié)省了系統(tǒng)資源,有助 于提高系統(tǒng)的工作效率。因此,對(duì)于通過網(wǎng)絡(luò)向終端設(shè)備提供流媒體數(shù)據(jù)的媒 體服務(wù)器來說,使用本實(shí)施例的技術(shù)方案能夠提高服務(wù)質(zhì)量。 -
圖1為實(shí)施例中的方法總體流程圖2A和圖2B為實(shí)施例中使用定時(shí)器控制的打包進(jìn)程示意圖;.
圖3A、圖3B和圖3C為實(shí)施例中使用時(shí)間隊(duì)列管理數(shù)據(jù)包轉(zhuǎn)存示意圖4為實(shí)施例中時(shí)間隊(duì)列的同一位置下掛接多個(gè)凝:據(jù)包示意圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例中的技術(shù)方案作出說明。附圖用于幫助理解 實(shí)施例的技術(shù)方案,在實(shí)現(xiàn)中可以不限于附圖所示的形式。
在本實(shí)施例中,如圖l所示,首先從流々某體文件中讀取數(shù)l^然后打包得到 多個(gè)數(shù)據(jù)包,以及設(shè)置每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻;接下來每隔預(yù)i殳的時(shí)間間隔進(jìn) 行檢查,若當(dāng)前有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),則將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口,再 由發(fā)送接口發(fā)送該數(shù)據(jù)包,否則繼續(xù)檢查是否有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)。這種 方法可以由網(wǎng)絡(luò)側(cè)的媒體服務(wù)器來執(zhí)行,媒體服務(wù)器具有發(fā)送接口,用于將媒 體數(shù)據(jù)向用戶的終端設(shè)備發(fā)送。
因?yàn)閺臄?shù)據(jù)包的數(shù)據(jù)中可以提取到該數(shù)據(jù)在流媒體中的時(shí)間信息,所以可 以根據(jù)該時(shí)間信息確定數(shù)據(jù)包的發(fā)送時(shí)刻,該發(fā)送時(shí)刻可以是4艮據(jù)一個(gè)設(shè)置的 起始時(shí)刻和從數(shù)據(jù)中提取的時(shí)間信息來確定得到的一個(gè)相對(duì)時(shí)刻,在發(fā)送接口 發(fā)送數(shù)據(jù)包的時(shí)候可以是根據(jù)設(shè)置的起始時(shí)刻和該相對(duì)時(shí)刻確定數(shù)據(jù)的發(fā)送 時(shí)刻,再4姿該發(fā)送時(shí)刻發(fā)送數(shù)據(jù)。媒體服務(wù)器可以從多個(gè)通道向多個(gè)用戶發(fā)送流媒體數(shù)據(jù)。對(duì)于數(shù)據(jù)打包的 過程,各個(gè)通道的處理方式相同??梢圆捎枚〞r(shí)器來控制打包進(jìn)程,才艮據(jù)打包 時(shí)長(zhǎng)的倍數(shù)設(shè)置定時(shí)器,當(dāng)定時(shí)器超時(shí)時(shí)從流媒體文件中讀取數(shù)據(jù),讀取的數(shù)
據(jù)量為多個(gè)數(shù)據(jù)包的數(shù)據(jù)量,然后將讀取的數(shù)據(jù)打包。以下結(jié)合圖2A和圖2B 對(duì)此作進(jìn)一步說明。如圖2A所示,例如有一通道例如通道n中打一個(gè)數(shù)據(jù)包 的時(shí)長(zhǎng)即打包時(shí)長(zhǎng)為10ms,打包定時(shí)器為30ms超時(shí),則一次定時(shí)時(shí)間內(nèi)可以 打三個(gè)數(shù)據(jù)包。為了在下文中將要介紹的時(shí)間隊(duì)列中有緩存的包,把糸一個(gè)包 推遲30ms發(fā)送,從而當(dāng)?shù)谝粋€(gè)數(shù)據(jù)包發(fā)送的時(shí)候,會(huì)保證有新的數(shù)據(jù)存到隊(duì) 列中,如圖2B所示,從而使隊(duì)列中一直存有待發(fā)送數(shù)據(jù)。
在本實(shí)施例中,為了精確地控制數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口的時(shí)間,預(yù)先設(shè)置 了每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻,按照該轉(zhuǎn)存時(shí)刻將數(shù)據(jù)包轉(zhuǎn)存至發(fā)送接口。'因?yàn)閿?shù) 據(jù)包的數(shù)量較大并且數(shù)據(jù)包之間有發(fā)送的先后關(guān)系,因此可以利用時(shí)間隊(duì)列來 設(shè)置數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻。
在數(shù)據(jù)打包得到數(shù)據(jù)包之后即存入時(shí)間隊(duì)列中,并且記錄每個(gè)數(shù)據(jù)包在時(shí) 間隊(duì)列中的位置??梢圆捎脮r(shí)間隊(duì)列中的索引來進(jìn)行該記錄,即用索引來表示 時(shí)間隊(duì)列中的各個(gè)位置,時(shí)間隊(duì)列中各位置的先后與各位置上的數(shù)據(jù)包轉(zhuǎn)存時(shí) 間先后相一致,每個(gè)位置有一個(gè)索引。時(shí)間隊(duì)列中的各相鄰位置之間有相同的 時(shí)間間隔,每一個(gè)索引也同時(shí)對(duì)應(yīng)一個(gè)轉(zhuǎn)存時(shí)刻,即提取該索引對(duì)應(yīng)的位置的 數(shù)據(jù)包時(shí),按照該索引對(duì)應(yīng)的轉(zhuǎn)存時(shí)刻進(jìn)行轉(zhuǎn)存操作。并且記錄該轉(zhuǎn)存時(shí)刻而 且在轉(zhuǎn)存操作之后進(jìn)行更新。
以下舉例說明索引的形式及數(shù)據(jù)包的索引的確定方法。設(shè)置時(shí)間隊(duì)列中相 鄰位置的數(shù)據(jù)轉(zhuǎn)存的時(shí)刻相隔時(shí)長(zhǎng)為t,并設(shè)置一個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻為to, 該數(shù)據(jù)包可以是流媒體文件的第一個(gè)數(shù)據(jù)包,它在時(shí)間隊(duì)列中的索引為0,于 是索引O對(duì)應(yīng)數(shù)據(jù)轉(zhuǎn)存時(shí)刻tO,索引l對(duì)應(yīng)數(shù)據(jù)轉(zhuǎn)存時(shí)刻tO+t,索引2對(duì)應(yīng)數(shù) 據(jù)轉(zhuǎn)存時(shí)刻t0+2t,依此類推,如圖3中所示,根據(jù)時(shí)間隊(duì)列的長(zhǎng)度,它的末 位位置的索引為N,對(duì)應(yīng)的數(shù)據(jù)轉(zhuǎn)存時(shí)刻是tO+Nt。時(shí)間隊(duì)列的長(zhǎng)度可以根據(jù)
9打包時(shí)長(zhǎng)和需要緩存數(shù)據(jù)包的個(gè)數(shù)來設(shè)置。時(shí)間隊(duì)列以t為步進(jìn)持續(xù)向前推進(jìn), 對(duì)時(shí)間隊(duì)列每個(gè)索引逐一檢查,也就實(shí)現(xiàn)了每隔一個(gè)時(shí)間間隔檢查當(dāng)前是否有 數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)。如果檢查到的索引所在的位置上有數(shù)據(jù)包,就將該數(shù)
據(jù)包進(jìn)行轉(zhuǎn)存,如圖3A,例如當(dāng)前時(shí)刻為t0+2t,就轉(zhuǎn)存索引為2的倍置上的 數(shù)據(jù)包。并不是每個(gè)位置上都有數(shù)據(jù)包,這根據(jù)打包時(shí)長(zhǎng)決定。例如打包時(shí)長(zhǎng) 為4ms, t=2ms,則在索引0、 2、 4、 6等位置上有數(shù)據(jù)包。可以看出步進(jìn)t應(yīng) 該小于打包時(shí)長(zhǎng),以保證每個(gè)打包得到的數(shù)才居包能夠在時(shí)間隊(duì)列中獲得位置。
結(jié)合圖3A和圖3B可以看出,在轉(zhuǎn)存了索引為0的位置的數(shù)據(jù)包之后, 索引為0的位置的數(shù)據(jù)轉(zhuǎn)存時(shí)刻應(yīng)更新為tO+(N+l)t,從時(shí)間隊(duì)列上則表現(xiàn)為 該索引的位置被移到了時(shí)間隊(duì)列的末位,該位置上可以繼續(xù)緩存打包得到的數(shù) 據(jù)包。在進(jìn)4亍了n次轉(zhuǎn)存之后,時(shí)間隊(duì)列的狀態(tài)如圖3C所示。所以時(shí)間隊(duì)列 是一個(gè)緩存內(nèi)容保持更新的循環(huán)隊(duì)列。
對(duì)于多個(gè)通道,可以使用同一個(gè)時(shí)間隊(duì)列,于是時(shí)間隊(duì)列的同一個(gè)位置下 可以掛接多個(gè)通道的數(shù)據(jù)包,各個(gè)通道是各自打包并按打包先后順序保存到時(shí) 間隊(duì)列中,通道之間互不影響。如圖4所示,索引為0的位置下掛接了 n個(gè)數(shù) 據(jù)包,這些數(shù)據(jù)包分屬于不同的通道。當(dāng)然其他位置下也可能掛接多個(gè)數(shù)據(jù)包, 圖中未示出。根據(jù)各通道的數(shù)據(jù)格式,各通道的打包時(shí)長(zhǎng)也可能不同,因此各 通道的數(shù)據(jù)包在時(shí)間隊(duì)列中的間隔也不同??梢钥闯鲈诙嗤ǖ赖南到y(tǒng)中,時(shí)間 隊(duì)列的步進(jìn)應(yīng)當(dāng)小于各通道中的最小打包時(shí)長(zhǎng),可以將步進(jìn)設(shè)置為各通道打包 時(shí)長(zhǎng)的公約數(shù)。
利用時(shí)間隊(duì)列,可以方便地實(shí)現(xiàn)數(shù)據(jù)包的準(zhǔn)時(shí)轉(zhuǎn)存。因?yàn)闀r(shí)間隊(duì)列中的相 鄰位置的時(shí)間間隔預(yù)先設(shè)定,所以根據(jù)時(shí)間先后次序逐一檢查時(shí)間隊(duì)列中各位 置即實(shí)現(xiàn)了按設(shè)定的時(shí)間間隔檢查當(dāng)前是否有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)。從圖3 可以看出,并不是時(shí)間隊(duì)列中的每個(gè)位置上都有數(shù)據(jù)包,而且有些位置上不止 一個(gè)數(shù)據(jù)包,這些數(shù)據(jù)包屬于多個(gè)通道。所以當(dāng)檢查到有多個(gè)數(shù)據(jù)包的位置時(shí), 可以將這些數(shù)據(jù)包一并轉(zhuǎn)存到發(fā)送接口,這種方式有助于節(jié)省系統(tǒng)資源,提高系統(tǒng)運(yùn)行效率。
基于上述方法,以下對(duì)本實(shí)施例中的裝置作出說明。本實(shí)施例中的裝置可 以利用軟件、硬件或者二者結(jié)合的方式實(shí)現(xiàn)。以下按功能模塊來劃分裝置結(jié)構(gòu), 在實(shí)現(xiàn)中各模塊可以各自成為設(shè)備,或?yàn)橥辉O(shè)備的組成部分。本領(lǐng)域普通技
指令相關(guān)的硬件來完成,所述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,
如ROM/RAM、磁碟、光盤等。
本實(shí)施例中的發(fā)送流媒體數(shù)據(jù)的裝置的一種結(jié)構(gòu)是包括打包模塊、轉(zhuǎn)存模 塊和發(fā)送模塊,其中打包模塊用于從流媒體文件中讀取數(shù)據(jù)然后打包得到多個(gè) 數(shù)據(jù)包;轉(zhuǎn)存模塊用于設(shè)置每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻,每隔預(yù)設(shè)的時(shí)間間隔檢查 當(dāng)前是否有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),以及在確認(rèn)當(dāng)前有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá) 后將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送模塊;發(fā)送模塊用于發(fā)送來自于轉(zhuǎn)存模塊的數(shù)據(jù)包。
打包模塊可進(jìn)一步用于記錄每個(gè)數(shù)據(jù)包的發(fā)送時(shí)刻;這樣,發(fā)送模塊可一 步用于根據(jù)打包模塊記錄的每個(gè)數(shù)據(jù)包的發(fā)送時(shí)刻發(fā)送每個(gè)數(shù)據(jù)包。'
對(duì)于打包模塊,它的一種結(jié)構(gòu)可以是包括定時(shí)單元,用于根據(jù)打包時(shí)長(zhǎng) 的倍數(shù)設(shè)置定時(shí)器;讀取單元,用于當(dāng)定時(shí)單元設(shè)置的定時(shí)器超時(shí)時(shí)從流媒體 文件中讀取數(shù)據(jù),讀取的數(shù)據(jù)量為單個(gè)數(shù)據(jù)包的所述倍數(shù);以及打包單元,用 于將讀取單元讀取的數(shù)據(jù)打包。 -
對(duì)于轉(zhuǎn)存模塊,它的一種結(jié)構(gòu)可以是包括時(shí)間隊(duì)列單元,用于按照預(yù)設(shè) 的時(shí)間間隔設(shè)置時(shí)間隊(duì)列的各個(gè)位置,以及將數(shù)據(jù)包按照打包的先后順序保存 在時(shí)間隊(duì)列中,記錄每個(gè)數(shù)據(jù)包在時(shí)間隊(duì)列中的位置;檢查單元,用于沖艮據(jù)時(shí) 間先后次序逐一檢查時(shí)間隊(duì)列中各位置上是否有數(shù)據(jù)包;轉(zhuǎn)存單元,用于在檢 查單元確認(rèn)時(shí)間隊(duì)列中的位置上有數(shù)據(jù)包后,將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送模塊。
對(duì)于轉(zhuǎn)存模塊的這種結(jié)構(gòu),其中的時(shí)間隊(duì)列單元可進(jìn)一步用于針對(duì)多個(gè)通 道中的每個(gè)通道,按照該通道的數(shù)據(jù)打包的先后順序?qū)⒃撏ǖ赖臄?shù)據(jù)包保存在 時(shí)間隊(duì)列中;這樣,檢查單元可進(jìn)一步用于根據(jù)時(shí)間先后次序逐一檢查時(shí)間隊(duì)列中各位置上是否有多個(gè)通道的數(shù)據(jù)包;并且轉(zhuǎn)存單元可進(jìn)一步用于在檢查單 元確認(rèn)時(shí)間隊(duì)列中的位置上有多個(gè)通道的數(shù)據(jù)包后,同時(shí)將這些多個(gè)通道的數(shù) 據(jù)包轉(zhuǎn)存到發(fā)送模塊。
根據(jù)本實(shí)施例的技術(shù)方案,因?yàn)閷?duì)于打包得到的每個(gè)數(shù)據(jù)包設(shè)置了轉(zhuǎn)存時(shí) 刻,并且按照數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻將數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口,所以使數(shù)據(jù)包能夠 準(zhǔn)時(shí)地到達(dá)發(fā)送接口 ,避免了現(xiàn)有技術(shù)中延時(shí)系統(tǒng)調(diào)用或者定時(shí)器系統(tǒng)調(diào)用的 精確性不足而帶來的影響。并且本實(shí)施例中發(fā)送接口根據(jù)從數(shù)據(jù)包中得出的發(fā) 送時(shí)間發(fā)送數(shù)據(jù)包,進(jìn)一步保證了數(shù)據(jù)包發(fā)出的時(shí)機(jī)。本實(shí)施例中利用時(shí)間隊(duì) 列來管理數(shù)據(jù)包向發(fā)送接口的轉(zhuǎn)存,這樣能夠做到每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻都得 到了記錄,保證了轉(zhuǎn)存數(shù)據(jù)包的時(shí)間精確性。并且利用時(shí)間隊(duì)列統(tǒng)一管理多個(gè) 通道的數(shù)據(jù)包轉(zhuǎn)存,在某一時(shí)刻若有多通道數(shù)據(jù)包需轉(zhuǎn)存則作統(tǒng)一處理,這種 方式節(jié)省了系統(tǒng)資源,有助于提高系統(tǒng)的工作效率。因此,對(duì)于通過網(wǎng)絡(luò)向終 端設(shè)備提供流媒體數(shù)據(jù)的媒體服務(wù)器來說,使用本實(shí)施例的技術(shù)方案能夠提高 服務(wù)質(zhì)量。
明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及 其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1、一種發(fā)送流媒體數(shù)據(jù)的方法,其特征在于,包括從流媒體文件中讀取數(shù)據(jù)然后打包得到多個(gè)數(shù)據(jù)包,以及設(shè)置每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻;每隔預(yù)設(shè)的時(shí)間間隔檢查當(dāng)前是否有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),以及在確認(rèn)當(dāng)前有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)后將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口,由發(fā)送接口發(fā)送該數(shù)據(jù)包。
2、 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述從流媒體文件中讀取數(shù)據(jù)然后打包得到多個(gè)數(shù)據(jù)包之后進(jìn)一步包括記錄每個(gè)數(shù)據(jù)包的發(fā)送時(shí)刻;所述由發(fā)送接口發(fā)送該數(shù)據(jù)包,包括由發(fā)送接口根據(jù)記錄的每個(gè)數(shù)據(jù)包的發(fā)送時(shí)刻發(fā)送數(shù)據(jù)包。
3、 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述從流媒體文件中讀取數(shù)據(jù)然后打包得到多個(gè)數(shù)據(jù)包,包括根據(jù)打包時(shí)長(zhǎng)的倍數(shù)設(shè)置定時(shí)器,當(dāng)定時(shí)器超時(shí)時(shí)從流媒體文件中讀取數(shù)據(jù),讀取的數(shù)據(jù)量為多個(gè)數(shù)據(jù)包的數(shù)據(jù)量,然后將讀取的數(shù)據(jù)打包。
4、 根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述設(shè)置每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻,包括將數(shù)據(jù)包按照打包的先后順序保存在時(shí)間隊(duì)列中,記錄每個(gè)數(shù)據(jù)包在時(shí)間隊(duì)列中的位置; '所述預(yù)設(shè)的時(shí)間間隔包括時(shí)間隊(duì)列相鄰位置的時(shí)間間隔;所述每隔預(yù)設(shè)的時(shí)間間隔檢查當(dāng)前是否有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),包括根據(jù)時(shí)間先后次序逐一檢查時(shí)間隊(duì)列中各位置上是否有數(shù)據(jù)包。
5、 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述將數(shù)據(jù)包按^、打包的先后順序保存在時(shí)間隊(duì)列中,包括針對(duì)多個(gè)通道中的每個(gè)通道,按照該通道的數(shù)據(jù)打包的先后順序?qū)⒃撏ǖ赖臄?shù)據(jù)包保存在時(shí)間隊(duì)列中;所述確認(rèn)當(dāng)前有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)后將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口 ,包括確認(rèn)當(dāng)前有多個(gè)通道的數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),然后同時(shí)將這些多個(gè)通道 的數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口。
6、 一種發(fā)送流媒體數(shù)據(jù)的裝置,其特征在于,包括打包模塊、轉(zhuǎn)存模塊 和發(fā)送模塊,其中,打包模塊,用于從流媒體文件中讀取數(shù)據(jù)然后打包得到多個(gè)數(shù)據(jù)包; 轉(zhuǎn)存模塊,用于設(shè)置每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻,每隔預(yù)設(shè)的時(shí)間間隔檢查當(dāng)前是否有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),以及在確認(rèn)當(dāng)前有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)后將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送模塊;發(fā)送模塊,用于發(fā)送來自于轉(zhuǎn)存模塊的數(shù)據(jù)包。
7、 根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述打包模塊進(jìn)一步用于 記錄每個(gè)數(shù)據(jù)包的發(fā)送時(shí)刻;所述發(fā)送模塊進(jìn)一步用于根據(jù)打包模塊記錄的每個(gè)數(shù)據(jù)包的發(fā)送時(shí)刻發(fā) 送每個(gè)數(shù)據(jù)包。
8、 根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述打包模塊包括 定時(shí)單元,用于4艮據(jù)打包時(shí)長(zhǎng)的倍數(shù)設(shè)置定時(shí)器; ' 讀取單元,用于當(dāng)定時(shí)單元設(shè)置的定時(shí)器超時(shí)時(shí)從流媒體文件中讀取數(shù)據(jù),讀取的數(shù)據(jù)量為單個(gè)數(shù)據(jù)包的所述倍數(shù); 打包單元,用于將讀取單元讀取的數(shù)據(jù)打包。
9、 根據(jù)權(quán)利要求6或7所述的裝置,其特征在于,所述轉(zhuǎn)存模塊包括 時(shí)間隊(duì)列單元,用于按照預(yù)設(shè)的時(shí)間間隔設(shè)置時(shí)間隊(duì)列的各個(gè)位置,以及將數(shù)據(jù)包按照打包的先后順序保存在時(shí)間隊(duì)列中,記錄每個(gè)數(shù)據(jù)包在時(shí)間隊(duì)列 中的位置;檢查單元,用于根據(jù)時(shí)間先后次序逐一檢查時(shí)間隊(duì)列中各位置上是否有數(shù) 據(jù)包;轉(zhuǎn)存單元,用于在檢查單元確認(rèn)時(shí)間隊(duì)列中的位置上有數(shù)據(jù)包后,將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送模塊。
10、根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述時(shí)間隊(duì)列單先進(jìn)一步用于針對(duì)多個(gè)通道中的每個(gè)通道,按照該通道的數(shù)據(jù)打包的先后順序?qū)⒃撏ǖ赖臄?shù)據(jù)包保存在時(shí)間隊(duì)列中;所述檢查單元進(jìn)一步用于根據(jù)時(shí)間先后次序逐一檢查時(shí)間隊(duì)列中各位置上是否有多個(gè)通道的數(shù)據(jù)包; '所述轉(zhuǎn)存單元進(jìn)一步用于在檢查單元確認(rèn)時(shí)間隊(duì)列中的位置上有多個(gè)通道的數(shù)椐包后,同時(shí)將這些多個(gè)通道的數(shù)據(jù)包轉(zhuǎn)存到發(fā)送模塊。
全文摘要
本發(fā)明提供一種發(fā)送流媒體數(shù)據(jù)的方法和裝置,以解決現(xiàn)有技術(shù)中由于延時(shí)系統(tǒng)調(diào)用或者定時(shí)器系統(tǒng)調(diào)用的時(shí)間精確性較差而導(dǎo)致媒體服務(wù)器服務(wù)質(zhì)量下降的問題。實(shí)施例中的方法有從流媒體文件中讀取數(shù)據(jù)然后打包得到多個(gè)數(shù)據(jù)包,以及設(shè)置每個(gè)數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻;每隔預(yù)設(shè)的時(shí)間間隔檢查當(dāng)前是否有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá),以及在確認(rèn)當(dāng)前有數(shù)據(jù)包的轉(zhuǎn)存時(shí)刻到達(dá)后將該數(shù)據(jù)包轉(zhuǎn)存到發(fā)送接口,由發(fā)送接口發(fā)送該數(shù)據(jù)包。對(duì)于通過網(wǎng)絡(luò)向終端設(shè)備提供流媒體數(shù)據(jù)的媒體服務(wù)器來說,使用本實(shí)施例的技術(shù)方案能夠提高服務(wù)質(zhì)量。
文檔編號(hào)H04L29/06GK101631128SQ20091016489
公開日2010年1月20日 申請(qǐng)日期2009年8月19日 優(yōu)先權(quán)日2009年8月19日
發(fā)明者丁向軍, 夏洪升, 王魏強(qiáng) 申請(qǐng)人:中興通訊股份有限公司