live555には、RTP over HTTPのストリーミングに使用される埋め込みHTTPサーバがあります。
あなたはそれがhandleHTTPCmd_StreamingGET
あなたのGETの実装を実現するためにRTSPServer::RTSPClientConnection
の過負荷を使用することができ、以下を行う必要があります。
- 過負荷RTSPServer :: RTSPClientConnectionのhandleHTTPCmd_StreamingGETを実装するクラス
- 過負荷RTSPServerクラスをRTSPServer :: RTSPClientConnectionのクラスをインスタンス化するために
のように、エラー処理なしで、非常に単純化したサンプルを与えることができる一緒にすべてを置く:
#include "BasicUsageEnvironment.hh"
#include "RTSPServer.hh"
class HTTPServer : public RTSPServer {
class HTTPClientConnection : public RTSPServer::RTSPClientConnection {
public:
HTTPClientConnection(RTSPServer& ourServer, int clientSocket, struct sockaddr_in clientAddr)
: RTSPServer::RTSPClientConnection(ourServer, clientSocket, clientAddr) {}
private:
virtual void handleHTTPCmd_StreamingGET(char const* urlSuffix, char const* fullRequestStr) {
// build HTTP answer
snprintf((char*)fResponseBuffer, sizeof fResponseBuffer,
"HTTP/1.1 200 OK\r\n"
"Content-Length: %zd\r\n"
"\r\n"
"%s",
strlen(fullRequestStr),fullRequestStr);
}
};
public:
static HTTPServer* createNew(UsageEnvironment& env, Port rtspPort) {
return new HTTPServer(env, setUpOurSocket(env, rtspPort), rtspPort);
}
HTTPServer(UsageEnvironment& env, int ourSocket, Port rtspPort)
: RTSPServer(env, ourSocket, rtspPort, NULL, 0) {}
RTSPServer::RTSPClientConnection* createNewClientConnection(int clientSocket, struct sockaddr_in clientAddr) {
return new HTTPClientConnection(*this, clientSocket, clientAddr);
}
};
ようなHTTP、それが受信した要求、何とこのHTTPServerの実装の答え:
GET/HTTP/1.1
Host: 127.0.0.1:9999
User-Agent: curl/7.54.0
Accept: */*