#ifndef _NET_COMMON_H
#include "NetCommon.h"
#endif
#include <stdio.h>
#ifdef VXWORKS
#include <inetLib.h>
#endif
/* Some systems (e.g., SunOS) have header files that erroneously declare inet_addr() as taking no arguments.
* This confuses C++. To overcome this, we use our own routine, implemented in C.
*/
unsigned our_inet_addr(cp)
char const* cp;
{
return inet_addr(cp);
}
#define initializeWinsockIfNecessary() 1
#ifndef NULL
#define NULL 0
#endif
#ifdef USE_SYSTEM_RANDOM
/* Use the system-supplied "random()" and "srandom()" functions */
#include <stdlib.h>
long our_random() {
return random();
}
void our_srandom(unsigned int x) {
srandom(x);
}
#else
/* Use our own implementation of the "random()" and "srandom()" functions */
/*
* random.c:
*
* An improved random number generation package. In addition to the standard
* rand()/srand() like interface, this package also has a special state info
* interface. The our_initstate() routine is called with a seed, an array of
* bytes, and a count of how many bytes are being passed in; this array is
* then initialized to contain information for random number generation with
* that much state information. Good sizes for the amount of state
* information are 32, 64, 128, and 256 bytes. The state can be switched by
* calling the our_setstate() routine with the same array as was initiallized
* with our_initstate(). By default, the package runs with 128 bytes of state
* information and generates far better random numbers than a linear
* congruential generator. If the amount of state information is less than
* 32 bytes, a simple linear congruential R.N.G. is used.
*
* Internally, the state information is treated as an array of longs; the
* zeroeth element of the array is the type of R.N.G. being used (small
* integer); the remainder of the array is the state information for the
* R.N.G. Thus, 32 bytes of state information will give 7 longs worth of
* state information, which will allow a degree seven polynomial. (Note:
* the zeroeth word of state information also has some other information
* stored in it -- see our_setstate() for details).
*
* The random number generation technique is a linear feedback shift register
* approach, employing trinomials (since there are fewer terms to sum up that
* way). In this approach, the least significant bit of all the numbers in
* the state table will act as a linear feedback shift register, and will
* have period 2^deg - 1 (where deg is the degree of the polynomial being
* used, assuming that the polynomial is irreducible and primitive). The
* higher order bits will have longer periods, since their values are also
* influenced by pseudo-random carries out of the lower bits. The total
* period of the generator is approximately deg*(2**deg - 1); thus doubling
* the amount of state information has a vast influence on the period of the
* generator. Note: the deg*(2**deg - 1) is an approximation only good for
* large deg, when the period of the shift register is the dominant factor.
* With deg equal to seven, the period is actually much longer than the
* 7*(2**7 - 1) predicted by this formula.
*/
/*
* For each of the currently supported random number generators, we have a
* break value on the amount of state information (you need at least this
* many bytes of state info to support this random number generator), a degree
* for the polynomial (actually a trinomial) that the R.N.G. is based on, and
* the separation between the two lower order coefficients of the trinomial.
*/
#define TYPE_0 0 /* linear congruential */
#define BREAK_0 8
#define DEG_0 0
#define SEP_0 0
#define TYPE_1 1 /* x**7 + x**3 + 1 */
#define BREAK_1 32
#define DEG_1 7
#define SEP_1 3
#define TYPE_2 2 /* x**15 + x + 1 */
#define BREAK_2 64
#define DEG_2 15
#define SEP_2 1
#define TYPE_3 3 /* x**31 + x**3 + 1 */
#define BREAK_3 128
#define DEG_3 31
#define SEP_3 3
#define TYPE_4 4 /* x**63 + x + 1 */
#define BREAK_4 256
#define DEG_4 63
#define SEP_4 1
/*
* Array versions of the above information to make code run faster --
* relies on fact that TYPE_i == i.
*/
#define MAX_TYPES 5 /* max number of types above */
static int const degrees[MAX_TYPES] = { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 };
static int const seps [MAX_TYPES] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 };
/*
* Initially, everything is set up as if from:
*
* our_initstate(1, &randtbl, 128);
*
* Note that this initialization takes advantage of the fact that srandom()
* advances the front and rear pointers 10*rand_deg times, and hence the
* rear pointer which starts at 0 will also end up at zero; thus the zeroeth
* element of the state information, which contains info about the current
* position of the rear pointer is just
*
* MAX_TYPES * (rptr - state) + TYPE_3 == TYPE_3.
*/
static long randtbl[DEG_3 + 1] = {
TYPE_3,
0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, 0xde3b81e0, 0xdf0a6fb5,
0xf103bc02, 0x48f340fb, 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd,
0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, 0xda672e2a, 0x1588ca88,
0xe369735d, 0x904f35f7, 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc,
0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, 0xf5ad9d0e, 0x8999220b,
0x27fb47b9,
};
/*
* fptr and rptr are two pointers into the state info, a front and a rear
* pointer. These two pointers are always rand_sep places aparts, as they
* cycle cyclically through the state information. (Yes, this does mean we
* could get away with just one pointer, but the code for random() is more
* efficient this way). The pointers are left positioned as they would be
* from the call
*
* our_initstate(1, randtbl, 128);
*
* (The position of the rear pointer, rptr, is really 0 (as explained above
* in the initialization of randtbl) because the state table pointer is set
* to point to randtbl[1] (as explained below).
*/
static long* fptr = &randtbl[SEP_3 + 1];
static long* rptr = &randtbl[1];
/*
* The following things are the pointer to the state information table, the
* type of the current generator, the degree of the current polynomial being
* used, and the separation between the two pointers. Note that for efficiency
* of random(), we remember the first location of the state information, not
* the zeroeth. Hence it is valid to access state[-1], which is used to
* store the type of the R.N.G. Also, we remember the last location, since
* this is more efficient than indexing every time to find the address of
* the last element to see if the front and rear pointers have wrapped.
*/
static long *state = &randtbl[1];
static int rand_type = TYPE_3;
static int rand_deg = DEG_3;
static int rand_sep = SEP_3;
static long* end_ptr = &randtbl[DEG_3 + 1];
/*
* srandom:
*
* Initialize the random number generator based on the given seed. If the
* type is the trivial no-state-information type, just remember the seed.
* Otherwise, initializes state[] based on the given "seed" via a linear
* congruential generator. Then, the pointers are set to known locations
* that are exactly rand_sep places apart. Lastly, it cycles the state
* information a given number of times to get rid of any initial dependencies
* introduced by the L.C.R.N.G. Note that the initialization of randtbl[]
* for default usage relies on values produced by this routine.
*/
long our_random(void); /*forward*/
void
our_srandom(unsigned int x)
{
register int i;
if (rand_type == TYPE_0)
state[0] = x;
else {
state[0] = x;
for (i = 1; i < rand_deg; i++)
state[i] = 1103515245 * state[i - 1] + 12345;
fptr = &state[rand_sep];
rptr = &state[0];
for (i = 0; i < 10 * rand_deg; i++)
(void)our_random();
}
}
/*
* our_initstate:
*
* Initialize the state information in the given array of n bytes for future
* random number generation. Based on the number of bytes we are given, and
* the break values for the different R.N.G.'s, we choose the best (larg
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
共134个文件
hh:63个
cpp:57个
c:4个
最近公司项目需要,需要定制一个rtsp的服务器。单纯自己通过学习阅读协议有点漫无边际。通过网上一些小项目代码学习,对协议解析不是十分的完善,有点隔靴搔痒。学习还是从经典入手。 但是由于live555强大的跨平台和多支持功能实现使这个框架十分的庞大,在便于学习的出发点下,我对live555的框架进行很大幅度的裁剪,去掉了所有的音频部分,不关心的客户端部分,只保留了h264和linux编译部分。
资源推荐
资源详情
资源评论
收起资源包目录
Live555基于h264嵌入式linux下rtsp项目的裁剪 (134个子文件)
inet.c 13KB
rtcp_from_spec.c 10KB
our_md5.c 10KB
our_md5hl.c 2KB
RTSPServer.cpp 62KB
RTCP.cpp 32KB
H264VideoStreamFramer.cpp 31KB
MultiFramedRTPSource.cpp 20KB
GroupsockHelper.cpp 19KB
Groupsock.cpp 19KB
OnDemandServerMediaSubsession.cpp 17KB
RTPInterface.cpp 16KB
MultiFramedRTPSink.cpp 16KB
ServerMediaSession.cpp 13KB
RTPSource.cpp 13KB
H264VideoRTPSink.cpp 12KB
RTPSink.cpp 11KB
RTSPServerSupportingHTTPStreaming.cpp 11KB
NetAddress.cpp 9KB
BasicTaskScheduler.cpp 8KB
BasicTaskScheduler0.cpp 7KB
BasicHashTable.cpp 7KB
StreamParser.cpp 7KB
RTSPCommon.cpp 7KB
MPEGVideoStreamFramer.cpp 6KB
H264VideoRTPSource.cpp 6KB
MediaSink.cpp 6KB
ByteStreamFileSource.cpp 6KB
DelayQueue.cpp 6KB
EBMLNumber.cpp 6KB
DigestAuthentication.cpp 5KB
BitVector.cpp 5KB
H264VideoFileServerMediaSubsession.cpp 5KB
Media.cpp 5KB
FileSink.cpp 4KB
TCPStreamSink.cpp 4KB
H264VideoStreamDiscreteFramer.cpp 4KB
ByteStreamMemoryBufferSource.cpp 4KB
NetInterface.cpp 4KB
Base64.cpp 4KB
FramedSource.cpp 4KB
BasicUDPSink.cpp 4KB
DynamicRTSPServer.cpp 3KB
live555MediaServer.cpp 3KB
GroupEId.cpp 3KB
BasicUsageEnvironment0.cpp 3KB
MediaSource.cpp 2KB
InputFile.cpp 2KB
BasicUsageEnvironment.cpp 2KB
Locale.cpp 2KB
IOHandlers.cpp 2KB
UsageEnvironment.cpp 2KB
MPEGVideoStreamParser.cpp 2KB
FramedFilter.cpp 2KB
OutputFile.cpp 2KB
strDup.cpp 1KB
VideoRTPSink.cpp 1KB
FileServerMediaSubsession.cpp 1KB
TextRTPSink.cpp 1KB
HashTable.cpp 1KB
FramedFileSource.cpp 1KB
SimpleRTPSink.dep 2KB
SimpleRTPSource.dep 2KB
BasicUDPSource.dep 1KB
ByteStreamMultiFileSource.dep 1KB
rtcp_from_spec.h 2KB
our_md5.h 2KB
NetCommon.h 2KB
RTSPServer.hh 11KB
RTPSource.hh 8KB
RTPSink.hh 8KB
RTCP.hh 7KB
OnDemandServerMediaSubsession.hh 7KB
ServerMediaSession.hh 7KB
Groupsock.hh 7KB
UsageEnvironment.hh 6KB
MultiFramedRTPSink.hh 6KB
MultiFramedRTPSource.hh 5KB
StreamParser.hh 5KB
DelayQueue.hh 5KB
H264VideoRTPSink.hh 4KB
GroupsockHelper.hh 4KB
NetAddress.hh 4KB
liveMedia.hh 4KB
MediaSink.hh 4KB
EBMLNumber.hh 4KB
Media.hh 4KB
RTPInterface.hh 4KB
NetInterface.hh 4KB
MPEGVideoStreamParser.hh 4KB
BasicUsageEnvironment0.hh 4KB
BasicHashTable.hh 3KB
TunnelEncaps.hh 3KB
H264VideoStreamFramer.hh 3KB
FramedSource.hh 3KB
DigestAuthentication.hh 3KB
RTSPServerSupportingHTTPStreaming.hh 3KB
ByteStreamFileSource.hh 3KB
GroupEId.hh 3KB
MPEGVideoStreamFramer.hh 3KB
共 134 条
- 1
- 2
资源评论
- 谁叫的TVG2017-08-28请问这个文件怎么编译
- hellotgs2021-09-07资源完整,有用
- adream992017-08-31好久之前网上的源码。谢了。
ben_hv
- 粉丝: 3
- 资源: 34
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功