1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-15 04:42:04 +00:00
srs/trunk/src/app/srs_app_rtmp_conn.hpp

186 lines
5.8 KiB
C++
Raw Normal View History

2017-03-25 09:21:39 +00:00
/**
* The MIT License (MIT)
*
2017-03-25 13:29:29 +00:00
* Copyright (c) 2013-2017 OSSRS(winlin)
2017-03-25 09:21:39 +00:00
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
2013-11-23 03:36:07 +00:00
2014-03-27 04:14:04 +00:00
#ifndef SRS_APP_RTMP_CONN_HPP
#define SRS_APP_RTMP_CONN_HPP
2013-11-23 03:36:07 +00:00
#include <srs_core.hpp>
2015-09-24 10:33:07 +00:00
#include <string>
#include <srs_app_st.hpp>
#include <srs_app_conn.hpp>
#include <srs_app_reload.hpp>
#include <srs_rtmp_stack.hpp>
2017-03-26 05:40:39 +00:00
#include <srs_service_rtmp_conn.hpp>
2013-11-23 03:36:07 +00:00
class SrsServer;
class SrsRtmpServer;
2013-11-23 03:36:07 +00:00
class SrsRequest;
class SrsResponse;
class SrsSource;
class SrsRefer;
class SrsConsumer;
class SrsCommonMessage;
class SrsStSocket;
2013-12-07 14:06:53 +00:00
class SrsHttpHooks;
class SrsBandwidth;
2014-05-12 09:27:50 +00:00
class SrsKbps;
class SrsRtmpClient;
class SrsSharedPtrMessage;
class SrsQueueRecvThread;
class SrsPublishRecvThread;
class SrsSecurity;
class ISrsWakable;
2015-10-14 06:37:24 +00:00
class SrsCommonMessage;
class SrsPacket;
2015-10-22 08:24:10 +00:00
#ifdef SRS_AUTO_KAFKA
class ISrsKafkaCluster;
#endif
2013-11-23 03:36:07 +00:00
/**
2017-03-26 05:40:39 +00:00
* The simple rtmp client for SRS.
*/
2017-03-26 05:40:39 +00:00
class SrsSimpleRtmpClient : public SrsBasicRtmpClient
{
public:
SrsSimpleRtmpClient(std::string u, int64_t ctm, int64_t stm);
virtual ~SrsSimpleRtmpClient();
2017-03-26 05:40:39 +00:00
protected:
2015-10-14 07:08:55 +00:00
virtual int connect_app();
};
/**
* Some information of client.
*/
class SrsClientInfo
{
public:
// The type of client, play or publish.
SrsRtmpConnType type;
// Whether the client connected at the edge server.
bool edge;
// Original request object from client.
SrsRequest* req;
// Response object to client.
SrsResponse* res;
public:
SrsClientInfo();
virtual ~SrsClientInfo();
};
/**
* the client provides the main logic control for RTMP clients.
*/
class SrsRtmpConn : public virtual SrsConnection, public virtual ISrsReloadHandler
2013-11-23 03:36:07 +00:00
{
// for the thread to directly access any field of connection.
friend class SrsPublishRecvThread;
2013-11-23 03:36:07 +00:00
private:
SrsServer* server;
2014-03-18 03:32:58 +00:00
SrsRtmpServer* rtmp;
SrsRefer* refer;
SrsBandwidth* bandwidth;
SrsSecurity* security;
// the wakable handler, maybe NULL.
ISrsWakable* wakable;
// elapse duration in ms
// for live play duration, for instance, rtmpdump to record.
2015-11-11 02:37:50 +00:00
// @see https://github.com/ossrs/srs/issues/47
int64_t duration;
2014-05-12 09:27:50 +00:00
SrsKbps* kbps;
// the MR(merged-write) sleep time in ms.
int mw_sleep;
// the MR(merged-write) only enabled for play.
int mw_enabled;
// for realtime
2015-11-11 02:37:50 +00:00
// @see https://github.com/ossrs/srs/issues/257
bool realtime;
// the minimal interval in ms for delivery stream.
double send_min_interval;
// publish 1st packet timeout in ms
int publish_1stpkt_timeout;
// publish normal packet timeout in ms
int publish_normal_timeout;
// whether enable the tcp_nodelay.
bool tcp_nodelay;
// About the rtmp client.
SrsClientInfo* info;
2013-11-23 03:36:07 +00:00
public:
SrsRtmpConn(SrsServer* svr, srs_netfd_t c, std::string cip);
2014-03-27 04:27:47 +00:00
virtual ~SrsRtmpConn();
public:
virtual void dispose();
2013-11-23 03:36:07 +00:00
protected:
2014-03-18 03:32:58 +00:00
virtual int do_cycle();
2013-12-14 14:54:10 +00:00
// interface ISrsReloadHandler
public:
2014-03-18 03:32:58 +00:00
virtual int on_reload_vhost_removed(std::string vhost);
2015-08-29 23:05:57 +00:00
virtual int on_reload_vhost_play(std::string vhost);
virtual int on_reload_vhost_tcp_nodelay(std::string vhost);
virtual int on_reload_vhost_realtime(std::string vhost);
virtual int on_reload_vhost_publish(std::string vhost);
// interface IKbpsDelta
public:
virtual void resample();
virtual int64_t get_send_bytes_delta();
virtual int64_t get_recv_bytes_delta();
virtual void cleanup();
2013-11-23 03:36:07 +00:00
private:
2014-03-18 03:32:58 +00:00
// when valid and connected to vhost/app, service the client.
virtual int service_cycle();
// stream(play/publish) service cycle, identify client first.
virtual int stream_service_cycle();
2015-12-24 11:14:23 +00:00
virtual int check_vhost(bool try_default_vhost);
2014-03-18 03:32:58 +00:00
virtual int playing(SrsSource* source);
virtual int do_playing(SrsSource* source, SrsConsumer* consumer, SrsQueueRecvThread* trd);
virtual int publishing(SrsSource* source);
virtual int do_publishing(SrsSource* source, SrsPublishRecvThread* trd);
virtual int acquire_publish(SrsSource* source);
virtual void release_publish(SrsSource* source);
virtual int handle_publish_message(SrsSource* source, SrsCommonMessage* msg);
virtual int process_publish_message(SrsSource* source, SrsCommonMessage* msg);
virtual int process_play_control_msg(SrsConsumer* consumer, SrsCommonMessage* msg);
virtual void change_mw_sleep(int sleep_ms);
virtual void set_sock_options();
private:
virtual int check_edge_token_traverse_auth();
virtual int do_token_traverse_auth(SrsRtmpClient* client);
private:
2015-09-17 05:36:02 +00:00
/**
* when the connection disconnect, call this method.
* e.g. log msg of connection and report to other system.
*/
virtual int on_disconnect();
private:
2014-04-27 06:57:28 +00:00
virtual int http_hooks_on_connect();
virtual void http_hooks_on_close();
virtual int http_hooks_on_publish();
virtual void http_hooks_on_unpublish();
virtual int http_hooks_on_play();
virtual void http_hooks_on_stop();
2013-11-23 03:36:07 +00:00
};
#endif
2014-08-02 14:18:39 +00:00