SIP-H.323 IWF Support for H.264 and H.263+
Signaling protocol interworking between SIP and H.323 supports the H.264 and H.263+ video codecs.
H.264 in H.323 (H.241)
This section describes the H.264 capabilities and media packetization in H.323. Capability exchange signaling looks like this:
openLogicalChannel . SEQUENCE [EMPTY -1] ...
forwardLogicalChannelNumber = 3 . INTEGER [EMPTY -1] (1..65535)
forwardLogicalChannelParameters . SEQUENCE [EMPTY -1] ...
.. dataType . CHOICE [EMPTY -1] ...
. . . . . videoData . CHOICE [EMPTY -1] ...
. . . . . . genericVideoCapability . SEQUENCE [EMPTY -1] ...
. . . . . . . capabilityIdentifier . CHOICE [EMPTY -1] ...
. . . . . . . . standard = 7 {itu-t recommendation h 241 0 0 1}.OBJECT IDENTIFIER [EMPTY-1]
. . . . . . . maxBitRate = 4480 . INTEGER [EMPTY -1] (0..-1)
. . . . . . . collapsing . SEQUENCE OF [EMPTY -1] SEQUENCE [EMPTY -1] ...
. . . . . . . . * . SEQUENCE [EMPTY -1] ...
. . . . . . . . . parameterIdentifier . CHOICE [EMPTY -1] ...
. . . . . . . . . . standard = 41 . INTEGER [EMPTY -1] (0..127)
. . . . . . . . . parameterValue . CHOICE [EMPTY -1] ...
. . . . . . . . . . booleanArray = 64 . INTEGER [EMPTY -1] (0..255)
. . . . . . . . * . SEQUENCE [EMPTY -1] ...
. . . . . . . . . parameterIdentifier . CHOICE [EMPTY -1] ...
. . . . . . . . . . standard = 42 . INTEGER [EMPTY -1] (0..127)
. . . . . . . . . parameterValue . CHOICE [EMPTY -1] ...
. . . . . . . . . . unsignedMin = 29 . INTEGER [EMPTY -1] (0..65535)
. . . . . . . . * . SEQUENCE [EMPTY -1] ...
. . . . . . . . . parameterIdentifier . CHOICE [EMPTY -1] ...
. . . . . . . . . . standard = 3 . INTEGER [EMPTY -1] (0..127)
. . . . . . . . . parameterValue . CHOICE [EMPTY -1] ...
. . . . . . . . . . unsignedMin = 81 . INTEGER [EMPTY -1] (0..65535)
. . . . . . . . * . SEQUENCE [EMPTY -1] ...
. . . . . . . . . parameterIdentifier . CHOICE [EMPTY -1] ...
. . . . . . . . . . standard = 6 . INTEGER [EMPTY -1] (0..127)
. . . . . . . . . parameterValue . CHOICE [EMPTY -1] ...
. . . . . . . . . . unsignedMin = 15 . INTEGER [EMPTY -1] (0..65535)
. . . . . . . . * . SEQUENCE [EMPTY -1] ...
. . . . . . . . . parameterIdentifier . CHOICE [EMPTY -1] ...
. . . . . . . . . . standard = 4 . INTEGER [EMPTY -1] (0..127)
. . . . . . . . . parameterValue . CHOICE [EMPTY -1] ...
. . . . . . . . . . unsignedMin = 7 . INTEGER [EMPTY -1] (0..65535)
. . . . multiplexParameters . CHOICE [EMPTY -1] ...
. . . . . h2250LogicalChannelParameters . SEQUENCE [EMPTY -1] ...
. . . . . . sessionID = 2 . INTEGER [EMPTY -1] (0..255)
. . . . . . mediaControlChannel . CHOICE [EMPTY -1] ...
. . . . . . . unicastAddress . CHOICE [EMPTY -1] ...
. . . . . . . . iPAddress . SEQUENCE [EMPTY -1] ...
. . . . . . . . . network = 4 '.e.' =0xac10650b <172.16.101.11> .OCTET STRING [EMPTY -1]
. . . . . . . . . tsapIdentifier = 50137 . INTEGER [EMPTY -1] (0..65535)
. . . . . . dynamicRTPPayloadType = 109 . INTEGER [EMPTY -1] (96..127)
. . . . . . mediaPacketization . CHOICE [EMPTY -1] ...
. . . . . . . rtpPayloadType . SEQUENCE [EMPTY -1] ...
. . . . . . . . payloadDescriptor . CHOICE [EMPTY -1] ...
. . . . . . . . . oid = 8 {itu-t recommendation h 241 0 0 0 0}.OBJECT IDENTIFIER [EMPTY -1]
. . . . . . . . payloadType = 109 . INTEGER [EMPTY -1] (0..127)
This table outlines H.241 to H.264 mappings.
Identifier | Description |
---|---|
Capability name | ITU-T Rec H.241 H.264 Video Capabilities |
Capability identifier type | Standard |
Capability identifier value | {itu-t(0) recommendation(0) h(8) 241
specificVideoCodecCapabilities(0)
h264(0) generic-capabilities(1)} |
maxBitRate | This field shall be included, in units of 100 bit/s. This field represents the maximum bitrate of the H.264 Type II bitstream as defined in Annex C/H.264. |
collapsing | This field shall contain the H.264 Capability Parameters as given below. |
Capabilities
The H.264 capability set is structured as a list of one or more H.264 capabilities, each of which has:
- Profile (mandatory)
- Level (mandatory)
- Zero or more additional parameters
These capabilities communicate the ability to decode using one or more H.264 profiles contained in a GenericCapability structure. For each H.264 capability, optional parameters can appear. These parameters permits a terminal to communicate that it has capabilities in addition to meeting the support requirements for the signaled profile and level.
Optional parameters include: CustomMaxMBPS, CustomMaxDPB, CustomMaxBRandCPB, MaxStaticMBPS, max-rcmd-unit-size, max-nal-unit-size, SampleAspectRatiosSupported, AdditionalModesSupported, and AdditionalDisplayCapabilities.
H.264 Media Packetization
For H.323, systems signal their H.264 mediaPacketization by including: MediaPacketizationCapability.rtpPayload.Type.payloadDescriptor.oid, with the OID having the value {itu-t(0) recommendation(0) h(8) 241 specificVideoCodecCapabilities(0) h264(0) iPpacketization(0) h241AnnexA(0)}.
In compliance with RFC 3984’s non-interleaved mode, the following is supported: MediaPacketizationCapability.rtpPayloadType.payloadDescriptor.oid, with the OID having the value {itu-t(0) recommendation(0) h(8) 241 specificVideoCodecCapabilities(0) h264(0) iPpacketization(0) RFC3984NonInterleaved(1)}.
In compliance with RFC 3984’s interleaved mode, the following is supported: MediaPacketizationCapability.rtpPayloadType.payloadDescriptor.oid, with the OID having the value {itu-t(0) recommendation(0) h(8) 241 specificVideoCodecCapabilities(0) h264(0)iPpacketization(0) RFC3984Interleaved(2)}.
H.264 in SIP
H.264 in SIP can contain these optional parameters, which be included in the "a=fmtp" line of SDP if they appear: profile-level-id, max-mbps, max-fs, max-cpb, max-dpb, maxbr, redundant-pic-cap, sprop-parameter-sets, parameter-add, packetization-mode, spropinterleaving-depth, deint-buf-cap, sprop-deint-buf-req, sprop-init-buf-time, sprop-max-dondiff, and max-rcmd-nalu- size.
The profile-level-id parameter is a base 16[6] hexidecimal representation of the following three bytes in sequence:
- profile_idc
- profile_oip—Composed of the values from constraint_set0_flag, constraint_set1_flag, constraint_set2_flag, and reserved_zero_5bits—in order of bit significance, starting from the most significant bit.
- level_idc—Note that reserved_zero_5bits is required to be equal to 0 in [1], but other values for it may be specified in the future by ITU-T or ISO/IEC.
H.264 Packetization Mode
In SIP, the packetization-mode parameter signals the properties of the RTP payload type or the capabilities of a receiver’s implementation. Only a single configuration point can be indicated. So when capabilities support more than one packetization-mode are declared, multiple configuration points (RTP payload types) must be used.
- When the value of packetization-mode equals 0 or packetization-mode is not present, the single NAL mode is used.
- When the value of packetization-mode equals 1, the non- interleaved mode is used.
- When the value of packetization-mode equals 2, the interleaved mode is used.
This example shows a SIP offer-answer exchange. Here is the offer SDP:
m=video 49170 RTP/AVP 100 99 98
a=rtpmap:98 H264/90000
a=fmtp:98 profile-level-id=42A01E; packetization-mode=0;
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=42A01E; packetization-mode=1;
a=rtpmap:100 H264/90000
a=fmtp:100 profile-level-id=42A01E; packetization-mode=2;
And here is the answer SDP for the example:
m=video 49170 RTP/AVP 100 99 97
a=rtpmap:97 H264/90000
a=fmtp:97 profile-level-id=42A01E; packetization-mode=0;
a=rtpmap:99 H264/90000
a=fmtp:99 profile-level-id=42A01E; packetization-mode=1;
a=rtpmap:100 H264/90000
a=fmtp:100 profile-level-id=42A01E; packetization-mode=2;
H.264 IWF Conversions
This section contains two table that show profile, level, and media packetization conversions for H.264 undergoing interworking.
Profile | H.264 in SIP | H.264 (H.241 in H.323) |
---|---|---|
H264_PROFILE_STR_BASELINE | 66 | 64 |
H264_PROFILE_STR_MAIN | 77 | 32 |
H264_PROFILE_STR_EXTENDED | 88 | 32 |
H.264 Level | H.2264 in SIP | H.264 (H.241 in H.323) | Constraints |
---|---|---|---|
1 | 10 | 15 | 0x00 |
1b | 11 | 19 | 0x10 |
1.1 | 11 | 22 | 0x00 |
1.2 | 12 | 29 | 0x00 |
1.3 | 13 | 36 | 0x00 |
2 | 20 | 43 | 0x00 |
2.1 | 21 | 50 | 0x00 |
2.2 | 22 | 57 | 0x00 |
3 | 30 | 64 | 0x00 |
3.1 | 31 | 71 | 0x00 |
3.2 | 32 | 78 | 0x00 |
4 | 40 | 85 | 0x00 |
4.1 | 41 | 92 | 0x00 |
4.2 | 42 | 99 | 0x00 |
5 | 50 | 106 | 0x00 |
5.1 | 51 | 113 | 0x00 |
H.264 SIP Packetization | H.264 (H.241 in H.323) OID in mediaPacketization |
---|---|
packetization-mode=0 | {itu-t(0) recommendation(0) h(8) 241
specificVideoCodecCapabilities(0) h264(0)
iPpacketization(0) h241AnnexA(0)} |
packetization-mode=1 | {itu-t(0) recommendation(0) h(8) 241
specificVideoCodecCapabilities(0) h264(0)
iPpacketization(0) RFC3984NonInterleaved(1)} |
packetization-mode=2 | {itu-t(0) recommendation(0) h(8) 241
specificVideoCodecCapabilities(0) h264(0)
iPpacketization(0) RFC3984Interleaved(2)} |
IWF Unsupported Parameters
The following H.241 parameters are not supported for interworking: CustomMaxMBPS, CustomMaxFS CustomMaxDPB, CustomMaxBRandCPB, MaxStaticMBPS, max-rcmd-nal-unit-size, max-nal-unit-size, SampleAspectRatiosSupported, AdditionalModesSupported, and AdditionalDisplayCapabilities.
The following SDP parameters are not supported for interworking: max-mbps, max-fs, max-cpb, max-dpb, maxbr, redundant-pic-cap, sprop-parameter-sets, parameter-add, spropinterleaving-depth, deint-buf-cap, sprop-deint-buf-req, sprop-init-buf-time, sprop-max-dondiff, and max-rcmd-nalu-size.
H.263+ in H.323
This section describes the H.264 capabilities and media packetization in H.323. Capability exchange signaling looks like this:
. . . . . capability . CHOICE [EMPTY -1] ...
. . . . . . receiveVideoCapability . CHOICE [EMPTY -1] ...
. . . . . . . h263VideoCapability . SEQUENCE [EMPTY -1] ...
. . . . . . . . sqcifMPI = 1 . INTEGER [EMPTY -1] (1..32)
. . . . . . . . qcifMPI = 1 . INTEGER [EMPTY -1] (1..32)
. . . . . . . . cifMPI = 1 . INTEGER [EMPTY -1] (1..32)
. . . . . . . . maxBitRate = 1000 . INTEGER [EMPTY -1] (1..192400)
. . . . . . . . unrestrictedVector = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . arithmeticCoding = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . advancedPrediction = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . pbFrames = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . temporalSpatialTradeOffCapability = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . errorCompensation = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . h263Options . SEQUENCE [EMPTY -1] ...
. . . . . . . . . advancedIntraCodingMode = 1 . BOOLEAN [EMPTY -1]
. . . . . . . . . deblockingFilterMode = 1 . BOOLEAN [EMPTY -1]
. . . . . . . . . improvedPBFramesMode = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . unlimitedMotionVectors = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . fullPictureFreeze = 1 . BOOLEAN [EMPTY -1]
. . . . . . . . . partialPictureFreezeAndRelease = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . resizingPartPicFreezeAndRelease = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . fullPictureSnapshot = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . partialPictureSnapshot = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . videoSegmentTagging = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . progressiveRefinement = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . dynamicPictureResizingByFour = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . dynamicPictureResizingSixteenthPel = 1 . BOOLEAN [EMPTY -1]
. . . . . . . . . dynamicWarpingHalfPel = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . dynamicWarpingSixteenthPel = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . independentSegmentDecoding = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . slicesInOrder-NonRect = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . slicesInOrder-Rect = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . slicesNoOrder-NonRect = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . slicesNoOrder-Rect = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . alternateInterVLCMode = 1 . BOOLEAN [EMPTY -1]
. . . . . . . . . modifiedQuantizationMode = 1 . BOOLEAN [EMPTY -1]
. . . . . . . . . reducedResolutionUpdate = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . separateVideoBackChannel = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . videoBadMBsCap = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . h263Version3Options . SEQUENCE [EMPTY -1] ...
. . . . . . . . . . dataPartitionedSlices = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . . fixedPointIDCT0 = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . . interlacedFields = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . . currentPictureHeaderRepetition = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . . previousPictureHeaderRepetition = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . . nextPictureHeaderRepetition = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . . pictureNumber = 0 . BOOLEAN [EMPTY -1]
. . . . . . . . . . spareReferencePictures = 0 . BOOLEAN [EMPTY -1]
H.263+ in SIP
H.263+ in SIP appears looks like this:
a=rtpmap:100 H263-1998/90000
a=fmtp:100 CIF=1; QCIF=1; SQCIF=1; D=1; F=1; I=1; J=1; L=1; S=1; T=1
a=rtpmap:34 H263/90000
a=fmtp:34 CIF=1; QCIF=1; SQCIF=1
H.263+ IWF Conversions
This section contains a table showing H.263+ conversions for SIP-h.323 interworking.
H.263+ in H.323 Parameters (Annex) in ftmp line | H.263+ in SIP |
---|---|
sqcifMPI | SQCIF |
qcifMPI | QCIF |
cifMPI |
|
maxBitRate | N/A |
unrestrictedVector | D |
arithmeticCoding | E |
advancedPrediction | F |
pbFrames | G |
temporalSpatialTradeOffCapability | N/A |
errorCompensation | H |
h263Options | N/A |
advancedIntraCodingMode | I |
deblockingFilterMode | J |
improvedPBFramesMode | N/A |
unlimitedMotionVectors | N/A |
fullPictureFreeze | L |
partialPictureFreezeAndRelease | N/A |
resizingPartPicFreezeAndRelease | N/A |
fullPictureSnapshot | N/A |
partialPictureSnapshot | N/A |
videoSegmentTagging | N/A |
progressiveRefinement | N/A |
dynamicPictureResizingByFour | P = 1 |
dynamicPictureResizingSixteenthPel | P = 2 |
dynamicWarpingHalfPel | P = 3 |
DynamicWarpingSixteenthPel | P = 4 |
independentSegmentDecoding | R |
slicesInOrder-NonRect | K = 1 |
slicesInOrder-Rect | K = 2 |
slicesNoOrder-NonRect | K = 3 |
slicesNoOrder-Rect | K = 4 |
alternateInterVLCMode | S |
modifiedQuantizationMode | T |
reducedResolutionUpdate | Q |
separateVideoBackChannel | N/A |
videoBadMBsCap |
|
h263Version3Options | N/A |