mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	add forward st thread
This commit is contained in:
		
							parent
							
								
									f09d457644
								
							
						
					
					
						commit
						1f8bb0e935
					
				
					 4 changed files with 73 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -23,19 +23,53 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		|||
 | 
			
		||||
#include <srs_core_forward.hpp>
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
#include <srs_core_error.hpp>
 | 
			
		||||
#include <srs_core_rtmp.hpp>
 | 
			
		||||
#include <srs_core_log.hpp>
 | 
			
		||||
 | 
			
		||||
SrsForwarder::SrsForwarder()
 | 
			
		||||
{
 | 
			
		||||
	client = new SrsRtmpClient();
 | 
			
		||||
	port = 1935;
 | 
			
		||||
	tid = NULL;
 | 
			
		||||
	loop = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SrsForwarder::~SrsForwarder()
 | 
			
		||||
{
 | 
			
		||||
	srs_freep(client);
 | 
			
		||||
	
 | 
			
		||||
	if (tid) {
 | 
			
		||||
		loop = false;
 | 
			
		||||
		st_thread_interrupt(tid);
 | 
			
		||||
		st_thread_join(tid, NULL);
 | 
			
		||||
		tid = NULL;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SrsForwarder::on_publish(std::string vhost, std::string app, std::string stream, std::string forward_server)
 | 
			
		||||
{
 | 
			
		||||
	int ret = ERROR_SUCCESS;
 | 
			
		||||
	
 | 
			
		||||
	tc_url = "rtmp://";
 | 
			
		||||
	tc_url += vhost;
 | 
			
		||||
	tc_url += "/";
 | 
			
		||||
	tc_url += app;
 | 
			
		||||
	
 | 
			
		||||
	stream_name = stream;
 | 
			
		||||
	server = forward_server;
 | 
			
		||||
	
 | 
			
		||||
	size_t pos = forward_server.find(":");
 | 
			
		||||
	if (pos != std::string::npos) {
 | 
			
		||||
		port = ::atoi(forward_server.substr(pos + 1).c_str());
 | 
			
		||||
		server = forward_server.substr(0, pos);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	srs_trace("forward stream=%s, tcUrl=%s to server=%s, port=%d",
 | 
			
		||||
		stream_name.c_str(), tc_url.c_str(), server.c_str(), port);
 | 
			
		||||
	
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,12 +33,21 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		|||
 | 
			
		||||
class SrsSharedPtrMessage;
 | 
			
		||||
class SrsOnMetaDataPacket;
 | 
			
		||||
class SrsRtmpClient;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* forward the stream to other servers.
 | 
			
		||||
*/
 | 
			
		||||
class SrsForwarder
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
	std::string tc_url;
 | 
			
		||||
	std::string stream_name;
 | 
			
		||||
	std::string server;
 | 
			
		||||
	int port;
 | 
			
		||||
	SrsRtmpClient* client;
 | 
			
		||||
	st_thread_t tid;
 | 
			
		||||
	bool loop;
 | 
			
		||||
public:
 | 
			
		||||
	SrsForwarder();
 | 
			
		||||
	virtual ~SrsForwarder();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -163,6 +163,24 @@ SrsResponse::~SrsResponse()
 | 
			
		|||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SrsRtmpClient::SrsRtmpClient()
 | 
			
		||||
{
 | 
			
		||||
	stfd = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SrsRtmpClient::~SrsRtmpClient()
 | 
			
		||||
{
 | 
			
		||||
	if (stfd) {
 | 
			
		||||
		int fd = st_netfd_fileno(stfd);
 | 
			
		||||
		st_netfd_close(stfd);
 | 
			
		||||
		stfd = NULL;
 | 
			
		||||
		
 | 
			
		||||
		// st does not close it sometimes, 
 | 
			
		||||
		// close it manually.
 | 
			
		||||
		close(fd);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SrsRtmp::SrsRtmp(st_netfd_t client_stfd)
 | 
			
		||||
{
 | 
			
		||||
	protocol = new SrsProtocol(client_stfd);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -92,6 +92,18 @@ enum SrsClientType
 | 
			
		|||
	SrsClientFlashPublish,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* implements the client role protocol.
 | 
			
		||||
*/
 | 
			
		||||
class SrsRtmpClient
 | 
			
		||||
{
 | 
			
		||||
private:
 | 
			
		||||
	st_netfd_t stfd;
 | 
			
		||||
public:
 | 
			
		||||
	SrsRtmpClient();
 | 
			
		||||
	virtual ~SrsRtmpClient();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
* the rtmp provices rtmp-command-protocol services,
 | 
			
		||||
* a high level protocol, media stream oriented services,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue