public bool CreateCarriers(InboundRtpProtocol rtp, RtcpProtocol rtcp)
{
UDPCarrier pCarrier1 = null;
UDPCarrier pCarrier2 = null;
for (var i = 0; i < 10; i++)
{
if (pCarrier1 != null)
{
pCarrier1.Dispose();
pCarrier1 = null;
}
if (pCarrier2 != null)
{
pCarrier2.Dispose();
pCarrier2 = null;
}
pCarrier1 = UDPCarrier.Create("0.0.0.0", 0);
if (pCarrier1 == null)
{
WARN("Unable to create UDP carrier for RTP");
continue;
}
pCarrier2 = (pCarrier1.NearPort % 2) == 0 ? UDPCarrier.Create("0.0.0.0",pCarrier1.NearPort + 1) : UDPCarrier.Create("0.0.0.0", pCarrier1.NearPort - 1);
if (pCarrier2 == null)
{
WARN("Unable to create UDP carrier for RTCP");
continue;
}
if (pCarrier1.NearPort > pCarrier2.NearPort)
{
WARN("Switch carriers");
UDPCarrier pTemp = pCarrier1;
pCarrier1 = pCarrier2;
pCarrier2 = pTemp;
}
pCarrier1.Protocol = rtp.FarEndpoint;
rtp.FarEndpoint.IOHandler = pCarrier1;
pCarrier2.Protocol = rtcp.FarEndpoint;
rtcp.FarEndpoint.IOHandler = pCarrier2;
return pCarrier1.StartAccept() | pCarrier2.StartAccept();
}
if (pCarrier1 != null)
{
pCarrier1.Dispose();
pCarrier1 = null;
}
if (pCarrier2 != null)
{
pCarrier2.Dispose();
pCarrier2 = null;
}
return false;
}