[h323plus] Issue with H.263 codecs set

Iurii Gordiienko hordi at ukr.net
Mon Feb 1 13:46:37 EST 2016


Hi, 
>Also, I'm not really sure this is the issue Iurii was referring to.
>Maybe you can explaina bit more what your issue was, Iurii ? H323Connection objects operates remoteCapabilities and localCapabilities objects. Both these objects have information about capabilities for local and remote sides. We able to set up the localCapabilities as  we want, but it is not simple to have an influence on remoteCapabilities object. H323Connection::OnReceivedCapabilitySet 
Take a look a way to set up the  remoteCapabilities object... H245NegTerminalCapabilitySet::HandleIncoming(const H245_TerminalCapabilitySet & pdu) function constructs local H323Capabilities object: 
H323Capabilities remoteCapabilities(connection, pdu); 
This H323Capabilities constructor will search any similar Capability from the localCapabilities object, and will append to own "table" object if similar capability was found. Basicaly, that search-algorithm uses two virtual functions  H323::Capability::GetMainType() and H323::Capability::GetSubType(), may be something else, but no any virtual ::IsMatch() or ::Compare() Because all (versions: 1996, 1998, 2000) H.263 codecs have the same H323::Capability::GetSubType() - that function constructs (by clone-function) H263 capability from any first (but not the right) H.263 capability from the localCapabilities set. 
For example, remote side sends us the list of own capabilities. That list has two capabilities: H.263 and H.263-2000 (in this strong order) From our local side, we have own list (localCapabilities): H.263-1998, H.263, H.263-2000 (in this strong order) In result we will set up the remoteCapabilities.table: H.263, H.263. 
Now, to fix that issue I overrides H323Connection::OnReceivedCapabilitySet(const H245_TerminalCapabilitySet& pdu) function, store H.263 caps locally, and replace all these capabilities by proper values from the H323Connection::OnReceivedCapabilitySet(const H323Capabilities & remoteCaps, const H245_MultiplexCapability * muxCap, H245_TerminalCapabilitySetReject & reject) function. It works but looks not very well. Also, some voip applications (like Polycom RDP) send not correct H.263 capability data, for example H.263-1998 capability has H.263-1996 OID but has V3Options section too - for this case it is impossible to override and use H323Capability:: OnReceivedPDU(const H245_VideoCapability& cap) function to check (and update itself by *this=right_h263_capability) which H263 we really must have (because  H245_VideoCapability has no any info about RFC - that info has MultiplexCapability section ). 
Thanks -- Iurii Gordiienko 
 --- Original message --- 
 From: "Jan Willamowius" <jan at willamowius.de> 
  Date: 1 February 2016, 00:22:12 
 

  Hi,

I looked at this patch and the code for FindCapability() in the
OpenMCU-ru fork looks very different from the H323Plus CVS. No way we
can simply use that one-line patch.

Also, I'm not really sure this is the issue Iurii was referring to.
Maybe you can explaina bit more what your issue was, Iurii ?

Regards,
Jan

-- 
Jan Willamowius, Founder of the GNU Gatekeeper Project
EMail  : jan at willamowius.de 
Website: http://www.gnugk.org 
Support: http://www.willamowius.com/gnugk-support.html 

Relaxed Communications GmbH
Frahmredder 91
22393 Hamburg
Geschäftsführer: Jan Willamowius
HRB 125261 (Amtsgericht Hamburg)
USt-IdNr: DE286003584

Konstantin wrote:
> Hi Jan,
> I confirm, we have trouble with differentiating these codecs in openmcu, Andrey (xak) described it when tried to get worked new version of h323plus, his Russian notice: http://openmcu.ru/forum/index.php/topic,714.msg13067.html#msg13067 
> Fix he talk about: https://github.com/muggot/openmcu/commit/8002f803c128c1cbed1b3fd7878aa50f37e11aac 
> Regards,
> Konstantin Yeliseyev, kay27 at bk.ru 
> http://openmcu.ru/ 
> --
> Sent from Mail.Ru app for Android Friday, 22 January 2016, 10:52PM +04:00 from Jan Willamowius < jan at willamowius.de > :
> 
> >Hi Iurii,
> >
> >this is not really my field of expetise, but are you trying to use
> >multiple H.263 plugins at the same time ?
> >
> >I don't think that was ever intended. Pick the one that works best
> >for you and only use that one.
> >
> >Regards,
> >Jan
> >
> >-- 
> >Jan Willamowius, Founder of the GNU Gatekeeper Project
> >EMail  :  jan at willamowius.de 
> >Website:  http://www.gnugk.org 
> >Support:  http://www.willamowius.com/gnugk-support.html 
> >
> >Relaxed Communications GmbH
> >Frahmredder 91
> >22393 Hamburg
> >Geschäftsführer: Jan Willamowius
> >HRB 125261 (Amtsgericht Hamburg)
> >USt-IdNr: DE286003584
> >
> >Iurii Gordiienko wrote:
> >> Hi all, 
> >> I need an advice - how to work with set of H.263 codecs. Basically, I have all H.263 codec types capability implemented: H.263, H.263-1998 and H.263-2000. All these capabilities uses same H245_VideoCapability::e_h263VideoCapability value for GetSubType function. In result my localCapabilities variable has all these 3 capabilities as well. 
> >> When I receiving remote capabilities the remoteCapabilities variable is loading by H323Capabilities::H323Capabilities(const H323Connection & connection, const H245_TerminalCapabilitySet & pdu) constructor and the function uses code like this (simplified): 
> >> H323Capability * capability = localCapabilities.FindCapability(pdu.m_capabilityTable[i].m_capability, capabilityNo, pdu); if (capability != NULL)  {           H323Capability * copy = (H323Capability *)capability->Clone();           copy->SetCapabilityNumber(capabilityNo);           if (copy->OnReceivedPDU(pdu.m_capabilityTable[i].m_capability))             table.Append(copy);           else             delete copy; } 
> >> The main issue -  localCapabilities.FindCapability function returns any first H.263 Capability from it's table, no matter which particular H.263 remote Capability was used, it only checks MainType and SubType... In result if remote side send me, for example, H.263-1998, but I have H.263 and H.263-1998 - I will have H.263 in result...  
> >> Now I'm trying to override Connection::OnReceivedCapabilitySet(const H245_TerminalCapabilitySet & pdu) function, extract H.263 codecs manually, store all these capabilities and update remoteCapabilities after, but may be exists a proper solution for this case? 
> >> 
> >> Thanks -- Iurii Gordiienko 
> >
> >


 
    
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.packetizer.com/pipermail/h323plus/attachments/20160201/6320ebb9/attachment-0002.html>


More information about the h323plus mailing list