private bool HandleRTSPResponse200Announce(RtspProtocol rtspProtocol, Variant requestHeaders, ref string requestContent, Variant responseHeaders, ref string responseContent)
{
bool forceTcp = rtspProtocol.CustomParameters["forceTcp"];
//3. Get the outbound connectivity
var pConnectivity = GetOutboundConnectivity(rtspProtocol,forceTcp);
if (pConnectivity == null)
{
FATAL("Unable to get the outbound connectivity");
return false;
}
var param = rtspProtocol.CustomParameters;
string trackId = "";
bool isAudio = false;
if (param["audioTrackId"] != null)
{
trackId = param["audioTrackId"];
param["audioTrackId"] = null;
param["lastSetup"] = "audio";
isAudio = true;
pConnectivity.HasAudio = true;
}
else
{
if (param["videoTrackId"] != null)
{
trackId = param["videoTrackId"];
param["videoTrackId"] = null;
param["lastSetup"] = "video";
pConnectivity.HasVideo = true;
}
}
if (trackId != "")
{
var variantUri = param["uri"];
var uri = variantUri["fullUri"] + "/trackID=" + trackId;
rtspProtocol.PushRequestFirstLine(RTSP_METHOD_SETUP, uri, RTSP_VERSION_1_0);
var transport = forceTcp ? $"RTP/AVP/TCP;unicast;interleaved={(isAudio ? pConnectivity.AudioChannels : pConnectivity.VideoChannels)};mode=record" : $"RTP/AVP;unicast;client_port={(isAudio ? pConnectivity.AudioChannels : pConnectivity.VideoChannels)};mode=record";
rtspProtocol.PushRequestHeader(RTSP_HEADERS_TRANSPORT, transport);
return rtspProtocol.SendRequestMessage();
}
else
{
FATAL("Bogus RTSP connection");
rtspProtocol.EnqueueForDelete();
return false;
}
}