一揖闸、前言
????之前寫過一篇老樹開新花-通過Synergy100面板實(shí)現(xiàn)對BMD切換臺(tái)控制的文章揍堕,主要介紹的是如何通過Synergy100切換面板對BMD切換臺(tái)進(jìn)行控制的,當(dāng)時(shí)是剛接觸BMD ATEM系列的SDK開發(fā)汤纸,最終實(shí)現(xiàn)了對BMD ATEM切換臺(tái)PGM衩茸、PST、AUX三條母線的控制贮泞,應(yīng)用上有些粗淺递瑰。
????最近有機(jī)會(huì)做了一個(gè)BMD切換臺(tái)和GVG 4000互轉(zhuǎn)的項(xiàng)目祟牲,基本上把4級(jí)ME的切換臺(tái)功能都用上了,在此總結(jié)加深下印象抖部。
二说贝、BMD ATEM系列切換臺(tái)各功能實(shí)現(xiàn)方法
????此次項(xiàng)目中GVG 4000到ATEM協(xié)議的轉(zhuǎn)換,主要參照BMD ATEM系列切換臺(tái)開發(fā)的SDK文檔以及應(yīng)用案例慎颗,關(guān)于ATEM系列切換臺(tái)的API和接口原理乡恕,以及初期需要的環(huán)境配置,可參照我之前寫的那篇文章俯萎,以下為這次項(xiàng)目中新增的一些功能傲宜。
2.1、獲取切換臺(tái)每級(jí)ME的實(shí)例對象
????參考文檔內(nèi)接口IBMDSwitcherMixEffectBlockIterator夫啊,此接口通過IBMDSwitcher::CreateIterator返回對象函卒,接口中定義Next方法,用來枚舉每級(jí)ME的IBMDSwitcherMixEffectBlock接口對象撇眯,即對該ME操作的對象报嵌。具體代碼如下圖,此方法將每個(gè)IBMDSwitcherMixEffectBlock枚舉出來熊榛,返回一個(gè)枚舉對象锚国,需要使用IBMDSwitcherMixEffectBlock的時(shí)候,只需要按順序拿出玄坦,默認(rèn)排序從ME1~ME N血筑。
????當(dāng)獲取到具體IBMDSwitcherMixEffectBlock的對象后,可通過SetPreviewInput煎楣、SetProgramInput豺总、PerformAutoTransition等方法,對切換臺(tái)當(dāng)前ME進(jìn)行各項(xiàng)正常操作择懂,具體IBMDSwitcherMixEffectBlock接口下的方法有很多园欣,可參考文檔。
2.2休蟹、獲取切換臺(tái)所有AUX的實(shí)例對象
????參考文檔內(nèi)接口IBMDSwitcherInputIterator沸枯,此接口通過IBMDSwitcher::CreateIterator返回對象,接口中定義Next方法赂弓,用來返回各類IBMDSwitcherInput對象绑榴,我們從這些返回input對象中,篩選并轉(zhuǎn)換出AUX對象IBMDSwitcherInputAux盈魁,因此需要通過input對象的接口類型來判別翔怎,具體代碼如下,我把所有返回的AUX對象加入了List列表中。
????當(dāng)獲取到AUX對象IBMDSwitcherInputAux之后,可通過SetInputSource方法設(shè)置AUX母線交叉點(diǎn)赤套,詳細(xì)方法使用可參考文檔
2.3飘痛、獲取每級(jí)ME的上游鍵實(shí)例對象
????BMD ATEM系列切換臺(tái)每級(jí)ME帶4個(gè)上游鍵KEY,同時(shí)切換臺(tái)本身還帶2個(gè)下游鍵DSK容握,上游鍵和下游鍵的獲取方法類似宣脉,此次項(xiàng)目中,我只使用了上游鍵的獲取方法剔氏。
????參考文檔內(nèi)接口IBMDSwitcherKeyIterator塑猖,此接口通過IBMDSwitcherMixEffectBlock::CreateIterator返回對象,接口中定義Next方法谈跛,用來返回IBMDSwitcherKey對象羊苟,BMDSwitcherKey對象中,可通過setOnAir方法設(shè)置KEY鍵的上下感憾,也可通過getOnAir方法獲取目前KEY鍵的狀態(tài)蜡励,具體代碼如下,我使用了枚舉器將每級(jí)ME的KEY都放進(jìn)去阻桅,再供調(diào)用凉倚。
2.4、獲取宏命令控制對象
????BMD ATEM系列切換臺(tái)可在切換臺(tái)內(nèi)存取本地宏命令鳍刷,也可以供外部調(diào)用占遥。參考文檔內(nèi)IBMDSwitcher接口俯抖,宏命令控制接口對象IBMDSwitcherMacroControl可通過IBMDSwitcher轉(zhuǎn)換實(shí)現(xiàn)输瓜,它本身就是IBMDSwitcher接口的一個(gè)子接口。具體代碼如下圖芬萍,當(dāng)獲取到IBMDSwitcherMacroControl接口對象時(shí)尤揣,可通過Run方法運(yùn)行宏命令,也可通過Record方法記錄宏命柬祠,詳細(xì)方法很多北戏,可以參考文檔。
2.5漫蛔、設(shè)置每級(jí)ME的轉(zhuǎn)換方式
????ME級(jí)的轉(zhuǎn)換指的是Preview到Program的畫面轉(zhuǎn)換方式嗜愈,主要有WIPE、MIX莽龟、DVE三種蠕嫁,具體使用IBMDSwitcherTransitionParameters這個(gè)接口,此接口對象需要通過IBMDSwitcherMixEffectBlock實(shí)例對象進(jìn)行轉(zhuǎn)換毯盈,當(dāng)獲取到IBMDSwitcherTransitionParameters接口對象后剃毒,再通過SetNextTransitionStyle方法,設(shè)置需要轉(zhuǎn)換的方法,具體代碼如下赘阀,bmdSwitcherTransitionStyleMix益缠、bmdSwitcherTransitionStyleWipe等為固態(tài)參數(shù)。
2.6基公、設(shè)置每級(jí)ME內(nèi)轉(zhuǎn)換幀率
????ME內(nèi)的轉(zhuǎn)換幀率指的時(shí)Preview到Program的畫面轉(zhuǎn)換時(shí)間幅慌,以幀為精確度,WIPE和MIX模式下酌媒,有不同的轉(zhuǎn)換幀率設(shè)置方式欠痴,我們先需要通過IBMDSwitcherTransitionParameters獲取當(dāng)前ME級(jí)的轉(zhuǎn)換方式,再通過IBMDSwitcherTransitionMixParameters或者IBMDSwitcherTransitionWipeParameters設(shè)置對應(yīng)的轉(zhuǎn)換幀率秒咨。
? ??IBMDSwitcherTransitionParameters這個(gè)接口獲取方式上文講過喇辽,需要通過此接口下的GetNextTransitionStyle方法,獲取并判定當(dāng)前時(shí)MIX雨席、WIPE菩咨、DVE中的哪種;IBMDSwitcherTransitionMixParameters和IBMDSwitcherTransitionWipeParameters接口陡厘,需要通過IBMDSwitcherMixEffectBlock實(shí)例對象進(jìn)行轉(zhuǎn)換抽米,具體代碼如下圖,當(dāng)獲取到MIX或者WIPE接口后糙置,再通過SetRate方法云茸,設(shè)置幀率。
三谤饭、GVG 4000切換臺(tái)協(xié)議分析
3.1标捺、TCP端口轉(zhuǎn)虛擬串口
????GVG 4000主要是通過串口進(jìn)行控制,而BMD ATEM切換臺(tái)是通過TCP端口進(jìn)行控制揉抵,為了方便協(xié)議轉(zhuǎn)換上的對接亡容,我通過USR-VCOM這個(gè)軟件將TCP端口虛擬化為一個(gè)串口接入GVG 4000,具體方式如下圖冤今,TCP Server端端口20108闺兢,映射為虛擬串口COM1,GVG 4000連虛擬COM1端口以后戏罢,所有都會(huì)被20108這個(gè)TCP Server端口接收屋谭。
3.2、GVG 4000協(xié)議數(shù)據(jù)說明
????GVG 4000數(shù)據(jù)結(jié)構(gòu)跟GVG 100/200類似龟糕,之前有過之前Syner100的開發(fā)案例桐磁,分析起來很快,所有數(shù)據(jù)交互均以16進(jìn)制顯示。
握手方式:發(fā)送-30 02,返回-84 03 00 EC 01翩蘸。
ME1-ME4 PGM母線直切:發(fā)送-03 (00 01 02 03)C1 XX于樟,其中第二位數(shù)據(jù)從00~03分別代表ME1~ME4,第四位數(shù)據(jù)XX表示交叉點(diǎn)咒循。
ME1-ME4 PST母線直切:發(fā)送-03 (00 01 02 03)C2 XX,其中第二位數(shù)據(jù)從00~03分別代表ME1~ME4泄鹏,第四位數(shù)據(jù)XX表示交叉點(diǎn)。
設(shè)定Transform方式位MIX或者WIPE:發(fā)送-04 (00 01 02 03)C6 02 (06 08)秧耗,其中第二位數(shù)據(jù)從00~03分別代表ME1~ME4备籽,第五位數(shù)據(jù)06表示MIX方式,08表示W(wǎng)IPE方式分井。
設(shè)定ME級(jí)的幀率:發(fā)送-05 (00 01 02 03) CC 80 00 XX车猬,其中第二位數(shù)據(jù)從00~03分別代表ME1~ME4,第六位數(shù)據(jù)XX表示設(shè)置幀率的數(shù)值尺锚。
AUX母線交叉點(diǎn)設(shè)置:發(fā)送-03 (40 42 44 46 48 4A)C0 XX,其中第二位數(shù)據(jù)從40~4A分別代表AUX1~AUX6珠闰,依次類推,第四位數(shù)據(jù)XX表示AUX交叉點(diǎn)設(shè)置瘫辩。
下游鍵DSK上下鍵設(shè)置:發(fā)送-04 00 02 (23 25 27 29)伏嗜,其中第四位數(shù)據(jù)23~29分別代表DSK1~DSK4的上下鍵。類似于一個(gè)出發(fā)按鈕伐厌。
宏命令調(diào)用:發(fā)送-04 00 DB 00 XX承绸,其中第五位數(shù)據(jù)XX表示需要調(diào)取宏命令的號(hào)數(shù)。
四挣轨、總結(jié)
????BMD ATEM系列切換臺(tái)以其功能強(qiáng)大军熏,性價(jià)比高的特點(diǎn),目前在廣電卷扮、教育荡澎、影視上都有很多應(yīng)用,而且不管是最便宜的ATEM Mini,還是到ATEM 8K切換臺(tái)画饥,底層的SDK調(diào)用都是一樣的衔瓮,這種開放性也衍生出很多可行性浊猾,尤其是在集中控制抖甘,未來可以嘗試考慮構(gòu)建一個(gè)以BMD ATEM切換臺(tái)為核心的小型集控播出體系,筆者精力有限葫慎,只嘗試了SDK開發(fā)包中的一小部分功能衔彻,以后有機(jī)會(huì)再補(bǔ)充。