webrtc/api
Anton Sukhanov ac6c09634f Integrate datagram feedback loop
This change removes RTCP Feedback loop if we are using datagram transport by removing transport sequence numbers from RTP packets and recreating RTCP Feedback from Datagram ACKs and Timestamps.

- For outgoing RTP packets, remove transport sequence number and store it with datagram_id. Note that removing transport sequence numbers does not only save 4-8 bytes per packet, but also prevents generation of feedback packets on the receiver side.

- When datagram ACKs, we re-created RTCP feedback with timestamp.

- Replacing previous assumption that datagram_id was the same as packet_id by storing incremental counter of datagram ids (I noticed some packets come without packet_id, which is a bit strange, but easy to support and it's also good not to rely on packet_ids being unique across multiple ssrcs).

Bug: webrtc:9719
Change-Id: Iecfe938ecea1a74e7c9e1484f0e985d72643d4a1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/145269
Commit-Queue: Anton Sukhanov <sukhanov@webrtc.org>
Reviewed-by: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Bjorn Mellem <mellem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28542}
2019-07-11 16:22:00 +00:00
..
audio Format almost everything. 2019-07-08 13:45:15 +00:00
audio_codecs Format almost everything. 2019-07-08 13:45:15 +00:00
call Format almost everything. 2019-07-08 13:45:15 +00:00
crypto Format almost everything. 2019-07-08 13:45:15 +00:00
rtc_event_log Remove deprecated RtcEventLog Create functions 2019-05-29 12:39:08 +00:00
stats Format almost everything. 2019-07-08 13:45:15 +00:00
task_queue Poison default task queue factory 2019-07-10 14:08:20 +00:00
test Remove the injectable bitrate allocation strategy API. 2019-07-10 13:13:25 +00:00
transport Format almost everything. 2019-07-08 13:45:15 +00:00
units Format almost everything. 2019-07-08 13:45:15 +00:00
video Format almost everything. 2019-07-08 13:45:15 +00:00
video_codecs Format almost everything. 2019-07-08 13:45:15 +00:00
array_view.h Adding reinterpret to ArrayView to allow data manipulation. 2019-03-22 18:15:22 +00:00
array_view_unittest.cc Format almost everything. 2019-07-08 13:45:15 +00:00
async_resolver_factory.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
audio_options.cc Add PeerConnection option to enable RTX handling in the audio jitter buffer. 2019-01-10 16:28:43 +00:00
audio_options.h Format almost everything. 2019-07-08 13:45:15 +00:00
bitrate_constraints.h Convert video quality test from a TEST_F to a TEST fixture. 2018-06-21 15:49:43 +00:00
BUILD.gn Poison default task queue factory 2019-07-10 14:08:20 +00:00
candidate.cc (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
candidate.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
congestion_control_interface.h Add datagram_transport and congestion_control interface 2019-05-14 22:22:45 +00:00
create_peerconnection_factory.cc Force DefaultTaskQueueFactory in legacy CreatePeerConnectionFactory 2019-06-19 17:11:04 +00:00
create_peerconnection_factory.h Force DefaultTaskQueueFactory in legacy CreatePeerConnectionFactory 2019-06-19 17:11:04 +00:00
crypto_params.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
data_channel_interface.cc Datachannel: Use absl::optional for maxRetransmits and maxRetransmitTime. 2019-04-09 08:32:43 +00:00
data_channel_interface.h Format almost everything. 2019-07-08 13:45:15 +00:00
datagram_transport_interface.h Integrate datagram feedback loop 2019-07-11 16:22:00 +00:00
DEPS Remove the injectable bitrate allocation strategy API. 2019-07-10 13:13:25 +00:00
DESIGN.md A threading explanation 2019-06-03 08:15:09 +00:00
dtls_transport_interface.cc Expose SSL ciphersuite on the webrtc::DtlsTransport interface 2019-04-12 08:29:59 +00:00
dtls_transport_interface.h Expose SSL ciphersuite on the webrtc::DtlsTransport interface 2019-04-12 08:29:59 +00:00
dtmf_sender_interface.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
fec_controller.h Make VideoFrameType an enum class, and move to separate file and target 2019-03-22 12:44:51 +00:00
fec_controller_override.h Define FecControllerOverride and plumb it down to VideoEncoder 2019-06-28 15:57:22 +00:00
function_view.h Move rtc::FunctionView to the public API 2019-03-21 15:23:05 +00:00
function_view_unittest.cc Format almost everything. 2019-07-08 13:45:15 +00:00
ice_transport_factory.cc Add overload to CreateIceTransport that takes additional dependencies 2019-07-01 21:37:54 +00:00
ice_transport_factory.h Add overload to CreateIceTransport that takes additional dependencies 2019-07-01 21:37:54 +00:00
ice_transport_interface.h Add IceTransportInterface object 2019-01-30 16:16:51 +00:00
jsep.cc Move SdpType from/to string definition close to declaration. 2018-10-12 09:59:40 +00:00
jsep.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
jsep_ice_candidate.cc Use Abseil container algorithms in api/ 2019-03-25 22:11:06 +00:00
jsep_ice_candidate.h Format almost everything. 2019-07-08 13:45:15 +00:00
jsep_session_description.h Remove deprecated JsepSession initializer 2019-06-11 17:35:30 +00:00
media_stream_interface.cc Remove SetLatency/GetLatency from MediaSourceInterface API level 2019-04-18 19:11:31 +00:00
media_stream_interface.h Remove SetLatency/GetLatency from MediaSourceInterface API level 2019-04-18 19:11:31 +00:00
media_stream_proxy.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
media_stream_track_proxy.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
media_transport_config.cc Delete unneeded includes of string_utils.h 2019-06-10 10:44:40 +00:00
media_transport_config.h Datagram Transport Integration 2019-05-23 23:36:05 +00:00
media_transport_interface.cc Format almost everything. 2019-07-08 13:45:15 +00:00
media_transport_interface.h Don't use angle-bracket #includes for WebRTC's own files 2019-06-26 16:06:52 +00:00
media_types.cc (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
media_types.h Export symbols needed by the Chromium component build (part 8). 2019-04-02 10:13:36 +00:00
network_state_predictor.h Add base class NetworkPredictor and NetworkPredictorFactory and wire up. 2019-04-10 12:38:58 +00:00
notifier.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
OWNERS Remove myself from OWNERS in a few places. 2019-06-10 07:57:46 +00:00
peer_connection_factory_proxy.h Delete deprecated version of PeerConnectionFactoryInterface::StartAecDump 2019-06-27 07:33:59 +00:00
peer_connection_interface.cc Format almost everything. 2019-07-08 13:45:15 +00:00
peer_connection_interface.h Remove the injectable bitrate allocation strategy API. 2019-07-10 13:13:25 +00:00
peer_connection_proxy.h Remove the injectable bitrate allocation strategy API. 2019-07-10 13:13:25 +00:00
proxy.cc Make member internal::SynchronousMethodCall::e_ a non-pointer. 2018-11-15 10:42:36 +00:00
proxy.h Remove rtc_base/scoped_ref_ptr.h. 2019-01-25 20:29:58 +00:00
README.md Add a small README file for api/ 2019-02-01 13:24:47 +00:00
ref_counted_base.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
rtc_error.cc Using absl::string_view to stringify an RTCErrorType. 2019-01-16 11:49:00 +00:00
rtc_error.h Export symbols needed by the Chromium component build (part 8). 2019-04-02 10:13:36 +00:00
rtc_error_unittest.cc Format almost everything. 2019-07-08 13:45:15 +00:00
rtc_event_log_output.h Adds functionality to write logs to memory. 2019-01-16 17:36:31 +00:00
rtc_event_log_output_file.cc Format almost everything. 2019-07-08 13:45:15 +00:00
rtc_event_log_output_file.h Format almost everything. 2019-07-08 13:45:15 +00:00
rtc_event_log_output_file_unittest.cc Promote RtcEventLogOutputFile to api/ 2019-05-08 12:29:42 +00:00
rtp_headers.cc Reland "[cleanup] Remove useless includes." 2018-10-08 07:44:19 +00:00
rtp_headers.h Format almost everything. 2019-07-08 13:45:15 +00:00
rtp_packet_info.cc Remove sequence_number from RtpPacketInfo. 2019-06-14 11:21:42 +00:00
rtp_packet_info.h Remove sequence_number from RtpPacketInfo. 2019-06-14 11:21:42 +00:00
rtp_packet_info_unittest.cc Format almost everything. 2019-07-08 13:45:15 +00:00
rtp_packet_infos.h Add RtpPacketInfo to hold information about a received RtpPacket. 2019-06-03 14:37:01 +00:00
rtp_packet_infos_unittest.cc Remove sequence_number from RtpPacketInfo. 2019-06-14 11:21:42 +00:00
rtp_parameters.cc Add writing and parsing of the abs-capture-time RTP header extension. 2019-07-03 14:07:36 +00:00
rtp_parameters.h Format almost everything. 2019-07-08 13:45:15 +00:00
rtp_parameters_unittest.cc Format almost everything. 2019-07-08 13:45:15 +00:00
rtp_receiver_interface.cc Add RTP timestamp to contributing sources 2019-05-22 08:53:08 +00:00
rtp_receiver_interface.h Add RTP timestamp to contributing sources 2019-05-22 08:53:08 +00:00
rtp_sender_interface.cc Removing non-const RtpSenderInterface::GetParameters(). 2019-02-23 00:51:30 +00:00
rtp_sender_interface.h Add RtpSenderInterface.SetStreams 2019-05-20 18:38:06 +00:00
rtp_transceiver_interface.cc Implement RTCRtpTransceiver.setCodecPreferences 2019-05-01 20:14:59 +00:00
rtp_transceiver_interface.h Implement RTCRtpTransceiver.setCodecPreferences 2019-05-01 20:14:59 +00:00
scoped_refptr.h Add element_type typedef to rtc::scoped_refptr 2018-12-20 19:11:22 +00:00
sctp_transport_interface.cc Format almost everything. 2019-07-08 13:45:15 +00:00
sctp_transport_interface.h Export symbols needed by the Chromium component build (part 8). 2019-04-02 10:13:36 +00:00
set_remote_description_observer_interface.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
stats_types.cc Revert "Piping audio interruption metrics to API layer" 2019-04-29 11:23:16 +00:00
stats_types.h Revert "Piping audio interruption metrics to API layer" 2019-04-29 11:23:16 +00:00
turn_customizer.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
uma_metrics.h Adding metrics to measure usage of simulcast API. 2019-03-05 22:01:34 +00:00
video_track_source_proxy.h Remove SetLatency/GetLatency from MediaSourceInterface API level 2019-04-18 19:11:31 +00:00

How to write code in the api/ directory

Mostly, just follow the regular style guide, but:

  • Note that api/ code is not exempt from the “.h and .cc files come in pairs” rule, so if you declare something in api/path/to/foo.h, it should be defined in api/path/to/foo.cc.
  • Headers in api/ should, if possible, not #include headers outside api/. Its not always possible to avoid this, but be aware that it adds to a small mountain of technical debt that were trying to shrink.
  • .cc files in api/, on the other hand, are free to #include headers outside api/.

That is, the preferred way for api/ code to access non-api/ code is to call it from a .cc file, so that users of our API headers wont transitively #include non-public headers.

For headers in api/ that need to refer to non-public types, forward declarations are often a lesser evil than including non-public header files. The usual rules still apply, though.

.cc files in api/ should preferably be kept reasonably small. If a substantial implementation is needed, consider putting it with our non-public code, and just call it from the api/ .cc file.