在 live555 中有一个嵌入式 HTTP 服务器,用于通过 HTTP 传输 RTP。
你可以使用它重载RTSPServer::RTSPClientConnection的handleHTTPCmd_StreamingGET
为了实现您的 GET 实现,您需要:
- 重载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);
}
};
这个 HTTPServer 实现用它收到的 http 请求来回答,比如:
GET / HTTP/1.1
Host: 127.0.0.1:9999
User-Agent: curl/7.54.0
Accept: */*