專利名稱:一種虛擬演播室系統(tǒng)中的命令傳遞方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種命令傳遞方法,尤其是涉及一種虛擬演播室系統(tǒng)中的命 令傳遞方法。
背景技術(shù):
虛擬演播室系統(tǒng)由控制端和播出端構(gòu)成,控制端通過(guò)向播出端發(fā)送命令 來(lái)控制播出端播出情況,同時(shí)播出端還會(huì)向控制端提供真實(shí)攝相機(jī)等的狀態(tài) 信息,它們之間的命令傳遞通常是通過(guò)網(wǎng)絡(luò)來(lái)實(shí)現(xiàn)的。
命令傳遞系統(tǒng)是虛擬演播室系統(tǒng)中比較重要的關(guān)鍵技術(shù)之一,播出端自 身不具有控制功能,不能對(duì)自身進(jìn)行任何動(dòng)作,所有動(dòng)作均由控制端來(lái)控制, 而控制端的外部參數(shù)又由播出端采集。它們之間的命令傳遞由命令傳遞系統(tǒng) 來(lái)掌控。
現(xiàn)有的命令傳遞方法是通過(guò)MFC (Microsoft Foundation Classes,樣支 軟基礎(chǔ)類)中的CSocket來(lái)直接建立控制端與播出端的連接,在控制端和播 出端均存儲(chǔ)相同的命令實(shí)現(xiàn)方法集合和命令列表,命令列表為命令實(shí)現(xiàn)方法 集合的索引,如圖2所示。發(fā)送端將命令的描述、類型、格式以及所包含的 參數(shù)等按照一定的規(guī)則轉(zhuǎn)化成字節(jié)流,通過(guò)Socket將其發(fā)送給接收端。接收 端接收到發(fā)送端發(fā)送的字節(jié)流后,按照一定的規(guī)則來(lái)解析這些字節(jié)流,然后 通過(guò)命令列表來(lái)查找命令實(shí)現(xiàn)方法結(jié)合中對(duì)應(yīng)的命令,最終在接收端實(shí)現(xiàn)命 令。使用這種方法需要經(jīng)常維護(hù)命令列表,每當(dāng)命令實(shí)現(xiàn)方法集合發(fā)生變化 時(shí),便需要更新該命令列表。當(dāng)命令越來(lái)越多時(shí),命令列表也會(huì)越來(lái)越紛亂, 造成查找效率越來(lái)越低。而且使用CSocket來(lái)建立網(wǎng)絡(luò)連沖妄,由于CSocket 是微軟公司對(duì)Socket API的一種封裝,因此其靈活性和效率都比較低。
發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的是提供一種虛擬演播室系統(tǒng)中的命令傳遞方法,該方法無(wú)需維護(hù)命令列表,能夠使命令傳遞的靈活性 強(qiáng)、效率高。
為實(shí)現(xiàn)以上目的,本發(fā)明采用的技術(shù)方案如下 一種虛擬演播室系統(tǒng)中 的命令傳遞方法,包括以下步驟
(1)建立發(fā)送端與接收端的網(wǎng)絡(luò)連接;
(2 )發(fā)送端創(chuàng)建繼承于命令基類的命令并對(duì)命令參數(shù)進(jìn)行賦值,通過(guò)運(yùn) 行時(shí)類型識(shí)別獲得命令實(shí)例名,發(fā)送端將命令實(shí)例名序列化成字符串,命令 將命令參數(shù)序列化成字符串,將序列化后的字符串傳遞給接收端;
(3)接收端接收到發(fā)送端傳遞過(guò)來(lái)的字符串后,先解析命令實(shí)例名的字 符串,動(dòng)態(tài)創(chuàng)建繼承于與步驟(2 )中相同的命令基類的該命令實(shí)例名的命令, 然后創(chuàng)建的命令將命令參數(shù)字符串重新轉(zhuǎn)換為各個(gè)命令參數(shù),最后在接收端 執(zhí)行命令。
如上所述的一種虛擬演播室系統(tǒng)中的命令傳遞方法,步驟(1)所述的網(wǎng) 絡(luò)連接是通過(guò)Socket API建立的C/S結(jié)構(gòu)的局域網(wǎng)絡(luò)連接。
如上所述的一種虛擬演播室系統(tǒng)中的命令傳遞方法,其中,所述的命令 基類為MFC中的C0bject基類。
如上所述的一種虛擬演播室系統(tǒng)中的命令傳遞方法,步驟(2)中所述的 命令將命令參數(shù)序列化成字符串是按照事先制定好的排列規(guī)則和參數(shù)類型進(jìn) 行的。
如上所述的一種虛擬演播室系統(tǒng)中的命令傳遞方法,步驟(3)中,接收 端不斷地監(jiān)聽發(fā)送端的情況,當(dāng)監(jiān)聽到有字符串發(fā)送過(guò)來(lái)后接收字符串。
如上所述的一種虛擬演播室系統(tǒng)中的命令傳遞方法,步驟(3)中,當(dāng)發(fā) 送端將多個(gè)命令合成一個(gè)數(shù)據(jù)包發(fā)送給接收端時(shí),接收端采用循環(huán)解析接收 到數(shù)據(jù)包的方式將集合命令分解為單獨(dú)的命令,所述的循環(huán)解析接收到數(shù)據(jù)
4包的方式是指當(dāng)解析完一條命令后,判斷數(shù)據(jù)包是否為空,如果不為空則繼 續(xù)進(jìn)行解析,直到數(shù)據(jù)包為空。
本發(fā)明所述的方法,由于傳遞的是真正的命令,因此無(wú)需像現(xiàn)有技術(shù)那 樣在控制端與播出端建立和維護(hù)一張命令列表,從而增強(qiáng)了命令傳遞的靈活
性,提高了命令傳遞的效率。而且,使用Socket API直接建立控制端與播出 端的網(wǎng)絡(luò)連接,解決了網(wǎng)絡(luò)丟包或者發(fā)送命令無(wú)法接收到的問(wèn)題。
圖1是現(xiàn)有技術(shù)中命令傳遞方法示意圖; 圖2是本發(fā)明所述的命令傳遞方法流程圖。
具體實(shí)施例方式
下面結(jié)合具體實(shí)施方式
和附圖對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。 本發(fā)明的核心思想是在虛擬演播室系統(tǒng)的控制端通過(guò)將命令序列化成 字符串后,將其傳遞給播出端,播出端接收到該字符串后重構(gòu)命令,以此來(lái) 實(shí)現(xiàn)命令傳遞的目的。播出端向控制端傳遞狀態(tài)信息與控制端向播出端傳遞 命令的方式相同。
圖2出示了本發(fā)明所述的虛擬演播室系統(tǒng)中命令傳遞方法流程,包括以 下步驟。
(1)建立發(fā)送端與接收端的網(wǎng)絡(luò)連接。發(fā)送端和接收端可以是控制端, 也可以是播出端。
現(xiàn)有技術(shù)中采用MFC中的CSocket建立發(fā)送端與接收端的網(wǎng)絡(luò)連接,這 種連接方式常常由于網(wǎng)絡(luò)環(huán)境或者其他原因?qū)е戮W(wǎng)絡(luò)丟包或者發(fā)送命令無(wú)法 接收到的問(wèn)題,穩(wěn)定性較差。因此本發(fā)明采用Socket API來(lái)直接建立發(fā)送端 與接收端的網(wǎng)絡(luò)連接。所述的網(wǎng)絡(luò)連接可以是局域網(wǎng)絡(luò)連接,也可以是非局 域網(wǎng)絡(luò)連接。本實(shí)施方式中,網(wǎng)絡(luò)連接為C/S結(jié)構(gòu)的局域網(wǎng)絡(luò)連接。
(2 )發(fā)送端創(chuàng)建繼承于命令基類的命令并對(duì)命令參數(shù)進(jìn)行賦值,通過(guò)運(yùn)
5行時(shí)類型識(shí)別獲得命令實(shí)例名,發(fā)送端將命令實(shí)例名序列化成字符串,命令 將命令參數(shù)序列化成字符串,將序列化后的字符串傳遞給接收端。
發(fā)送端創(chuàng)建的所有命令均繼承一個(gè)命令基類,如繼承MFC中的C0bject 基類。當(dāng)創(chuàng)建一個(gè)繼承于命令基類的命令后,首先對(duì)該命令參數(shù)進(jìn)行賦值, 再通過(guò)運(yùn)行時(shí)類型識(shí)別獲得命令實(shí)例名。然后,發(fā)送端將命令實(shí)例名序列化 成字符串,命令按照參數(shù)的排列順序和參數(shù)類型將賦值后的參數(shù)序列化成字 符串。每個(gè)命令均具有序列化自身參數(shù)的功能,而且知曉序列化后字符串中 參數(shù)的排列順序。最后發(fā)送端將序列化后的命令實(shí)例名字符串和命令參數(shù)字 符串通過(guò)Socket傳遞癥會(huì)4妄收端。
(3)接收端會(huì)實(shí)時(shí)監(jiān)聽發(fā)送端的情況,當(dāng)發(fā)送端有字符串傳遞過(guò)來(lái)后, 接收這些字符串。當(dāng)接收端接收到發(fā)送端傳遞過(guò)來(lái)的字符串后,首先解析命 令實(shí)例名的字符串,根據(jù)解析出來(lái)的命令實(shí)例名動(dòng)態(tài)創(chuàng)建繼承于與步驟(2) 中相同的命令基類的命令,然后由創(chuàng)建的命令根據(jù)參數(shù)的排列順序和參數(shù)類 型解析命令參數(shù)字符串,將命令參數(shù)字符串重新轉(zhuǎn)換為各個(gè)命令參數(shù),最后
在播出端執(zhí)行命令。 實(shí)施例
假設(shè)現(xiàn)在有一個(gè)EventStart ( int nScenelndex, EM5VSEventUstHT eCurChooseHT, int nCurChooseldx )命令,包括三個(gè)參數(shù)nScenelndex、 eCurChooseHT和nCurChooseldx , 其中 eCurChooseHT為枚舉類型, nScenelndex和nCurChooseldx為整凄t類型,需要將該命令由控制端傳遞玄合 4番出端。首先在控制端建立繼岸義于Cobject基類的EventStart命令,然后將 命令參數(shù)nScenelndex、 eCurChooseHT和nCurChooseldx賦值。由于每個(gè)從 C0bject中派生的類都有一個(gè)CRuntimeClass對(duì)象同它關(guān)耳關(guān),以完成在運(yùn)4亍 時(shí)得到類實(shí)例的信息。因此通過(guò)這種方式可以獲得命令實(shí)例名
"EventStartCmd",然后控制端將命令實(shí)例名序列化成一l爻字符串, EventStart命令也將賦值后的命令參數(shù)按照參數(shù)的排列順序和參數(shù)類型序 列化成字符串。即依次序列化賦值后的nScenelndex、 eCurChooseHT和 nCurChooseldx這三個(gè)參數(shù)。序列化后的字符串包含一段類型為CString的"EventStartCmd"的命令實(shí)例名字符串、一^殳類型為int的貝武值后的 nScenelndex參數(shù)字符串、 一段定義為EM5VSEventLis tHT枚舉類型的賦值后 的eCurChooseHT參數(shù)字符串和一段int類型賦值后的nCurChooseldx參數(shù)。 最后,控制端通過(guò)Socket將該^1字符串傳遞給#"出端。
播出端實(shí)時(shí)監(jiān)聽控制端端的情況,當(dāng)收到該段字符串后,首先將
"EventStartCmd"的命令實(shí)例名字符串解析出來(lái)。根據(jù)"EventStartCmd,, 的命令實(shí)例名動(dòng)態(tài)創(chuàng)建繼承于C0bject基類的實(shí)例名為"EventStartCmd"的 命令。由于創(chuàng)建出來(lái)的"EventStartCmd"命令知曉其自身參數(shù)的排列順序和 參數(shù)類型,因此"EventStartCmd,,命令能夠?qū)凑諈?shù)的排列順序和類型將 nScenelndex、 eCurChooseHT和nCurChooseldx的命令參數(shù)字符串反序列化 為參數(shù)。這樣便完成了播出端命令的建立和命令參數(shù)的賦值,據(jù)此播出端便 可以纟丸行該命令。
由于網(wǎng)絡(luò)傳遞時(shí)并不總是發(fā)送一條命令就接受一條命令,有時(shí)可能幾條 命令合成一個(gè)數(shù)據(jù)包發(fā)送出去,以便合理地利用網(wǎng)絡(luò)帶寬,因此在接收端解 析時(shí)需要將命令正確地分解。本實(shí)施例中,通過(guò)循環(huán)解析接收到數(shù)據(jù)包的方 式將集合命令分解為單獨(dú)的命令,即當(dāng)解析完一條命令后,判斷數(shù)據(jù)包中是 否還有字符串,如果還有字符串則繼續(xù)進(jìn)行解析,這樣便避免了命令丟失的 問(wèn)題。
在本發(fā)明中,由于發(fā)送端與接收端傳遞的是真正的命令,而不是命令的 描述、類型、格式等信息,再通過(guò)命令列表在命令實(shí)現(xiàn)方法集合中找到真正 的命令,因此無(wú)需像現(xiàn)有技術(shù)那樣在控制端與播出端建立和維護(hù)命令列表, 而且也無(wú)需在控制端和播出端均存儲(chǔ)命令實(shí)現(xiàn)方法集合,只需在控制端或者 在第三方上存儲(chǔ)一個(gè)命令實(shí)現(xiàn)方法集合即可。
本發(fā)明所述的方法并不限于上述具體實(shí)施方式
,本領(lǐng)域技術(shù)人員根據(jù)本 發(fā)明的技術(shù)方案得出其他的實(shí)施方式,同樣屬于本發(fā)明的技術(shù)創(chuàng)新范圍。
權(quán)利要求
1.一種虛擬演播室系統(tǒng)中的命令傳遞方法,包括以下步驟(1)建立發(fā)送端與接收端的網(wǎng)絡(luò)連接;(2)發(fā)送端創(chuàng)建繼承于命令基類的命令并對(duì)命令參數(shù)進(jìn)行賦值,通過(guò)運(yùn)行時(shí)類型識(shí)別獲得命令實(shí)例名,發(fā)送端將命令實(shí)例名序列化成字符串,命令將命令參數(shù)序列化成字符串,將序列化后的字符串傳遞給接收端;(3)接收端接收到發(fā)送端傳遞過(guò)來(lái)的字符串后,先解析命令實(shí)例名的字符串,動(dòng)態(tài)創(chuàng)建繼承于命令基類的該命令實(shí)例名的命令,所述的命令基類與步驟(2)中的命令基類相同,然后創(chuàng)建的命令將命令參數(shù)字符串重新轉(zhuǎn)換為各個(gè)命令參數(shù),最后在接收端執(zhí)行命令。
2. 如權(quán)利要求1所述的一種虛擬演播室系統(tǒng)中的命令傳遞方法,其特征 在于步驟(1 )所述的網(wǎng)絡(luò)連接是通過(guò)Socket API建立的C/S結(jié)構(gòu)的局域 網(wǎng)絡(luò)連4妄。
3. 如權(quán)利要求1或2所述的一種虛擬演播室系統(tǒng)中的命令傳遞方法,其 特征在于所述的命令基類為MFC中的C0bject基類。
4. 如權(quán)利要求3所述的一種虛擬演^番室系統(tǒng)中的命令傳遞方法,其特;f正 在于步驟(2)中所述的命令將命令參數(shù)序列化成字符串是按照參數(shù)的排列 順序和參數(shù)的類型進(jìn)行的。
5. 如權(quán)利要求4所述的一種虛擬演播室系統(tǒng)中的命令傳遞方法,其特征 在于步驟(3)中,接收端不斷地監(jiān)聽發(fā)送端的情況,當(dāng)監(jiān)聽到有字符串發(fā) 送過(guò)來(lái)后接收字符串。
6. 如權(quán)利要求5所述的一種虛擬演播室系統(tǒng)中的命令傳遞方法,其特征 在于步驟(3)中,當(dāng)發(fā)送端將多個(gè)命令合成一個(gè)數(shù)據(jù)包發(fā)送給接收端時(shí), 接收端采用循環(huán)解析接收到數(shù)據(jù)包的方式將集合命令分解為單獨(dú)的命令,所 述的循環(huán)解析接收到數(shù)據(jù)包的方式是指當(dāng)解析完一條命令后,判斷數(shù)據(jù)包是 否為空,如果不為空則繼續(xù)進(jìn)行解析,直到數(shù)據(jù)包為空。
全文摘要
本發(fā)明公開了一種命令傳遞方法,尤其是公開了一種虛擬演播室系統(tǒng)中的命令傳遞方法。現(xiàn)有的命令傳遞方法需要建立和維護(hù)命令列表,命令傳遞的靈活性和效率較低。本發(fā)明所述的方法,發(fā)送端創(chuàng)建繼承于命令基類的命令并對(duì)命令參數(shù)進(jìn)行賦值,通過(guò)運(yùn)行時(shí)類型識(shí)別獲得命令實(shí)例名,發(fā)送端將命令實(shí)例名序列化成字符串,命令將命令參數(shù)序列化成字符串,將序列化后的字符串傳遞給接收端;接收端接收到發(fā)送端傳遞過(guò)來(lái)的字符串后,先解析命令實(shí)例名的字符串,動(dòng)態(tài)創(chuàng)建繼承于與發(fā)送端相同的命令基類的該命令實(shí)例名的命令,創(chuàng)建的命令再將命令參數(shù)字符串轉(zhuǎn)換為各個(gè)命令參數(shù)。采用本發(fā)明所述的方法,增強(qiáng)了命令傳遞的靈活性,提高了命令傳遞的效率。
文檔編號(hào)H04L12/56GK101686198SQ20081022366
公開日2010年3月31日 申請(qǐng)日期2008年9月28日 優(yōu)先權(quán)日2008年9月28日
發(fā)明者濤 李, 浩 龔 申請(qǐng)人:新奧特(北京)視頻技術(shù)有限公司