1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_CONFIG_H_
6 #define MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_CONFIG_H_
11 #include "base/basictypes.h"
12 #include "base/callback.h"
13 #include "base/memory/ref_counted.h"
14 #include "media/cast/transport/cast_transport_defines.h"
21 kRtcpCompound, // Compound RTCP mode is described by RFC 4585.
22 kRtcpReducedSize, // Reduced-size RTCP mode is described by RFC 5506.
36 struct CastTransportConfig {
37 CastTransportConfig();
38 ~CastTransportConfig();
40 // Transport: Local receiver.
41 std::string receiver_ip_address;
42 std::string local_ip_address;
49 VideoCodec video_codec;
50 AudioCodec audio_codec;
53 int audio_rtp_history_ms;
54 int video_rtp_history_ms;
55 int audio_rtp_max_delay_ms;
56 int video_rtp_max_delay_ms;
57 int audio_rtp_payload_type;
58 int video_rtp_payload_type;
63 std::string aes_key; // Binary string of size kAesKeySize.
64 std::string aes_iv_mask; // Binary string of size kAesBlockSize.
67 struct EncodedVideoFrame {
74 uint32 last_referenced_frame_id;
78 struct EncodedAudioFrame {
83 uint32 frame_id; // Needed to release the frame.
84 int samples; // Needed send side to advance the RTP timestamp.
85 // Not used receive side.
86 // Support for max sampling rate of 48KHz, 2 channels, 100 ms duration.
87 static const int kMaxNumberOfSamples = 48 * 2 * 100;
91 typedef std::vector<uint8> Packet;
92 typedef std::vector<Packet> PacketList;
94 class PacketReceiver : public base::RefCountedThreadSafe<PacketReceiver> {
96 // All packets received from the network should be delivered via this
98 virtual void ReceivedPacket(const uint8* packet, size_t length,
99 const base::Closure callback) = 0;
101 static void DeletePacket(const uint8* packet);
104 virtual ~PacketReceiver() {}
107 friend class base::RefCountedThreadSafe<PacketReceiver>;
112 // All packets to be sent to the network will be delivered via these
114 virtual bool SendPacket(const transport::Packet& packet) = 0;
116 virtual ~PacketSender() {}
119 // Log messages form sender to receiver.
120 // TODO(mikhal): Refactor to Chromium style (MACRO_STYLE).
121 enum RtcpSenderFrameStatus {
122 kRtcpSenderFrameStatusUnknown = 0,
123 kRtcpSenderFrameStatusDroppedByEncoder = 1,
124 kRtcpSenderFrameStatusDroppedByFlowControl = 2,
125 kRtcpSenderFrameStatusSentToNetwork = 3,
128 struct RtcpSenderFrameLogMessage {
129 RtcpSenderFrameLogMessage();
130 ~RtcpSenderFrameLogMessage();
131 RtcpSenderFrameStatus frame_status;
132 uint32 rtp_timestamp;
135 typedef std::list<RtcpSenderFrameLogMessage> RtcpSenderLogMessage;
137 struct RtcpSenderInfo {
140 // First three members are used for lipsync.
141 // First two members are used for rtt.
144 uint32 rtp_timestamp;
145 uint32 send_packet_count;
146 size_t send_octet_count;
149 struct RtcpReportBlock {
152 uint32 remote_ssrc; // SSRC of sender of this report.
153 uint32 media_ssrc; // SSRC of the RTP packet sender.
155 uint32 cumulative_lost; // 24 bits valid.
156 uint32 extended_high_sequence_number;
159 uint32 delay_since_last_sr;
162 struct RtcpDlrrReportBlock {
163 RtcpDlrrReportBlock();
164 ~RtcpDlrrReportBlock();
166 uint32 delay_since_last_rr;
169 inline bool operator==(RtcpSenderInfo lhs, RtcpSenderInfo rhs) {
170 return lhs.ntp_seconds == rhs.ntp_seconds &&
171 lhs.ntp_fraction == rhs.ntp_fraction &&
172 lhs.rtp_timestamp == rhs.rtp_timestamp &&
173 lhs.send_packet_count == rhs.send_packet_count &&
174 lhs.send_octet_count == rhs.send_octet_count;
177 } // namespace transport
181 #endif // MEDIA_CAST_TRANSPORT_CAST_TRANSPORT_CONFIG_H_