48#include <BasicUsageEnvironment.hh>
49#include <RTSPServer.hh>
50#include <GroupsockHelper.hh>
61#define MOD_NAME "[RTSP] "
65 Boolean reuseFirstSource,
rtsp_types_t avType,
int rtpPort,
72 Boolean reuseFirstSource,
rtsp_types_t avType,
int rtpPort,
74 ServerMediaSubsession(env), fReuseFirstSource(reuseFirstSource),
75 fLastStreamToken(nullptr), rtsp_params(
params)
117 const char *ip_ver_list_addr =
nullptr;
118 const char *control = trackId();
119 switch (addressFamily) {
121 ip_ver_list_addr =
"4 0.0.0.0";
124 ip_ver_list_addr =
"6 ::";
127 ip_ver_list_addr =
"<VER> <TO_BE_FILLED>";
128 control =
"<CONTROL>";
141 if (rtpPayloadType < 0) {
142 MSG(ERROR,
"Unsupported %s codec %s!\n", mspec[
avType].mname,
149 char const *
const sdpFmt =
"m=%s %u RTP/AVP %d\r\n"
155 unsigned sdpFmtSize = strlen(sdpFmt) + strlen(mspec->
mname) +
158 + strlen(ip_ver_list_addr) + 20
159 + strlen(rtpmapLine) + strlen(control);
160 char *
sdpLines =
new char[sdpFmtSize];
172 MSG(VERBOSE,
"SDP%s:\n%s\n",
173 addressFamily == AF_UNSPEC ?
" (preliminary)" :
"",
fSDPLines);
177 struct sockaddr_storage
const &clientAddress, Port
const& clientRTPPort,
178 Port
const& clientRTCPPort,
int ,
179 unsigned char ,
unsigned char ,
181 struct sockaddr_storage& , uint8_t& ,
182 Boolean& , Port& serverRTPPort, Port& serverRTCPPort,
188 serverRTCPPort = rtcp;
198 serverRTCPPort = rtcp;
208 void* ,
unsigned short& ,
210 ServerRequestAlternativeByteHandler* ,
218 memset(pathV, 0,
sizeof(pathV));
238 sizeof host,
nullptr, 0, NI_NUMERICHOST);
253 memset(pathA, 0,
sizeof(pathA));
274 sizeof host,
nullptr, 0, NI_NUMERICHOST);
294 memset(pathV, 0,
sizeof(pathV));
323 memset(pathA, 0,
sizeof(pathA));
static const struct media_spec media_params[]
const char * get_codec_name(codec_t codec)
Destinations * Vdestination
void getStreamParameters(unsigned clientSessionId, struct sockaddr_storage const &clientAddress, Port const &clientRTPPort, Port const &clientRTCPPort, int tcpSocketNum, unsigned char rtpChannelId, unsigned char rtcpChannelId, TLSState *tlsState, struct sockaddr_storage &destinationAddress, uint8_t &destinationTTL, Boolean &isMulticast, Port &serverRTPPort, Port &serverRTCPPort, void *&streamToken) override
Destinations * Adestination
void setSDPLines(int addressFamily)
struct rtsp_server_parameters rtsp_params
static BasicRTSPOnlySubsession * createNew(UsageEnvironment &env, Boolean reuseFirstSource, rtsp_types_t avType, int rtpPort, struct rtsp_server_parameters)
char const * sdpLines(int addressFamily) override
void startStream(unsigned clientSessionId, void *streamToken, TaskFunc *rtcpRRHandler, void *rtcpRRHandlerClientData, unsigned short &rtpSeqNum, unsigned &rtpTimestamp, ServerRequestAlternativeByteHandler *serverRequestAlternativeByteHandler, void *serverRequestAlternativeByteHandlerClientData) override
BasicRTSPOnlySubsession(UsageEnvironment &env, Boolean reuseFirstSource, rtsp_types_t avType, int rtpPort, struct rtsp_server_parameters)
~BasicRTSPOnlySubsession() override
void deleteStream(unsigned clientSessionId, void *&streamToken) override
struct sockaddr_storage addr
const char * get_name_to_audio_codec(audio_codec_t codec)
static void new_message(struct module *m)
void append_message_path(char *buf, int buflen, const enum module_class *modules)
@ STR_LEN
"standard" string length placeholder
struct response * send_message(struct module *root, const char *const_path, struct message *msg)
Sends message without waiting for response.
void free_response(struct response *r)
@ SENDER_MSG_CHANGE_RECEIVER
#define IN6_MAX_ASCII_LEN
int get_audio_rtp_pt_rtpmap(audio_codec_t codec, int sample_rate, int channels, char rtpmapLine[STR_LEN])
int get_video_rtp_pt_rtpmap(codec_t codec, char rtpmapLine[STR_LEN])
enum msg_sender_type type