Mercurial > hg > audiostuff
diff intercom/rtp.h @ 2:13be24d74cd2
import intercom-0.4.1
author | Peter Meerwald <pmeerw@cosy.sbg.ac.at> |
---|---|
date | Fri, 25 Jun 2010 09:57:52 +0200 |
parents | |
children | c6c5a16ce2f2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/intercom/rtp.h Fri Jun 25 09:57:52 2010 +0200 @@ -0,0 +1,81 @@ +/* rtp.h + * + * Copyright (C) DFS Deutsche Flugsicherung (2004, 2005). + * All Rights Reserved. + * Author: Andre Adrian + * + * subset of Real Time Protocol Version 2 (RFC3550 and RFC3551) + * handling of extension and padding is missing + * + * Version 0.3.5 + */ + +class RTP { + /* Format in Host Byte order. Conversion with htonl() to Network Byte + * order. This data structure is implementation dependent! + * Tested with GCC and x86 */ + + /* first 32bits */ + unsigned long sequence:16; + unsigned long payload_type:7; + unsigned long marker:1; + unsigned long csrc_count:4; + unsigned long extension:1; + unsigned long padding:1; + unsigned long version:2; + + /* second 32bits */ + unsigned long timestamp; + + /* third 32bits */ + unsigned long ssrc; /* used as unique identifier */ + + /* optional - used with telephone conference */ + unsigned long csrc[15]; + +public: + RTP::RTP(); + void RTP::init(int payload_type_, unsigned long ssrc_); + int RTP::add_csrc(unsigned long csrc_); + void RTP::reset_csrc(); + int RTP::find_csrc(unsigned long ssrc_); + void RTP::next(int frameduration); + int RTP::check(); + unsigned long RTP::getssrc() { + return ssrc; + }; + int RTP::get_pt() { + return (int) payload_type; + }; + int RTP::get_cc() { + return (int) csrc_count; + } +}; + +const unsigned PT_PCMU = 0; // 8000 sample/second, G.711 u-Law +const unsigned PT_GSM = 3; // 8000 sample/second, GSM +const unsigned PT_PCMA = 8; // 8000 sample/second, G.711 A-Law +const unsigned PT_G729 = 18; // 8000 sample/second, G.729 +const unsigned PT_EFR = 97; // inofficial type GSM-EFR +const unsigned PT_iLBC = 98; // inofficial type iLBC 20ms +const unsigned PT_G726 = 99; // inofficial type G.726 32kbps +const unsigned PT_SPX = 101; // inofficial type Wideband Speex + +// Speex Wideband kbps/Bytes: 16.8/42, 20.6/52, 23.8/60, 27.8/70, +// 34.2/86, 42.2/106 +const int SPX_BITRATE = 27800; +const int SPX_COMPLEXITY = 3; +const int SPX_QUALITY = 8; +const int SPX_ENH = 1; + +#define SZ_PCMA 160 +#define SZ_PCMU 160 +#define SZ_G726 80 +#define SZ_GSM 33 +#define SZ_EFR 31 +#define SZ_SPX 70 +#define SZ_iLBC 38 + +char *RTP_network_copy(char *to, RTP * from); +char *RTP_host_copy(RTP * to, char *from); +unsigned long random32(int type);