[asterisk-bugs] [JIRA] (ASTERISK-27959) [patch] Asterisk 15.4.1 h264 fmtp negotiation problem

David Kuehling (JIRA) noreply at issues.asterisk.org
Tue Jul 10 21:53:54 CDT 2018


     [ https://issues.asterisk.org/jira/browse/ASTERISK-27959?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

David Kuehling updated ASTERISK-27959:
--------------------------------------

    Attachment: profile-level.diff

single-line change that fixed the issue for me

> [patch] Asterisk 15.4.1 h264 fmtp negotiation problem
> -----------------------------------------------------
>
>                 Key: ASTERISK-27959
>                 URL: https://issues.asterisk.org/jira/browse/ASTERISK-27959
>             Project: Asterisk
>          Issue Type: Bug
>      Security Level: None
>          Components: Resources/res_format_attr_h264
>    Affects Versions: 15.4.1
>         Environment: Debian Stretch amd64
>            Reporter: David Kuehling
>              Labels: patch
>         Attachments: profile-level.diff
>
>
> Hi,
> I'm trying to have a bunch of GXV3240, GXV3275 and GXV3140 telephones perform video-telephony via Asterisk.  The Asterisk 13 that's shipping with Debian did have severe problems correctly handling h264 fmtp negotiation, so I am currently investigating how much the latest upstream Asterisk release improves on that.
> Asterisk 15.4.1 is much better, now passing fmtp headers between all those video phones in the SDP.  However, I think there is one problem with how the {{profile-level-id}} attribute is handled:
> Looking at the logs, I can see that my GXV3240 phone sends a fmtp header for video:
> {noformat}
>     a=fmtp:99 profile-level-id=4D0016; packetization-mode=1
> {noformat}
> When Asterisk now relays the request to the target of the call (a GXV3140), the profile-evel-id field gets dropped:
> {noformat}
>     a=fmtp:99 packetization-mode=1
> {noformat}
> Which is a problem for some of these phones, as it makes them revert to very basic video codec parameters (the GXV3240 seem to go down to transmit QCIF when called without profile-level-id).
> Looking at the source code, it is quite obvious what happens here:
> There is a check in res_format_attr_h264.c that only outputs {{profile-level-id}}, if all its components are non-zero.  Howver, note how the GXV3240 has a zero for PROFILE_IOP (the middle byte):
> {code:java}
>     if (attr->PROFILE_IDC && attr->PROFILE_IOP && attr->LEVEL) {
> {code}
> To my untrained eye it looks like this should read
> {code:java}
>     if (attr->PROFILE_IDC || attr->PROFILE_IOP || attr->LEVEL) {
> {code}
> And patching asterisk accordingly makes it correctly pass the {{profile-level-id}}.
> Other phones (like the GVX3140) do not transmit any zeros in {{profile-level-id}}, so are not affected by the problem.
> However, note that I don't know anything about how fmtp negotiation is defined in the standard, so maybe my naive interpretation misses something here.
> cheers,
> David
> PS: will attach patch below



--
This message was sent by Atlassian JIRA
(v6.2#6252)



More information about the asterisk-bugs mailing list