You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.7 KiB
52 lines
1.7 KiB
7 months ago
|
// Copyright 2019 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#ifndef CAST_STREAMING_SENDER_REPORT_PARSER_H_
|
||
|
#define CAST_STREAMING_SENDER_REPORT_PARSER_H_
|
||
|
|
||
|
#include "absl/types/optional.h"
|
||
|
#include "absl/types/span.h"
|
||
|
#include "cast/streaming/rtcp_common.h"
|
||
|
#include "cast/streaming/rtcp_session.h"
|
||
|
#include "cast/streaming/rtp_defines.h"
|
||
|
#include "cast/streaming/rtp_time.h"
|
||
|
|
||
|
namespace openscreen {
|
||
|
namespace cast {
|
||
|
|
||
|
// Parses RTCP packets from a Sender to extract Sender Reports. Ignores anything
|
||
|
// else, since that is all a Receiver would be interested in.
|
||
|
class SenderReportParser {
|
||
|
public:
|
||
|
// Returned by Parse(), to also separately expose the StatusReportId. The
|
||
|
// report ID isn't included in the common RtcpSenderReport struct because it's
|
||
|
// not an input to SenderReportBuilder (it is generated by the builder).
|
||
|
struct SenderReportWithId : public RtcpSenderReport {
|
||
|
SenderReportWithId();
|
||
|
~SenderReportWithId();
|
||
|
|
||
|
StatusReportId report_id{};
|
||
|
};
|
||
|
|
||
|
explicit SenderReportParser(RtcpSession* session);
|
||
|
~SenderReportParser();
|
||
|
|
||
|
// Parses the RTCP |packet|, and returns a parsed sender report if the packet
|
||
|
// contained one. Returns nullopt if the data is corrupt or the packet did not
|
||
|
// contain a sender report.
|
||
|
absl::optional<SenderReportWithId> Parse(absl::Span<const uint8_t> packet);
|
||
|
|
||
|
private:
|
||
|
RtcpSession* const session_;
|
||
|
|
||
|
// Tracks the recently-parsed RTP timestamps so that the truncated values can
|
||
|
// be re-expanded into full-form.
|
||
|
RtpTimeTicks last_parsed_rtp_timestamp_;
|
||
|
};
|
||
|
|
||
|
} // namespace cast
|
||
|
} // namespace openscreen
|
||
|
|
||
|
#endif // CAST_STREAMING_SENDER_REPORT_PARSER_H_
|