2
|
1 /* rtp.h
|
|
2 *
|
|
3 * Copyright (C) DFS Deutsche Flugsicherung (2004, 2005).
|
|
4 * All Rights Reserved.
|
|
5 * Author: Andre Adrian
|
|
6 *
|
|
7 * subset of Real Time Protocol Version 2 (RFC3550 and RFC3551)
|
|
8 * handling of extension and padding is missing
|
|
9 *
|
|
10 * Version 0.3.5
|
|
11 */
|
|
12
|
|
13 class RTP {
|
|
14 /* Format in Host Byte order. Conversion with htonl() to Network Byte
|
|
15 * order. This data structure is implementation dependent!
|
|
16 * Tested with GCC and x86 */
|
|
17
|
|
18 /* first 32bits */
|
|
19 unsigned long sequence:16;
|
|
20 unsigned long payload_type:7;
|
|
21 unsigned long marker:1;
|
|
22 unsigned long csrc_count:4;
|
|
23 unsigned long extension:1;
|
|
24 unsigned long padding:1;
|
|
25 unsigned long version:2;
|
|
26
|
|
27 /* second 32bits */
|
|
28 unsigned long timestamp;
|
|
29
|
|
30 /* third 32bits */
|
|
31 unsigned long ssrc; /* used as unique identifier */
|
|
32
|
|
33 /* optional - used with telephone conference */
|
|
34 unsigned long csrc[15];
|
|
35
|
|
36 public:
|
|
37 RTP::RTP();
|
|
38 void RTP::init(int payload_type_, unsigned long ssrc_);
|
|
39 int RTP::add_csrc(unsigned long csrc_);
|
|
40 void RTP::reset_csrc();
|
|
41 int RTP::find_csrc(unsigned long ssrc_);
|
|
42 void RTP::next(int frameduration);
|
|
43 int RTP::check();
|
|
44 unsigned long RTP::getssrc() {
|
|
45 return ssrc;
|
|
46 };
|
|
47 int RTP::get_pt() {
|
|
48 return (int) payload_type;
|
|
49 };
|
|
50 int RTP::get_cc() {
|
|
51 return (int) csrc_count;
|
|
52 }
|
|
53 };
|
|
54
|
|
55 const unsigned PT_PCMU = 0; // 8000 sample/second, G.711 u-Law
|
|
56 const unsigned PT_GSM = 3; // 8000 sample/second, GSM
|
|
57 const unsigned PT_PCMA = 8; // 8000 sample/second, G.711 A-Law
|
|
58 const unsigned PT_G729 = 18; // 8000 sample/second, G.729
|
|
59 const unsigned PT_EFR = 97; // inofficial type GSM-EFR
|
|
60 const unsigned PT_iLBC = 98; // inofficial type iLBC 20ms
|
|
61 const unsigned PT_G726 = 99; // inofficial type G.726 32kbps
|
|
62 const unsigned PT_SPX = 101; // inofficial type Wideband Speex
|
|
63
|
|
64 // Speex Wideband kbps/Bytes: 16.8/42, 20.6/52, 23.8/60, 27.8/70,
|
|
65 // 34.2/86, 42.2/106
|
|
66 const int SPX_BITRATE = 27800;
|
|
67 const int SPX_COMPLEXITY = 3;
|
|
68 const int SPX_QUALITY = 8;
|
|
69 const int SPX_ENH = 1;
|
|
70
|
|
71 #define SZ_PCMA 160
|
|
72 #define SZ_PCMU 160
|
|
73 #define SZ_G726 80
|
|
74 #define SZ_GSM 33
|
|
75 #define SZ_EFR 31
|
|
76 #define SZ_SPX 70
|
|
77 #define SZ_iLBC 38
|
|
78
|
|
79 char *RTP_network_copy(char *to, RTP * from);
|
|
80 char *RTP_host_copy(RTP * to, char *from);
|
|
81 unsigned long random32(int type);
|