00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049 #ifndef TAO_AV_RTP_H
00050 #define TAO_AV_RTP_H
00051 #include "ace/pre.h"
00052
00053 #include "orbsvcs/AV/AV_export.h"
00054 #include "orbsvcs/AV/Protocol_Factory.h"
00055
00056 #include "ace/Service_Config.h"
00057
00058
00059 #define RTP_PT_BVC 22
00060
00061
00062 #define RTP_PT_RGB8 23
00063 #define RTP_PT_HDCC 24
00064 #define RTP_PT_CELLB 25
00065 #define RTP_PT_JPEG 26
00066 #define RTP_PT_CUSEEME 27
00067 #define RTP_PT_NV 28
00068 #define RTP_PT_PICW 29
00069 #define RTP_PT_CPV 30
00070 #define RTP_PT_H261 31
00071 #define RTP_PT_MPEG 32
00072 #define RTP_PT_MP2T 33
00073
00074
00075 #define RTP_PT_H261_COMPAT 127
00076
00077
00078 #define RTP_PT_PCMU 0
00079 #define RTP_PT_CELP 1
00080 #define RTP_PT_G721 2
00081 #define RTP_PT_GSM 3
00082 #define RTP_PT_DVI 5
00083 #define RTP_PT_LPC 7
00084 #define RTP_PT_PCMA 8
00085 #define RTP_PT_G722 9
00086 #define RTP_PT_L16_STEREO 10
00087 #define RTP_PT_L16_MONO 11
00088
00089
00090
00091
00092 #define RTP_PT_L16_OTHER 23
00093
00094
00095 #define RTP_EPOCH_OFFSET 2208988800UL
00096 #define RTP_VERSION 2
00097
00098 #define RTP_M 0x0080
00099 #define RTP_P 0x2000
00100 #define RTP_X 0x1000
00101
00102
00103 #define RTCP_PT_SR 200
00104 #define RTCP_PT_RR 201
00105 #define RTCP_PT_SDES 202
00106 #define RTCP_SDES_END 0
00107 #define RTCP_SDES_CNAME 1
00108 #define RTCP_SDES_NAME 2
00109 #define RTCP_SDES_EMAIL 3
00110 #define RTCP_SDES_PHONE 4
00111 #define RTCP_SDES_LOC 5
00112 #define RTCP_SDES_TOOL 6
00113 #define RTCP_SDES_NOTE 7
00114 #define RTCP_SDES_PRIV 8
00115 #define RTCP_PT_BYE 203
00116 #define RTCP_PT_APP 204
00117
00118 #define RTCP_SDES_MIN 1
00119
00120 #define RTP_SEQ_MOD (1<<16)
00121
00122
00123
00124
00125
00126 #define RTCP_SESSION_BW_FRACTION (0.05)
00127 #define RTCP_MIN_RPT_TIME (5.)
00128 #define RTCP_SENDER_BW_FRACTION (0.25)
00129 #define RTCP_RECEIVER_BW_FRACTION (1. - RTCP_SENDER_BW_FRACTION)
00130 #define RTCP_SIZE_GAIN (1./8.)
00131
00132
00133
00134
00135
00136 #define RTP_MTU 2*ACE_MAX_DGRAM_SIZE
00137
00138 #define MAXHDR 24
00139
00140 #include "orbsvcs/AV/Policy.h"
00141 #include "orbsvcs/AV/FlowSpec_Entry.h"
00142 #include "orbsvcs/AV/MCast.h"
00143
00144 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154 class TAO_AV_Export TAO_AV_RTP
00155 {
00156 public:
00157
00158 struct rtphdr
00159 {
00160 ACE_UINT16 rh_flags;
00161 ACE_UINT16 rh_seqno;
00162 ACE_UINT32 rh_ts;
00163 ACE_UINT32 rh_ssrc;
00164
00165 };
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185 struct jpeghdr
00186 {
00187 ACE_UINT32 off;
00188 unsigned char type;
00189 unsigned char q;
00190 unsigned char width;
00191 unsigned char height;
00192 };
00193
00194
00195
00196
00197 struct nvhdr
00198 {
00199 ACE_UINT16 width;
00200 ACE_UINT16 height;
00201
00202 };
00203
00204
00205
00206
00207 struct cellbhdr
00208 {
00209 ACE_UINT16 x;
00210 ACE_UINT16 y;
00211 ACE_UINT16 width;
00212 ACE_UINT16 height;
00213
00214 };
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226 #ifdef notdef
00227 struct h261hdr
00228 {
00229 ACE_UINT16 flags;
00230 ACE_UINT16 off;
00231 };
00232 #endif
00233
00234 struct bvchdr
00235 {
00236 unsigned char version;
00237 unsigned char pad;
00238 unsigned char width;
00239 unsigned char height;
00240 ACE_UINT32 quant;
00241 unsigned char sbit;
00242 unsigned char ebit;
00243 ACE_UINT16 blkno;
00244 };
00245
00246 };
00247
00248
00249
00250
00251
00252
00253
00254 class RTP_Packet
00255 {
00256 public:
00257
00258 RTP_Packet(char* buffer,
00259 int length);
00260
00261
00262 RTP_Packet(unsigned char padding,
00263 unsigned char marker,
00264 unsigned char payloadType,
00265 ACE_UINT32 sequenceNumber,
00266 ACE_UINT32 timeStamp,
00267 ACE_UINT32 syncSource,
00268 unsigned char contribSourcCount,
00269 ACE_UINT32 contribSourceList[],
00270 char *data,
00271 ACE_UINT16 dataSize);
00272
00273
00274 ~RTP_Packet(void);
00275
00276
00277 ACE_UINT16 packet_size(void);
00278
00279
00280 ACE_UINT16 payload_size(void);
00281
00282
00283 void get_frame_info (TAO_AV_frame_info *frame_info);
00284
00285
00286 int is_valid (void);
00287
00288
00289 unsigned int ver (void);
00290
00291
00292 unsigned int pad (void);
00293
00294
00295 unsigned int ext (void);
00296
00297
00298 unsigned int ext_bytes (void);
00299
00300
00301
00302 unsigned int cc (void);
00303
00304
00305 unsigned int mrk (void);
00306
00307
00308 unsigned int pt (void);
00309
00310
00311 ACE_UINT16 sn (void);
00312
00313
00314 ACE_UINT32 ts (void);
00315
00316
00317 ACE_UINT32 ssrc (void);
00318
00319
00320
00321
00322 void get_csrc_list (ACE_UINT32 **csrc_list, ACE_UINT16 &length);
00323
00324
00325
00326
00327 void get_payload (char **payload, ACE_UINT16 &size);
00328
00329
00330
00331 void get_packet_data (char **packet, ACE_UINT16 &size);
00332
00333 private:
00334
00335 char packet_[RTP_MTU];
00336
00337
00338
00339 ACE_UINT32 host_byte_order_csrc_list_[15];
00340
00341
00342 char host_byte_order_payload_[RTP_MTU];
00343
00344
00345 unsigned int extension_bytes_;
00346
00347
00348 ACE_UINT16 packet_size_;
00349
00350
00351 ACE_UINT16 payload_size_;
00352 };
00353
00354
00355
00356
00357
00358 class TAO_AV_Export TAO_AV_RTP_Object : public TAO_AV_Protocol_Object
00359 {
00360 public:
00361 TAO_AV_RTP_Object (TAO_AV_Callback *callback,
00362 TAO_AV_Transport *transport);
00363
00364 virtual ~TAO_AV_RTP_Object (void);
00365
00366 virtual int start (void);
00367 virtual int stop (void);
00368 virtual int handle_input (void);
00369 virtual int send_frame (ACE_Message_Block *frame,
00370 TAO_AV_frame_info *frame_info = 0);
00371
00372 virtual int send_frame (const iovec *iov,
00373 int iovcnt,
00374 TAO_AV_frame_info *frame_info = 0);
00375
00376 virtual int send_frame (const char*buf,
00377 size_t len);
00378
00379 virtual int destroy (void);
00380 virtual int set_policies (const TAO_AV_PolicyList &policy_list);
00381 virtual void control_object (TAO_AV_Protocol_Object *object);
00382
00383 protected:
00384 ACE_UINT16 sequence_num_;
00385 ACE_UINT32 timestamp_offset_;
00386 int format_;
00387 ACE_UINT32 ssrc_;
00388 TAO_AV_Protocol_Object *control_object_;
00389
00390
00391 ACE_Message_Block frame_;
00392
00393 int connection_gone_;
00394 };
00395
00396
00397
00398
00399
00400
00401
00402 class TAO_AV_Export TAO_AV_RTP_Flow_Factory : public TAO_AV_Flow_Protocol_Factory
00403 {
00404 public:
00405
00406 TAO_AV_RTP_Flow_Factory (void);
00407 virtual ~TAO_AV_RTP_Flow_Factory (void);
00408 virtual int init (int argc, char *argv[]);
00409 virtual int match_protocol (const char *flow_string);
00410 virtual TAO_AV_Protocol_Object* make_protocol_object (TAO_FlowSpec_Entry *entry,
00411 TAO_Base_StreamEndPoint *endpoint,
00412 TAO_AV_Flow_Handler *handler,
00413 TAO_AV_Transport *transport);
00414 virtual const char*control_flow_factory (void);
00415 };
00416
00417 TAO_END_VERSIONED_NAMESPACE_DECL
00418
00419 ACE_STATIC_SVC_DECLARE (TAO_AV_RTP_Flow_Factory)
00420 ACE_FACTORY_DECLARE (TAO_AV, TAO_AV_RTP_Flow_Factory)
00421
00422 #include "ace/post.h"
00423 #endif