Beispiel #1
0
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);
	}
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}