“TRANSFER.request”原語(yǔ)有四個(gè)字段,用ASN.1格式填充。這四個(gè)字段是PROTOID、MUXCAP、CAPTABLE 和 CAPDESCRIPTORS。在此,我們集中討論CAPTABLE參數,它是特定終端支持的所有編解碼器的列表。在此例中,填充的CAPTABLE參數表示以下終端能力:?jiǎn)我籊.711 A律64k編解碼器,能夠接收的分組長(cháng)達180ms音頻數據。下面的偽碼是初始化一個(gè)ASN.1結構元素的基本步驟。
CAPTABLE參數實(shí)際上是CapabilityTableEntry的數組。填充該參數的第一步是為該數組分配內存空間。每個(gè)被支持的編解碼器都需要一個(gè)CapabilityTableEntry。在本例中,數組只有一個(gè)元素,因為只支持G.711編解碼器。每個(gè)CapabilityTableEntry有兩個(gè)元素:TableEntryNumber字段和可選的能力信息結構。
CAPTABLE[0].Capability.TableEntryNumber = 1 (1)
在行1的語(yǔ)句中,CapabilityTableEntryNumber任意設置,但是在同一消息中取值要不同。該參數由CAPDESCRIPTORS參數使用,以描述編解碼器之間的依賴(lài)關(guān)系。CAPDESCRIPTORS結構要復雜得多,不在本文討論范圍內。
能力信息結構描述了至少12種基本能力/業(yè)務(wù)中的一種。該結構是可選的,但是不選用的情況不多。在特定的應用方式下,ReceiveAudioCapability被選用。像ReceiveAudioCapability的AudioCapability結構包含14多種不同的編解碼器中的一種。用戶(hù)必須選用其中一種編解碼器。一旦選用了某特定的編解碼器,相關(guān)字段必須定義。在g711Alaw64k情況下,只需要一個(gè)字段。第二行語(yǔ)句表示編解碼器驅動(dòng)器能夠處理的分組大小至多180ms。
CAPTABLE[0].capability.receiveAudioCapability.g711Alaw64k = 180 (2)
值得注意的是,這個(gè)簡(jiǎn)單例子在一個(gè)參數中只定義了一個(gè)編解碼器。其它原語(yǔ)和參數如CAPDESCRIPTORS要復雜得多。處理這種原語(yǔ)的過(guò)程枯燥、耗時(shí)且會(huì )給項目造成不必要的困難。
如果采用替代方案,開(kāi)發(fā)者使用簡(jiǎn)單的API協(xié)議棧,則不需要關(guān)心這些細節。只要給出用ASN.1正確描述的編解碼器驅動(dòng)器,一個(gè)在用戶(hù)層的簡(jiǎn)單的函數調用就能處理所有這些細節:
獨立進(jìn)行簡(jiǎn)單API協(xié)議棧研究和開(kāi)發(fā),只需投入數百個(gè)工時(shí)去解決有關(guān)ASN.1的問(wèn)題就可以了。在應用層,僅僅RegisterCodec()函數就可以為開(kāi)發(fā)者節省相當多的時(shí)間。當成本和上市時(shí)間最重要時(shí),該協(xié)議棧的簡(jiǎn)單性具有不可估量的價(jià)值。
作者簡(jiǎn)介:
Brian Krejcarek是US Software公司開(kāi)發(fā)嵌入式H.323協(xié)議棧的主要開(kāi)發(fā)人員。他擁有Illinois大學(xué)BSEE學(xué)位,可以通過(guò)briank@ussw.com與他聯(lián)系。
Jonathan Shaw也是US Software公司開(kāi)發(fā)H.323協(xié)議棧的主要開(kāi)發(fā)人員,他擁有George Fox大學(xué)應用科學(xué)學(xué)士學(xué)位以及Seattle Pacific大學(xué)BSEE學(xué)位,可以通過(guò)jonathan@ussw.com與他聯(lián)系。