Minor improvements to the SAT>IP client.

This commit is contained in:
feyris-tan 2025-09-09 22:08:03 +02:00
parent f0b07ab676
commit a1ce51519c
4 changed files with 45 additions and 21 deletions

View File

@ -2,7 +2,7 @@
"profiles": { "profiles": {
"skyscraper8": { "skyscraper8": {
"commandName": "Project", "commandName": "Project",
"commandLineArgs": "satip autodetect 1 V 11347 S2 22000", "commandLineArgs": "satip autodetect 1 V 12363 S 27500",
"remoteDebugEnabled": false "remoteDebugEnabled": false
}, },
"Container (Dockerfile)": { "Container (Dockerfile)": {

View File

@ -76,6 +76,11 @@ namespace skyscraper8
private IPAddress AutodetectIPAddress() private IPAddress AutodetectIPAddress()
{ {
SsdpDevice firstSatIpServer = SsdpClient.GetFirstSatIpServer(1000, null); SsdpDevice firstSatIpServer = SsdpClient.GetFirstSatIpServer(1000, null);
if (firstSatIpServer == null)
{
logger.WarnFormat("Didn't find any SAT>IP servers.");
return null;
}
IPAddress ipAddress = firstSatIpServer.GetIpAddress(); IPAddress ipAddress = firstSatIpServer.GetIpAddress();
logger.InfoFormat("Found SAT>IP Server at {0}", ipAddress); logger.InfoFormat("Found SAT>IP Server at {0}", ipAddress);
return ipAddress; return ipAddress;
@ -98,6 +103,7 @@ namespace skyscraper8
RtspDescribeResponse describe = rtspClient.GetDescribe(url); RtspDescribeResponse describe = rtspClient.GetDescribe(url);
SessionDescriptionProtocol sessionDescriptionProtocol = describe.GetSessionDescriptionProtocol(); SessionDescriptionProtocol sessionDescriptionProtocol = describe.GetSessionDescriptionProtocol();
packetQueue = new Queue<byte[]>();
RtspSetupResponse setup = rtspClient.GetSetup(url); RtspSetupResponse setup = rtspClient.GetSetup(url);
setup.OnRtcpPacket += Setup_OnRtcpPacket; setup.OnRtcpPacket += Setup_OnRtcpPacket;
setup.OnRtpPacket += Setup_OnRtpPacket; setup.OnRtpPacket += Setup_OnRtpPacket;
@ -113,30 +119,44 @@ namespace skyscraper8
RtspPlayResponse play = rtspClient.GetPlay(setup); RtspPlayResponse play = rtspClient.GetPlay(setup);
while (!context.IsAbortConditionMet()) while (true)
{ {
Thread.Sleep(2000); if (packetQueue.Count >= 1)
Keepalive(url); {
byte[] buffer;
lock (packetQueue)
{
buffer = packetQueue.Dequeue();
}
context.IngestSinglePacket(buffer);
}
else
{
Thread.Sleep(1);
}
if (context.IsAbortConditionMet())
break;
} }
rtspClient.GetTeardown(setup); rtspClient.GetTeardown(setup);
rtspClient.Dispose(); rtspClient.Dispose();
} }
private byte[] buffer; private Queue<byte[]> packetQueue;
private ObjectStorage objectStorage; private ObjectStorage objectStorage;
private DataStorage dataStorage; private DataStorage dataStorage;
private SkyscraperContext context; private SkyscraperContext context;
private void Setup_OnRtpPacket(byte[] data, int length) private void Setup_OnRtpPacket(byte[] data, int length)
{ {
if (buffer == null)
buffer = new byte[188];
for (int i = 12; i < length; i += 188) for (int i = 12; i < length; i += 188)
{ {
Array.Clear(buffer); byte[] buffer = new byte[188];
Array.Copy(data, i, buffer, 0, 188); Array.Copy(data, i, buffer, 0, 188);
context.IngestSinglePacket(buffer); lock (packetQueue)
{
packetQueue.Enqueue(buffer);
}
} }
} }

View File

@ -118,18 +118,20 @@ namespace skyscraper8.SatIp
RtspResponseHeader response = GetResponse(request.ListHeaders(RootPath)); RtspResponseHeader response = GetResponse(request.ListHeaders(RootPath));
RtspSetupResponse setupResponse = new RtspSetupResponse(response); RtspSetupResponse setupResponse = new RtspSetupResponse(response);
if (response.statusCode == 200) switch (response.statusCode)
{ {
setupResponse.RtpSocket = rtpSocket; case 200:
setupResponse.RtcpSocket = rtcpSocket; setupResponse.RtpSocket = rtpSocket;
setupResponse.SetupListeners(); setupResponse.RtcpSocket = rtcpSocket;
setupResponse.Valid = true; setupResponse.SetupListeners();
setupResponse.Valid = true;
break;
case 404:
setupResponse.Valid = true;
break;
default:
throw new NotImplementedException(setupResponse.RtspStatusCode.ToString());
} }
else
{
setupResponse.Valid = false;
throw new NotImplementedException(setupResponse.RtspStatusCode.ToString());
}
return setupResponse; return setupResponse;
} }

View File

@ -171,6 +171,8 @@ namespace skyscraper8.SimpleServiceDiscoveryProtocol
public static SsdpDevice GetFirstSatIpServer(int timeout = 1000, IRtspCache cache = null) public static SsdpDevice GetFirstSatIpServer(int timeout = 1000, IRtspCache cache = null)
{ {
List<SsdpDevice> ssdpDevices = GetSsdpDevices(1000, "urn:ses-com:device:SatIPServer:1", cache); List<SsdpDevice> ssdpDevices = GetSsdpDevices(1000, "urn:ses-com:device:SatIPServer:1", cache);
if (ssdpDevices.Count == 0)
return null;
return ssdpDevices.First(); return ssdpDevices.First();
} }