Start RTSP handshake work (pending RTSPLib integration)

This commit is contained in:
Cameron Gutman 2014-06-29 00:53:37 -07:00
parent 50733f6d7a
commit caa6a203ed
6 changed files with 81 additions and 11 deletions

View File

@ -7,7 +7,7 @@ static CONNECTION_LISTENER_CALLBACKS ListenerCallbacks;
static const char* stageNames[STAGE_MAX] = {
"none",
"platform initialization",
"handshake",
"RTSP handshake",
"control stream initialization",
"video stream initialization",
"audio stream initialization",
@ -71,9 +71,9 @@ void LiStopConnection(void) {
stage--;
Limelog("done\n");
}
if (stage == STAGE_HANDSHAKE) {
Limelog("Terminating handshake...");
terminateHandshake();
if (stage == STAGE_RTSP_HANDSHAKE) {
Limelog("Terminating RTSP handshake...");
terminateRtspHandshake();
stage--;
Limelog("done\n");
}
@ -112,17 +112,17 @@ int LiStartConnection(IP_ADDRESS host, PSTREAM_CONFIGURATION streamConfig, PCONN
ListenerCallbacks.stageComplete(STAGE_PLATFORM_INIT);
Limelog("done\n");
Limelog("Starting handshake...");
ListenerCallbacks.stageStarting(STAGE_HANDSHAKE);
err = performHandshake(host);
Limelog("Starting RTSP handshake...");
ListenerCallbacks.stageStarting(STAGE_RTSP_HANDSHAKE);
err = performRtspHandshake(host, streamConfig);
if (err != 0) {
Limelog("failed: %d\n", err);
ListenerCallbacks.stageFailed(STAGE_HANDSHAKE, err);
ListenerCallbacks.stageFailed(STAGE_RTSP_HANDSHAKE, err);
goto Cleanup;
}
stage++;
LC_ASSERT(stage == STAGE_HANDSHAKE);
ListenerCallbacks.stageComplete(STAGE_HANDSHAKE);
LC_ASSERT(stage == STAGE_RTSP_HANDSHAKE);
ListenerCallbacks.stageComplete(STAGE_RTSP_HANDSHAKE);
Limelog("done\n");
Limelog("Initializing control stream...");

View File

@ -17,6 +17,9 @@ void connectionDetectedFrameLoss(int startFrame, int endFrame);
void connectionReceivedFrame(int frameIndex);
void connectionLostPackets(int lastReceivedPacket, int nextReceivedPacket);
int performRtspHandshake(IP_ADDRESS addr, PSTREAM_CONFIGURATION streamConfigPtr);
void terminateRtspHandshake(void);
void initializeVideoDepacketizer(int pktSize);
void destroyVideoDepacketizer(void);
void processRtpPayload(PNV_VIDEO_PACKET videoPacket, int length);

View File

@ -55,7 +55,7 @@ typedef struct _AUDIO_RENDERER_CALLBACKS {
// Use LiGetStageName() for stable stage names
#define STAGE_NONE 0
#define STAGE_PLATFORM_INIT 1
#define STAGE_HANDSHAKE 2
#define STAGE_RTSP_HANDSHAKE 2
#define STAGE_CONTROL_STREAM_INIT 3
#define STAGE_VIDEO_STREAM_INIT 4
#define STAGE_AUDIO_STREAM_INIT 5

View File

@ -0,0 +1,63 @@
#include "Limelight-internal.h"
static SOCKET sock = INVALID_SOCKET;
#define RTSP_MAX_RESP_SIZE 1024
// FIXME defs
static void* transactRtspMessage(IP_ADDRESS addr, void* message) {
int err;
char responseBuffer[RTSP_MAX_RESP_SIZE];
int offset;
void* responseMsg = NULL;
sock = connectTcpSocket(addr, 48010);
if (sock == INVALID_SOCKET) {
return NULL;
}
enableNoDelay(sock);
char* serializedMessage = NULL; // FIXME
int messageLen = 0; // FIXME
// Send our message
err = send(sock, serializedMessage, messageLen, 0);
if (err == SOCKET_ERROR) {
goto Exit;
}
// Read the response until the server closes the connection
offset = 0;
for (;;) {
err = recv(sock, &responseBuffer[offset], RTSP_MAX_RESP_SIZE - offset, 0);
if (err <= 0) {
// Done reading
break;
}
offset += err;
// Warn if the RTSP message is too big
if (offset == RTSP_MAX_RESP_SIZE) {
Limelog("RTSP message too long");
goto Exit;
}
}
responseMsg = NULL; // FIXME
Exit:
closesocket(sock);
sock = INVALID_SOCKET;
return responseMsg;
}
void terminateRtspHandshake(void) {
if (sock != INVALID_SOCKET) {
closesocket(sock);
sock = INVALID_SOCKET;
}
}
int performRtspHandshake(IP_ADDRESS addr, PSTREAM_CONFIGURATION streamConfigPtr) {
return 0;
}

View File

@ -135,6 +135,7 @@
<ClCompile Include="LinkedBlockingQueue.c" />
<ClCompile Include="PlatformSockets.c" />
<ClCompile Include="PlatformThreads.c" />
<ClCompile Include="RtspConnection.c" />
<ClCompile Include="SdpGenerator.c" />
<ClCompile Include="VideoDepacketizer.c" />
<ClCompile Include="VideoStream.c" />

View File

@ -48,6 +48,9 @@
<ClCompile Include="SdpGenerator.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="RtspConnection.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="PlatformSockets.h">