[H.323] TCS negotiation rule of HUAWEI 2

Encountered a capability negotiation issue when conferencing with a HUAWEI terminal.

It happened in a dual stream(H.239) capability negotiation.

1. According to the H.245 TCS, both terminal have 1080P 60 fps capability.
2. The band width setting was extreme low.
3. HUAWEI sent a OLC request with 4CIF H.264 video.

Seems weird.

After did some check, and ran more tests with different parameters and scenarios, turned out the capability in HUAWEI’s OLC can be
right (which is relative now) if we simply increase the bandwith/bitrate of the meeting.

So it’s clear enough now.
HUAWEI implemented a more complex terminal capability comparison/negotiation mechanism than us.

We’d only checked with H.264’s parameters like Level MaxMBPS MaxFS, in calculating the capability. Complete ignored the bit rate parameter which suppose to be a decisive factor of conferencing.

So, apparently, HUAWEI took a good move, we should follow it.

Leave a comment

Your email address will not be published. Required fields are marked *

2 thoughts on “[H.323] TCS negotiation rule of HUAWEI

  • Regan

    我现在遇到一个问题,和华为视频终端(VP9039A)通过H323协商的时候,想协商1080P30,结果华为发给我的是1080P10,如果我把华为视频格式修改为Auto,就和华为协商成704*400 30帧;感觉很奇怪。
    struct PluginCodec_H323GenericParameterDefinition H2641080P_h323params[] =
    {{1,0,0,0,0},41, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_BooleanArray,{64}},
    {{1,0,0,0,0},42, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {85}},
    {{1,0,0,0,0},3, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {492}},
    {{1,0,0,0,0},4, PluginCodec_H323GenericParameterDefinition::PluginCodec_GenericParameter_unsignedMin, {32}},

    struct PluginCodec_H323GenericCodecData H2641080P_h323GenericData[] = {
    {OpalPluginCodec_Identifer_H264_Generic, 7680, 4, H2641080P_h323params}

    struct PluginCodec_Definition h264encInfo
    /* encoder */
    PLUGIN_CODEC_VERSION_OPTIONS, /* codec API version */
    &licenseInfo, /* license information */
    H2641080P_VideoType | /* video type */
    PluginCodec_OutputTypeRTP | /* specified RTP type */
    PluginCodec_InputTypeRTP |
    PluginCodec_RTPTypeExplicit |
    PluginCodec_RTPTypeShared, /* specified RTP type */
    H2641080P_Desc, /* text decription */
    YUV420PDesc, /* source format */
    H2641080P_MediaFmt, /* destination format */
    H2641080P_OptionTable, /* user data */
    90000, /* samples per second */
    7680*1000, /* raw bits per second */
    30000, /* nanoseconds per frame */
    {{ H2641080P_FrameWidth, /* samples per frame */
    H2641080P_FrameHeight, /* bytes per frame */
    30, /* recommended number of frames per packet */
    60, }}, /* maximum number of frames per packet */
    96,//RTP_DataFrame::DynamicBase, /* IANA RTP payload code */
    sdpH264, /* RTP payload name */
    NULL, /* create codec function */
    NULL, /* destroy codec */
    NULL, /* encode/decode */
    EncoderControls, /* codec controls */
    PluginCodec_H323Codec_generic, /* h323CapabilityType */
    (struct PluginCodec_H323GenericCodecData *)&H2641080P_h323GenericData/* h323CapabilityData */


  • Jacky Wei Post author

    Seems you are using OpenH323plus as your H.323 stack including the TCS parse and negotiation processes.
    The major difference between your capability and HUAWEI’s capability is the CustomMaxMBPS. Yous 492, while HUAWEI’s 491, but in fact both are support 1080P 30 fps.
    Actually, the capability HUAWEI sent to you in OLC request IS 1080P 30 fps rather than 1080P 10 fps.

    The root cause of this issue was due to the understanding of H.264 level limits, you can refer to ITU-T Rec. H.264 (03/2005) for details about the H.264 capability calculation.

    And here is a simple tool I wrote used to caculate the H.264 capabilities: http://rg4.net/p/easyh323/H264CapabilityCalc.7z