Agora C++ API Reference for All Platforms
Loading...
Searching...
No Matches
packet_i.h
1// Agora RTC/MEDIA SDK
2//
3// Created by Pengfei Han in 2019-06.
4// Copyright (c) 2019 Agora.io. All rights reserved.
5//
6#pragma once
7
8#include <cstdint>
9#include <list>
10#include <memory>
11#include <string>
12#include <vector>
13
14#include "AgoraBase.h"
15#include "audio_node_stat_i.h"
16
17namespace agora {
18namespace rtc {
19
20
21static const uint8_t kVideoEngineFlagHasIntraRequest = 0x10;
22static const uint8_t kVideoEngineFlagStdCodec = 0x8;
23static const uint8_t kVideoEngineFlagNasa = 0x40;
24static const uint8_t kVideoEngineFlagScalableDelta = 0x80;
25static const uint8_t kVideoEngineFlagMajorStreamOnly = 0x01;
26
27static const uint8_t kAgoraHeaderLength = 3;
28static const uint8_t kAgoraAudioExtendLength = 5;
29
45
51
54 uint8_t flags_;
55 uint16_t seq_;
56 uint16_t ssrc_;
57 uint64_t packetSentTs_;
58 uint64_t sentTs_;
59 uint64_t receiveTs_;
60 std::string payload_;
61 SMediaFrame() : uid_(0), flags_(0), seq_(0), ssrc_(0), sentTs_(0), receiveTs_(0) {}
62};
63
64struct SAudioFrame : public SMediaFrame {
65 uint8_t codec_;
66 uint32_t ts_;
67 int8_t vad_;
71 uint16_t cc_type_;
72 // energy is only used for send
73 uint8_t energy_;
76 int64_t audio_pts_;
77 std::string metadata_;
79};
80
81using SharedSAudioFrame = std::shared_ptr<SAudioFrame>;
82
89 int8_t vad_;
90 uint8_t codec_;
92 uint16_t seq_;
93 uint16_t ssrc_;
97 std::list<SharedSAudioFrame> frames_;
99 std::string metadata_;
101 : vad_(0),
102 codec_(0),
104 seq_(0),
105 ssrc_(0),
108 filterable_(true) {}
109};
110
122 uint32_t seq;
123 uint16_t payload_length; // should be the same as payload.length()
124 uint64_t sent_ts;
125 uint64_t recv_ts;
128 std::string payload;
130 : uid(0), seq(0), payload_length(0), sent_ts(0), recv_ts(0), link_id(-1), internal_flags(0) {}
131};
132
134 bool quit;
135 bool rtcp;
140 : quit(false), rtcp(false), need_reliable(false), real_quit(false), audience_send(false) {}
141};
142
150
152 uint32_t ts;
153 int8_t vad;
154 uint8_t codec;
155 int last_error; // error code set by last filter
156 uint32_t reqMs; // for calculating RTT only
157 uint8_t flags; // flags from SAudioFrame
158 int64_t audio_pts; //audio pts from SAudioFrame extension
159 std::string metadata_;
160 audio_packet_t() : ts(0), vad(0), codec(0), last_error(0), reqMs(0), flags(0), audio_pts(0) {}
161};
162
180
182 // below is for video2 only, not used in video3
186 VIDEO_FLAG_STD_CODEC = 0x8, // also for video3 to differentiate std stream and private stream
188 // below is for video3
190 };
191
197
198 // TODO(Bob): This should be removed and use public API definitions.
200 VIDEO_CODEC_VP8 = 1, // std VP8
201 VIDEO_CODEC_H264 = 2, // std H264
202 VIDEO_CODEC_EVP = 3, // VP8 with BCM
203 VIDEO_CODEC_E264 = 4, // H264 with BCM
204 };
205
207 // marks if the |req_ms| field of PVideoRexferRes_v4 is set
209 };
210
216
217 struct Extension {
218 bool has_extension_ = false;
220 std::vector<uint32_t> content_;
221 };
222
223 uint32_t frameSeq;
224 uint8_t frameType;
225 uint8_t streamType;
226 uint16_t packets;
227 uint16_t subseq;
228 uint16_t fecPkgNum;
229 uint8_t codec;
230 uint8_t flags;
232 uint32_t reqMs; // for calculating RTT only
233 uint32_t reserve1;
235 int64_t transport_seq; // for transport-cc
236 int8_t cc_type;
240
242 : frameSeq(0),
243 frameType(0),
244 streamType(0),
245 packets(0),
246 subseq(0),
247 fecPkgNum(0),
248 codec(0),
249 flags(0),
251 reqMs(0),
252 reserve1(0),
253 transport_seq(-1),
254 cc_type(0),
256
258 struct {
259 uint8_t stream_type : 4;
260 uint8_t frame_type : 4;
261 };
262 uint8_t video_type;
263 };
264
265 void fromVideType(uint8_t f) {
266 video3_flags t;
267 t.video_type = f;
270 }
271
272 uint8_t toVideoType() const {
273 video3_flags t;
276 return t.video_type;
277 }
278
279 bool hasReserveBit(uint16_t bit) { return (reserve1 & (1 << bit)) == (1 << bit); }
280};
281
284 bool from_vos = false;
285 std::string payload;
286};
287
292
295 int type;
296 std::string user_id;
297 std::string payload;
298};
299
305
312
313} // namespace rtc
314} // namespace agora
Definition AgoraExtensions.h:5
std::shared_ptr< SAudioFrame > SharedSAudioFrame
Definition packet_i.h:81
MEDIA_FRAMERATE_LEVEL
Definition packet_i.h:46
@ MEDIA_FRAMERATE_LEVEL_HIGH
Definition packet_i.h:47
@ MEDIA_FRAMERATE_LEVEL_MIDDLE
Definition packet_i.h:48
@ MEDIA_FRAMERATE_LEVEL_LOW
Definition packet_i.h:49
static const uint8_t kAgoraHeaderLength
Definition packet_i.h:27
static const uint8_t kAgoraAudioExtendLength
Definition packet_i.h:28
VideoStreamType
Definition packet_i.h:306
@ LIVE_VIDEO_STREAM
Definition packet_i.h:310
@ MASTER_VIDEO_STREAM
Definition packet_i.h:307
@ MEDIUM_BITRATE_VIDEO_STREAM
Definition packet_i.h:309
@ LOW_BITRATE_VIDEO_STREAM
Definition packet_i.h:308
MEDIA_STREAM_TYPE
Definition packet_i.h:30
@ MEDIA_STREAM_TYPE_VIDEO
Definition packet_i.h:41
@ MEDIA_STREAM_TYPE_VIDEO_LAYER_0
Definition packet_i.h:34
@ MEDIA_STREAM_TYPE_AUDIO
Definition packet_i.h:31
@ MEDIA_STREAM_TYPE_VIDEO_LAYER_5
Definition packet_i.h:39
@ MEDIA_STREAM_TYPE_VIDEO_LAYER_6
Definition packet_i.h:40
@ MEDIA_STREAM_TYPE_VIDEO_LAYER_1
Definition packet_i.h:35
@ MEDIA_STREAM_TYPE_VIDEO_LAYER_4
Definition packet_i.h:38
@ MEDIA_STREAM_TYPE_VIDEO_LAYER_3
Definition packet_i.h:37
@ MEDIA_STREAM_TYPE_VIDEO_LOW
Definition packet_i.h:32
@ MEDIA_STREAM_TYPE_MEDIA
Definition packet_i.h:43
@ MEDIA_STREAM_TYPE_VIDEO_HIGH
Definition packet_i.h:33
@ MEDIA_STREAM_TYPE_VIDEO_LAYER_2
Definition packet_i.h:36
static const uint8_t kVideoEngineFlagHasIntraRequest
Definition packet_i.h:21
RdtStreamType
Reliable Data Transmission Tunnel message stream type.
Definition AgoraBase.h:7418
static const uint8_t kVideoEngineFlagStdCodec
Definition packet_i.h:22
unsigned int uid_t
Definition AgoraMediaBase.h:28
static const uint8_t kVideoEngineFlagScalableDelta
Definition packet_i.h:24
static const uint8_t kVideoEngineFlagMajorStreamOnly
Definition packet_i.h:25
static const uint8_t kVideoEngineFlagNasa
Definition packet_i.h:23
Definition AgoraAtomicOps.h:21
Definition audio_node_stat_i.h:32
uint16_t audio_fec_level_
Definition packet_i.h:69
AudioFrameHandleInfo handle_info_
Definition packet_i.h:74
std::string metadata_
Definition packet_i.h:77
int8_t vad_
Definition packet_i.h:67
uint32_t bitrate_profile_kbps
Definition packet_i.h:75
uint8_t codec_
Definition packet_i.h:65
uint16_t cc_type_
Definition packet_i.h:71
SAudioFrame()
Definition packet_i.h:78
bool arq_to_rsfec_flag_
Definition packet_i.h:70
uint32_t ts_
Definition packet_i.h:66
uint8_t energy_
Definition packet_i.h:73
uint8_t internalFlags_
Definition packet_i.h:68
int64_t audio_pts_
Definition packet_i.h:76
SAudioPacket()
Definition packet_i.h:100
AUDIO_PACKET_TYPE
Definition packet_i.h:84
@ AUDIO_PACKET_FROM_P2P
Definition packet_i.h:87
@ AUDIO_PACKET_FROM_VOS
Definition packet_i.h:86
@ AUDIO_PACKET_REXFERRED
Definition packet_i.h:85
uint16_t seq_
Definition packet_i.h:92
int8_t vad_
Definition packet_i.h:89
bool filterable_
Definition packet_i.h:96
uint8_t codec_
Definition packet_i.h:90
uint16_t latestFrameSeq_
Definition packet_i.h:95
uint8_t internalFlags_
Definition packet_i.h:91
uint16_t payloadLength_
Definition packet_i.h:94
uint16_t ssrc_
Definition packet_i.h:93
std::list< SharedSAudioFrame > frames_
Definition packet_i.h:97
AudioFrameHandleInfo handle_timing_
Definition packet_i.h:98
std::string metadata_
Definition packet_i.h:99
uint8_t flags_
Definition packet_i.h:54
uint64_t sentTs_
Definition packet_i.h:58
std::string payload_
Definition packet_i.h:60
uid_t uid_
Definition packet_i.h:53
uint64_t packetSentTs_
Definition packet_i.h:57
SMediaFrame()
Definition packet_i.h:61
uint16_t ssrc_
Definition packet_i.h:56
uint64_t receiveTs_
Definition packet_i.h:59
uint16_t seq_
Definition packet_i.h:55
uint8_t flags
Definition packet_i.h:157
std::string metadata_
Definition packet_i.h:159
uint32_t ts
Definition packet_i.h:152
uint32_t reqMs
Definition packet_i.h:156
audio_packet_t()
Definition packet_i.h:160
int8_t vad
Definition packet_i.h:153
int64_t audio_pts
Definition packet_i.h:158
int last_error
Definition packet_i.h:155
uint8_t codec
Definition packet_i.h:154
bool need_reliable
Definition packet_i.h:136
bool rtcp
Definition packet_i.h:135
broadcast_packet_t()
Definition packet_i.h:139
bool quit
Definition packet_i.h:134
bool audience_send
Definition packet_i.h:138
bool real_quit
Definition packet_i.h:137
std::string payload
Definition packet_i.h:285
rtc::uid_t uid
Definition packet_i.h:283
bool from_vos
Definition packet_i.h:284
Definition packet_i.h:143
uint32_t actual_sender_bandwidth
Definition packet_i.h:147
uint8_t max_sender_output_level
Definition packet_i.h:146
uint32_t queueing_time_to_receiver
Definition packet_i.h:145
uint8_t actual_sender_output_level
Definition packet_i.h:148
uint32_t estimated_bandwith_of_receiver
Definition packet_i.h:144
Definition packet_i.h:293
std::string payload
Definition packet_i.h:297
rtc::uid_t uid
Definition packet_i.h:294
std::string user_id
Definition packet_i.h:296
int type
Definition packet_i.h:295
Definition packet_i.h:300
rtc::uid_t uid
Definition packet_i.h:301
std::string payload
Definition packet_i.h:303
RdtStreamType type
Definition packet_i.h:302
uint32_t seq
Definition packet_i.h:122
uint8_t internal_flags
Definition packet_i.h:127
rtc_packet_t()
Definition packet_i.h:129
uid_t uid
Definition packet_i.h:121
INTERNAL_FLAG_TYPE
Definition packet_i.h:112
@ RTC_FLAG_FROM_P2P
Definition packet_i.h:115
@ VIDEO_FLAG_TIMESTAMP_SET
Definition packet_i.h:117
@ RTC_FLAG_FROM_BROADCAST
Definition packet_i.h:116
@ RTC_FLAG_FROM_VOS
Definition packet_i.h:114
@ RTC_FLAG_REXFERRED
Definition packet_i.h:113
@ VIDEO_FLAG_VIDEO3
Definition packet_i.h:119
@ VIDEO_FLAG_CACHED
Definition packet_i.h:118
uint64_t recv_ts
Definition packet_i.h:125
std::string payload
Definition packet_i.h:128
int link_id
Definition packet_i.h:126
uint16_t payload_length
Definition packet_i.h:123
uint64_t sent_ts
Definition packet_i.h:124
rtc::uid_t uid
Definition packet_i.h:289
std::string payload
Definition packet_i.h:290
Definition packet_i.h:217
uint16_t tag_
Definition packet_i.h:219
bool has_extension_
Definition packet_i.h:218
std::vector< uint32_t > content_
Definition packet_i.h:220
uint32_t reserve1
Definition packet_i.h:233
uint32_t reqMs
Definition packet_i.h:232
uint16_t packets
Definition packet_i.h:226
uint8_t protocolVersion
Definition packet_i.h:231
VIDEO_FRAME_TYPE
Definition packet_i.h:192
@ KEY_FRAME
Definition packet_i.h:193
@ DELTA_FRAME
Definition packet_i.h:194
@ B_FRAME
Definition packet_i.h:195
uint8_t toVideoType() const
Definition packet_i.h:272
void fromVideType(uint8_t f)
Definition packet_i.h:265
Extension extension
Definition packet_i.h:234
uint8_t max_temporal_layers
Definition packet_i.h:237
uint32_t frameSeq
Definition packet_i.h:223
VIDEO_FLAG_TYPE
Definition packet_i.h:181
@ VIDEO_FLAG_FEC
Definition packet_i.h:184
@ VIDEO_FLAG_B_FRAME
Definition packet_i.h:187
@ VIDEO_FLAG_LIVE
Definition packet_i.h:185
@ VIDEO_FLAG_KEY_FRAME
Definition packet_i.h:183
@ VIDEO_FLAG_HARDWARE_ENCODE
Definition packet_i.h:189
@ VIDEO_FLAG_STD_CODEC
Definition packet_i.h:186
video_packet_t()
Definition packet_i.h:241
uint8_t frameType
Definition packet_i.h:224
bool hasReserveBit(uint16_t bit)
Definition packet_i.h:279
VIDEO_EXTRA_FLAG_TYPE
Definition packet_i.h:206
@ VIDEO_EXTRA_FLAG_TIMESTAMP_SET
Definition packet_i.h:208
EXTENSION_VERSION
Definition packet_i.h:211
@ EXTENSION_VERSION_2
Definition packet_i.h:214
@ EXTENSION_VERSION_0
Definition packet_i.h:212
@ EXTENSION_VERSION_1
Definition packet_i.h:213
uint8_t curr_temporal_layer
Definition packet_i.h:238
VIDEO_CODEC_TYPE
Definition packet_i.h:199
@ VIDEO_CODEC_EVP
Definition packet_i.h:202
@ VIDEO_CODEC_E264
Definition packet_i.h:203
@ VIDEO_CODEC_VP8
Definition packet_i.h:200
@ VIDEO_CODEC_H264
Definition packet_i.h:201
VIDEO_STREAM_TYPE
Definition packet_i.h:164
@ VIDEO_STREAM_LAYER_0
Definition packet_i.h:170
@ VIDEO_STREAM_UNKNOWN
Definition packet_i.h:165
@ VIDEO_STREAM_LAYER_4
Definition packet_i.h:174
@ VIDEO_STREAM_LAYER_5
Definition packet_i.h:175
@ VIDEO_STREAM_LAYER_6
Definition packet_i.h:176
@ VIDEO_STREAM_LAYER_3
Definition packet_i.h:173
@ VIDEO_STREAM_HIGH
Definition packet_i.h:166
@ VIDEO_STREAM_MEDIUM
Definition packet_i.h:168
@ VIDEO_STREAM_MAX
Definition packet_i.h:178
@ VIDEO_STREAM_LAYER_1
Definition packet_i.h:171
@ VIDEO_STREAM_MIN
Definition packet_i.h:177
@ VIDEO_STREAM_LAYER_2
Definition packet_i.h:172
@ VIDEO_STREAM_LIVE
Definition packet_i.h:169
@ VIDEO_STREAM_LOW
Definition packet_i.h:167
uint32_t bitrate_profile_kbps
Definition packet_i.h:239
int8_t cc_type
Definition packet_i.h:236
uint8_t codec
Definition packet_i.h:229
uint16_t fecPkgNum
Definition packet_i.h:228
uint16_t subseq
Definition packet_i.h:227
uint8_t flags
Definition packet_i.h:230
uint8_t streamType
Definition packet_i.h:225
int64_t transport_seq
Definition packet_i.h:235
uint8_t video_type
Definition packet_i.h:262
uint8_t frame_type
Definition packet_i.h:260
uint8_t stream_type
Definition packet_i.h:259