00001
#ifndef SERVERSIDEREFLECTORGM_H
00002
#define SERVERSIDEREFLECTORGM_H
00003
00004
00005
#include "SHGraphManager.h"
00006
#include "MNRTPSourceSH.h"
00007
#include "DynMultiplierSH.h"
00008
#include "MNRTPutildefs.h"
00009
#include <vector>
00010
00015 class ServerSideReflectorGM :
public SHGraphManager
00016 {
00017
private:
00018
struct Subsession
00019 {
00020
SH::RTPSourceSH* _rtpSourceSH;
00021
SH::DynMultiplierSH* _dynMultiplierSH;
00022
00023
bool _initialized;
00024 };
00025 std::vector<Subsession*> _subsessions;
00026
00027
MediaState _state;
00028
00029
00030
00031
public:
00032
ServerSideReflectorGM(
GMUser* user,
MNSelector& sel);
00033
00034
~ServerSideReflectorGM();
00035
void init(
int idx,
MNSocket* localUpRtp,
MNSocket* localUpRtcp,
int distantPortUp,
MNString& server,
int bandwidth);
00036
void init(
int idx,
int rtpPayloadtype);
00037
00039
void match(
int idx,
SH::Base* sh);
00040
00042
void unmatch(
int idx,
SH::Base* sh);
00043
void startStreaming();
00044
void stopStreaming();
00045
int getNptSeconds();
00046
00048
void setNptSeek(
int npt);
00049
00053
void setRTPTimestamp(
int idx,
u_int32 rtptime);
00054
00056 size_t
getClientSideReflectorGMCount();
00057
00058
private:
00059
static void startSubsession(Subsession* subsession);
00060
static void stopSubsession(Subsession* subsession);
00061
static void destroySubsession(Subsession* subsession);
00062 ServerSideReflectorGM::Subsession* getSubsession(
int idx);
00063
00064
00065
public:
00066
virtual bool graphManNotify(
int idx,
SH::Base* caller, SH::Notification attribute,
void* msg );
00067 };
00068
00069
#endif