Fix rid 'send pt=X' bug and re-enable test.

When creating an offer, the send PT is the payload type of the codec
that we're advertising that we would like to send. It comes from the
RidDescription's list of payload types (= integers prior to this CL)
which is controlled from the API with `RTCRtpEncodingParameters.codec`.

The problem was that the encodings[i].codec -> PT conversion step in
sdp_offer_answer.cc's GetMediaDescriptionOptionsForTransceiver() was
based on `transceiver->sender_internal()->GetSendCodecs()` whose PTs
are inconsistent with the payload types that gets assigned to the media
section in a later step using PayloadTypeSuggester.

To fix this, the RidDescription is updated to have a list of `codecs`
instead of a list of `payload_types` and the "codec -> PT" conversation
step is...
1. Moved to SimulcastSdpSerializer and using lookup from
   MediaContentDescription as opposed to blindly trusting `codec.id`
   making PT inconsistencies impossible.
2. Uses IsSameRtpCodecIgnoringLevel() instead of MatchesRtpCodec(),
   ensuring codec match does not fail if the MediaContentDescription's
   list of codecs is not specifying default parameters (e.g. see
   SdpOfferAnswerTest.SimulcastAnswerWithPayloadType not specifying
   profile-id fails if MatchesRtpCodec is used).

Another drive-by bugfix is we no longer remove entire RIDs if all PTs in
the RID are invalid, see TestDeserializeRemovesRidsWithInvalidCodec.

Bug: webrtc:362277533
Change-Id: Ic11ecf2a85e6d8db7fc269bc53c3ac11d5d8b127
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/378284
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43982}
11 files changed
tree: e91e38675d5122a39db7a1475dd586f41c1fa276
  1. api/
  2. audio/
  3. build_overrides/
  4. call/
  5. common_audio/
  6. common_video/
  7. data/
  8. docs/
  9. examples/
  10. experiments/
  11. g3doc/
  12. infra/
  13. logging/
  14. media/
  15. modules/
  16. net/
  17. p2p/
  18. pc/
  19. resources/
  20. rtc_base/
  21. rtc_tools/
  22. sdk/
  23. stats/
  24. system_wrappers/
  25. test/
  26. tools_webrtc/
  27. video/
  28. .clang-format
  29. .git-blame-ignore-revs
  30. .gitignore
  31. .gn
  32. .mailmap
  33. .style.yapf
  34. .vpython3
  35. AUTHORS
  36. BUILD.gn
  37. CODE_OF_CONDUCT.md
  38. codereview.settings
  39. DEPS
  40. DIR_METADATA
  41. ENG_REVIEW_OWNERS
  42. LICENSE
  43. license_template.txt
  44. native-api.md
  45. OWNERS
  46. OWNERS_INFRA
  47. PATENTS
  48. PRESUBMIT.py
  49. presubmit_test.py
  50. presubmit_test_mocks.py
  51. pylintrc
  52. pylintrc_old_style
  53. README.chromium
  54. README.md
  55. WATCHLISTS
  56. webrtc.gni
  57. webrtc_lib_link_test.cc
  58. whitespace.txt
README.md

WebRTC is a free, open software project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimized to best serve this purpose.

Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow them all to communicate via a common set of protocols.

The WebRTC initiative is a project supported by Google, Mozilla and Opera, amongst others.

Development

See here for instructions on how to get started developing with the native code.

Authoritative list of directories that contain the native API header files.

More info