Use Unified Plan transceivers in FakePeerConnectionForStats

FakePeerConnectionForStats put all senders and receivers of a media type
on one Plan B transceiver, so the stats collectors were tested with a
setup that Unified Plan never produces.

- Add AddRtpTransceiver(), which creates a Unified Plan transceiver with
  a given sender and receiver. A missing sender or receiver is replaced
  by a NiceMock. The default receiver has a track without an ID, because
  the legacy collector dereferences receiver tracks and an empty ID
  keeps that track out of the reports.
- AddVoiceChannel() and AddVideoChannel() put the channel on the
  transceiver with the requested mid, else on the first transceiver of
  the media type that has no mid yet, else on a new transceiver.
- GetSenders() and GetReceivers() return the sender and the receiver of
  each transceiver that is not stopped.
- Remove AddSender(), RemoveSender(), AddReceiver(), RemoveReceiver(),
  the Plan B transceiver helpers and the PLAN_B_ONLY markers.

The tests add each sender and receiver with AddRtpTransceiver(). Where a
sender and a receiver belong to the same m= section, they share a
transceiver. The suppressions of Plan B deprecation warnings are removed
from these tests. The Plan B test file keeps its own Plan B fake and is
unchanged.

Bug: webrtc:470300031
Change-Id: I77e7584e6284ed13ff1134dc10a314e9f4c045b2
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/508481
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#49061}
5 files changed
tree: fa5c5ba2629055464eda4a352986b79e1a234225
  1. .agents/
  2. agents/
  3. api/
  4. audio/
  5. build_overrides/
  6. call/
  7. common_audio/
  8. common_video/
  9. data/
  10. docs/
  11. examples/
  12. experiments/
  13. g3doc/
  14. infra/
  15. logging/
  16. media/
  17. modules/
  18. net/
  19. p2p/
  20. pc/
  21. resources/
  22. rtc_base/
  23. rtc_tools/
  24. rust/
  25. sdk/
  26. stats/
  27. system_wrappers/
  28. test/
  29. tools_webrtc/
  30. video/
  31. .clang-format
  32. .clang-tidy
  33. .git-blame-ignore-revs
  34. .gitignore
  35. .gn
  36. .mailmap
  37. .rustfmt.toml
  38. .style.mdformat
  39. .style.yapf
  40. .yapfignore
  41. AUTHORS
  42. BUILD.gn
  43. CODE_OF_CONDUCT.md
  44. codereview.settings
  45. DEPS
  46. DIR_METADATA
  47. ENG_REVIEW_OWNERS
  48. GEMINI.md
  49. LICENSE
  50. license_template.txt
  51. native-api.md
  52. OWNERS
  53. OWNERS_INFRA
  54. PATENTS
  55. PRESUBMIT.py
  56. presubmit_test.py
  57. presubmit_test_mocks.py
  58. pylintrc
  59. pylintrc_old_style
  60. README.chromium
  61. README.md
  62. unsafe_buffers_paths.txt
  63. vpython.toml
  64. vpython.toml.uv.lock
  65. WATCHLISTS
  66. webrtc.gni
  67. webrtc_lib_link_test.cc
  68. 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