void Observer::OnMessageFromPeer(int peer_id, const std::string& message) { printf("OnMessageFromPeer\n"); printf("message : %s\n", message.c_str()); std::string roap = message; if (roap.find("OFFER") != std::string::npos) { boost::thread theThread(&Observer::processMessage, this, peer_id, message); } }
STREAMING_SERVER * startStreaming(const char *address, int port) { struct sockaddr_in addr; int sockfd, tmp; STREAMING_SERVER *server; sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sockfd == -1) { RTMP_Log(RTMP_LOGERROR, "%s, couldn't create socket", __FUNCTION__); return 0; } tmp = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&tmp, sizeof(tmp)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = inet_addr(address); //htonl(INADDR_ANY); addr.sin_port = htons(port); if (bind(sockfd, (struct sockaddr *) &addr, sizeof(struct sockaddr_in)) == -1) { RTMP_Log(RTMP_LOGERROR, "%s, TCP bind failed for port number: %d", __FUNCTION__, port); return 0; } if (listen(sockfd, 10) == -1) { RTMP_Log(RTMP_LOGERROR, "%s, listen failed", __FUNCTION__); closesocket(sockfd); return 0; } server = (STREAMING_SERVER *)calloc(1, sizeof(STREAMING_SERVER)); server->socket = sockfd; //ThreadCreate(serverThread, server); std::thread theThread(serverThread, server); theThread.join(); return server; }
int start_sample_rtmp_server(int argc, char **argv) { int nStatus = RD_SUCCESS; int i; // http streaming server char DEFAULT_HTTP_STREAMING_DEVICE[] = "0.0.0.0"; // 0.0.0.0 is any device char *rtmpStreamingDevice = DEFAULT_HTTP_STREAMING_DEVICE; // streaming device, default 0.0.0.0 int nRtmpStreamingPort = 1935; // port char *cert = NULL, *key = NULL; RTMP_LogPrintf("RTMP Server %s\n", "AVRemoteControl Build 1.0"); RTMP_LogPrintf("(c) 2010 Andrej Stepanchuk, Howard Chu; license: GPL\n\n"); RTMP_debuglevel = RTMP_LOGINFO; for (i = 1; i < argc; i++) { if (!strcmp(argv[i], "-z")) RTMP_debuglevel = RTMP_LOGALL; else if (!strcmp(argv[i], "-c") && i + 1 < argc) cert = argv[++i]; else if (!strcmp(argv[i], "-k") && i + 1 < argc) key = argv[++i]; } if (cert && key) sslCtx = RTMP_TLS_AllocServerContext(cert, key); // init request memset(&defaultRTMPRequest, 0, sizeof(RTMP_REQUEST)); defaultRTMPRequest.rtmpport = -1; defaultRTMPRequest.protocol = RTMP_PROTOCOL_UNDEFINED; defaultRTMPRequest.bLiveStream = true; // is it a live stream? then we can't seek/resume defaultRTMPRequest.timeout = 500; // timeout connection after 300 seconds defaultRTMPRequest.bufferTime = 20 * 1000; signal(SIGINT, sigIntHandler); #ifndef WIN32 signal(SIGPIPE, SIG_IGN); #endif #ifdef _DEBUG netstackdump = fopen("netstackdump", "wb"); netstackdump_read = fopen("netstackdump_read", "wb"); #endif InitSockets(); // start text UI //ThreadCreate(controlServerThread, 0); std::thread theThread(controlServerThread); // start http streaming if ((rtmpServer = startStreaming(rtmpStreamingDevice, nRtmpStreamingPort)) == 0) { RTMP_Log(RTMP_LOGERROR, "Failed to start RTMP server, exiting!"); return RD_FAILED; } RTMP_LogPrintf("Streaming on rtmp://%s:%d\n", rtmpStreamingDevice, nRtmpStreamingPort); while (rtmpServer->state != STREAMING_STOPPED) { sleep(1); } RTMP_Log(RTMP_LOGDEBUG, "Done, exiting..."); if (sslCtx) RTMP_TLS_FreeServerContext(sslCtx); CleanupSockets(); #ifdef _DEBUG if (netstackdump != 0) fclose(netstackdump); if (netstackdump_read != 0) fclose(netstackdump_read); #endif return nStatus; }