=====================
myRTSPServer.cpp
1.建立任务调度
scheduler = BasicTaskScheduler::createNew();
env = BasicUsageEnvironment::createNew(*scheduler);
2.建立RTP/RTCP端口
unsigned short rtpPortNumAudio = getDestAudioPort();
unsigned short rtcpPortNumAudio = rtpPortNumAudio +1;
struct in_addr destinationAddress;
destinationAddress.s_addr = our_inet_addr("192.168.10.100"); //不设置会导致组播,client端IP
const Port rtpPortAudio(rtpPortNumAudio);
const Port rtcpPortAudio(rtcpPortNumAudio);
rtpGroupsockAudio = new Groupsock(*env, destinationAddress, rtpPortAudio, ttl);
rtcpGroupsockAudio = new Groupsock(*env, destinationAddress, rtcpPortAudio, ttl);
3.建立会话
CreateAudioSink(rtpGroupsockAudio);
audioRTCP = RTCPInstance::createNew(*env, rtcpGroupsockAudio,
getBandwidthAudio(), (const unsigned char*)getName(),
audioSink, NULL /* we're a server */, isSSM);
4.创建RTSPServer
rtspServer = RTSPServer::createNew(*env,8554);
sms = ServerMediaSession::createNew(*env, "tanktest", "Audio Stream",
"Session streamed by \"Tank\"",
isSSM);
sms->addSubsession(PassiveServerMediaSubsession::createNew(*audioSink, audioRTCP));
rtspServer->addServerMediaSession(sms);
char* url = rtspServer->rtspURL(sms);
strcpy(remoteUrl,url);
注意:
live555/liveMedia/RTSPServer.cpp
void RTSPServer::RTSPClientSession
::handleCmd_SETUP(char const* cseq,
char const* urlPreSuffix, char const* urlSuffix,
char const* fullRequestStr);
live555/liveMedia/PassiveServerMediaSubsession.cpp
void PassiveServerMediaSubsession
::getStreamParameters(unsigned clientSessionId,
netAddressBits clientAddress,
Port const& /*clientRTPPort*/,
Port const& clientRTCPPort,
int /*tcpSocketNum*/,
unsigned char /*rtpChannelId*/,
unsigned char /*rtcpChannelId*/,
netAddressBits& destinationAddress,
u_int8_t& destinationTTL,
Boolean& isMulticast,
Port& serverRTPPort,
Port& serverRTCPPort,
void*& streamToken);