हाल ही में मैं Live555, WebRTC और FFMPEG के साथ एक आरटीएसपी स्ट्रीमिंग सर्वर (अन्य पुस्तकालयों का उपयोग करके) बनाने में कामयाब रहा। सब कुछ बढ़िया चल रहा है, लेकिन मेरा अंतिम लक्ष्य मेरे प्रसंस्करण पदचिह्न को कम करने के लिए Live555 के अपने उपयोग को अधिकतम करना है। एक बार आरटीपी स्ट्रीम शुरू हो जाने के बाद मैं केवल रखरखाव के लिए HTTP सिग्नलिंग सर्वर का उपयोग करता हूं।

मेरा प्रश्न है (जैसा कि मुझे लाइव 555 कोड और न ही दस्तावेज़ीकरण में उत्तर नहीं मिल रहा है):

क्या केवल Live555 का उपयोग करके HTTP सर्वर बनाने का कोई तरीका है?

0
Hakeem El Bakka-lee 25 जुलाई 2017, 14:02

1 उत्तर

सबसे बढ़िया उत्तर

Live555 में एक एम्बेडेड HTTP सर्वर होता है जिसका उपयोग HTTP पर RTP स्ट्रीमिंग के लिए किया जाता है।

आप इसका उपयोग RTSPServer::RTSPClientConnectionhandleHTTPCmd_StreamingGET पर ओवरलोडिंग कर सकते हैं। ए>

अपने जीईटी कार्यान्वयन को लागू करने के लिए, आपको यह करना होगा:

  • हैंडल को लागू करने के लिए RTSPServer :: RTSPClientConnection वर्ग को अधिभारित करेंHTTPCmd_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: */*
1
mpromonet 14 अगस्त 2017, 16:21