Codec variants in SDP

Calling station provides 8 video codecs variants in rtpmap, 4 of these is one allowed codec - H264. But asterisk rewrites SDP and have only one variant in outgoing offer.

Client sends

....
m=video 39617 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 35 36 120 119 124
c=IN IP4 95.29.193.106
a=rtpmap:96 VP8/90000
a=rtpmap:97 rtx/90000
a=rtpmap:98 VP9/90000
a=rtpmap:99 rtx/90000
a=rtpmap:100 VP9/90000
a=rtpmap:101 rtx/90000
a=rtpmap:102 H264/90000
a=rtpmap:122 rtx/90000
a=rtpmap:127 H264/90000
a=rtpmap:121 rtx/90000
a=rtpmap:125 H264/90000
a=rtpmap:107 rtx/90000
a=rtpmap:108 H264/90000
a=rtpmap:109 rtx/90000
a=rtpmap:35 AV1/90000
a=rtpmap:36 rtx/90000
a=rtpmap:120 red/90000
a=rtpmap:119 rtx/90000
a=rtpmap:124 ulpfec/90000
a=fmtp:97 apt=96
a=fmtp:98 profile-id=0
a=fmtp:99 apt=98
a=fmtp:100 profile-id=2
a=fmtp:101 apt=100
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=fmtp:122 apt=102
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=fmtp:121 apt=127
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=fmtp:107 apt=125
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=fmtp:109 apt=108
a=fmtp:36 apt=35
a=fmtp:119 apt=120
a=rtcp:9 IN IP4 0.0.0.0
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-c

Asterisk rewrite it as

m=video 19886 UDP/TLS/RTP/SAVPF 99
a=connection:new
a=setup:actpass
a=fingerprint:SHA-256 A5:6D:49:B2:B4:C6:B1:35:BD:7E:81:08:4A:0F:16:68:B1:AB:02:10:B5:E8:75:4C:8B:E2:97:6A:21:E9:F5:ED
a=ice-ufrag:04b8d0860b0abcb130a16ce30bba4a17
a=ice-pwd:39e7c82d6c00c6032a02834467853f46
a=rtpmap:99 H264/90000
a=fmtp:99 packetization-mode=1;level-asymmetry-allowed=1;profile-level-id=42001F
a=sendrecv
a=rtcp-mux
a=ssrc:1574497547 cname:ac6f29f3-12df-4822-8892-51fd4cf8022e
a=msid:35743a7f-b0b7-41c3-86cc-96d8f3f6919f 93d3d702-0c8f-4465-a2ff-21a172ee2184
a=rtcp-fb:* transport-cc
a=rtcp-fb:* ccm fir
a=rtcp-fb:* goog-remb
a=rtcp-fb:* nack
a=extmap:1 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=mid:video-1

Called client want profile-level-id=42e01f and not support profile-level-id=42001f

Current endpoint configuration is

 ParameterName                      : ParameterValue
 ========================================================================================================
 100rel                             : yes
 accept_multiple_sdp_answers        : false
 accountcode                        : 
 acl                                : 
 aggregate_mwi                      : true
 allow                              : (h264|alaw)
 allow_overlap                      : true
 allow_subscribe                    : true
 allow_transfer                     : true
 allow_unauthenticated_options      : false
 aors                               : 385991
 asymmetric_rtp_codec               : true
 auth                               : 385991
 bind_rtp_to_media_address          : false
 bundle                             : true
 call_group                         : 
 callerid                           : <unknown>
 callerid_privacy                   : allowed_not_screened
 callerid_tag                       : 
 codec_prefs_incoming_answer        : prefer:pending, operation:intersect, keep:all, transcode:allow
 codec_prefs_incoming_offer         : prefer:configured, operation:intersect, keep:all, transcode:prevent
 codec_prefs_outgoing_answer        : prefer:pending, operation:intersect, keep:all, transcode:allow
 codec_prefs_outgoing_offer         : prefer:configured, operation:union, keep:all, transcode:prevent
 connected_line_method              : invite
 contact_acl                        : 
 context                            : intercom
 cos_audio                          : 0
 cos_video                          : 0
 device_state_busy_at               : 0
 direct_media                       : false
 direct_media_glare_mitigation      : none
 direct_media_method                : invite
 disable_direct_media_on_nat        : true
 dtls_auto_generate_cert            : Yes
 dtls_ca_file                       : 
 dtls_ca_path                       : 
 dtls_cert_file                     : 
 dtls_cipher                        : 
 dtls_fingerprint                   : SHA-256
 dtls_private_key                   : 
 dtls_rekey                         : 0
 dtls_setup                         : actpass
 dtls_verify                        : Yes
 dtmf_mode                          : rfc4733
 fax_detect                         : false
 fax_detect_timeout                 : 0
 follow_early_media_fork            : true
 force_avp                          : false
 force_rport                        : true
 from_domain                        : ds.domofon-sip.ru
 from_user                          : 
 g726_non_standard                  : false
 ice_support                        : true
 identify_by                        : username,auth_username
 ignore_183_without_sdp             : false
 inband_progress                    : false
 incoming_call_offer_pref           : local
 incoming_mwi_mailbox               : 
 language                           : ru
 mailboxes                          : 
 max_audio_streams                  : 1
 max_video_streams                  : 10
 media_address                      : 
 media_encryption                   : dtls
 media_encryption_optimistic        : false
 media_use_received_transport       : true
 message_context                    : messages
 moh_passthrough                    : false
 moh_suggest                        : default
 mwi_from_user                      : 
 mwi_subscribe_replaces_unsolicited : no
 named_call_group                   : 
 named_pickup_group                 : 
 notify_early_inuse_ringing         : false
 one_touch_recording                : false
 outbound_auth                      : 
 outbound_proxy                     : 
 outgoing_call_offer_pref           : remote_merge
 pickup_group                       : 
 preferred_codec_only               : false
 record_off_feature                 : automixmon
 record_on_feature                  : automixmon
 refer_blind_progress               : true
 rewrite_contact                    : true
 rpid_immediate                     : false
 rtcp_mux                           : true
 rtp_engine                         : asterisk
 rtp_ipv6                           : false
 rtp_keepalive                      : 15
 rtp_symmetric                      : false
 rtp_timeout                        : 0
 rtp_timeout_hold                   : 0
 sdp_owner                          : -
 sdp_session                        : Asterisk
 send_connected_line                : yes
 send_diversion                     : true
 send_history_info                  : false
 send_pai                           : false
 send_rpid                          : false
 set_var                            : 
 srtp_tag_32                        : false
 stir_shaken                        : false
 sub_min_expiry                     : 0
 subscribe_context                  : subscribe
 suppress_q850_reason_headers       : false
 t38_udptl                          : false
 t38_udptl_ec                       : none
 t38_udptl_ipv6                     : false
 t38_udptl_maxdatagram              : 0
 t38_udptl_nat                      : false
 timers                             : yes
 timers_min_se                      : 90
 timers_sess_expires                : 1800
 tone_zone                          : 
 tos_audio                          : 0
 tos_video                          : 0
 transport                          : 
 trust_connected_line               : yes
 trust_id_inbound                   : false
 trust_id_outbound                  : false
 use_avpf                           : true
 use_ptime                          : false
 user_eq_phone                      : false
 voicemail_extension                : 
 webrtc                             : yes

How to add streams with different fmtps ??

Asterisk doesn’t rewrite SDP; rather it creates a complete new set of SDP on the outgoing leg based on what it selected on the incoming leg, and what is configured for the outgoing leg endpoint.

I suspect the restriction in Joshua’s reply to another thread:

still applies.

Note you didn’t say which version, and a full parameter dump is difficult to interpret, because one has to consider what is already default. If using config files, which I would always suggest if you are experimenting, having just the options you are setting is much easier on the brain.

1 Like

Setings are loaded with realtime module. So I put pjsip show endpoint XXXXXX to describe endpoint config. Asterisk 18.5.0

That is correct, that restriction still applies. Noone has worked on changing it.

Anyway, there is an existing issue ASTERISK-29182 which you can subscribe for (or take as a starting point for a bug-bounty).

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.