2021-05-31 05:42:20 +00:00
|
|
|
//
|
2021-07-08 06:30:47 +00:00
|
|
|
// Copyright (c) 2013-2021 The SRS Authors
|
2021-05-31 05:42:20 +00:00
|
|
|
//
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
//
|
2013-11-29 14:21:31 +00:00
|
|
|
|
2014-03-02 13:49:09 +00:00
|
|
|
#ifndef SRS_APP_FORWARD_HPP
|
|
|
|
#define SRS_APP_FORWARD_HPP
|
2013-11-29 14:21:31 +00:00
|
|
|
|
|
|
|
#include <srs_core.hpp>
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
2014-03-02 13:49:09 +00:00
|
|
|
#include <srs_app_st.hpp>
|
2013-11-29 14:21:31 +00:00
|
|
|
|
2018-12-23 12:08:04 +00:00
|
|
|
class ISrsProtocolReadWriter;
|
2014-04-29 06:44:07 +00:00
|
|
|
class SrsSharedPtrMessage;
|
2013-11-29 14:21:31 +00:00
|
|
|
class SrsOnMetaDataPacket;
|
2013-12-15 10:25:55 +00:00
|
|
|
class SrsMessageQueue;
|
2013-12-15 11:24:29 +00:00
|
|
|
class SrsRtmpJitter;
|
2013-11-29 14:21:31 +00:00
|
|
|
class SrsRtmpClient;
|
2013-12-01 09:32:06 +00:00
|
|
|
class SrsRequest;
|
2021-05-16 08:14:00 +00:00
|
|
|
class SrsLiveSource;
|
2017-01-19 04:38:55 +00:00
|
|
|
class SrsOriginHub;
|
2014-05-12 09:27:50 +00:00
|
|
|
class SrsKbps;
|
2015-10-14 07:34:18 +00:00
|
|
|
class SrsSimpleRtmpClient;
|
2013-11-29 14:21:31 +00:00
|
|
|
|
2019-04-30 00:24:52 +00:00
|
|
|
// Forward the stream to other servers.
|
2017-05-29 12:49:29 +00:00
|
|
|
class SrsForwarder : public ISrsCoroutineHandler
|
2013-11-29 14:21:31 +00:00
|
|
|
{
|
|
|
|
private:
|
2019-04-30 00:24:52 +00:00
|
|
|
// The ep to forward, server[:port].
|
2015-10-14 07:34:18 +00:00
|
|
|
std::string ep_forward;
|
|
|
|
SrsRequest* req;
|
2013-11-29 14:21:31 +00:00
|
|
|
private:
|
2017-05-29 12:49:29 +00:00
|
|
|
SrsCoroutine* trd;
|
2013-11-29 14:21:31 +00:00
|
|
|
private:
|
2017-01-19 04:38:55 +00:00
|
|
|
SrsOriginHub* hub;
|
2015-10-14 07:34:18 +00:00
|
|
|
SrsSimpleRtmpClient* sdk;
|
2014-03-18 03:32:58 +00:00
|
|
|
SrsRtmpJitter* jitter;
|
|
|
|
SrsMessageQueue* queue;
|
2019-04-30 00:24:52 +00:00
|
|
|
// Cache the sequence header for retry when slave is failed.
|
|
|
|
// @see https://github.com/ossrs/srs/issues/150
|
2014-08-24 14:34:38 +00:00
|
|
|
SrsSharedPtrMessage* sh_audio;
|
|
|
|
SrsSharedPtrMessage* sh_video;
|
2013-11-29 14:21:31 +00:00
|
|
|
public:
|
2017-01-19 04:38:55 +00:00
|
|
|
SrsForwarder(SrsOriginHub* h);
|
2014-03-18 03:32:58 +00:00
|
|
|
virtual ~SrsForwarder();
|
2013-12-15 10:25:55 +00:00
|
|
|
public:
|
2017-09-23 14:12:33 +00:00
|
|
|
virtual srs_error_t initialize(SrsRequest* r, std::string ep);
|
2019-04-15 23:55:19 +00:00
|
|
|
virtual void set_queue_size(srs_utime_t queue_size);
|
2013-11-29 14:21:31 +00:00
|
|
|
public:
|
2017-09-23 14:12:33 +00:00
|
|
|
virtual srs_error_t on_publish();
|
2014-03-18 03:32:58 +00:00
|
|
|
virtual void on_unpublish();
|
2019-04-30 00:24:52 +00:00
|
|
|
// Forward the audio packet.
|
|
|
|
// @param shared_metadata, directly ptr, copy it if need to save it.
|
2017-09-23 14:12:33 +00:00
|
|
|
virtual srs_error_t on_meta_data(SrsSharedPtrMessage* shared_metadata);
|
2019-04-30 00:24:52 +00:00
|
|
|
// Forward the audio packet.
|
|
|
|
// @param shared_audio, directly ptr, copy it if need to save it.
|
2017-09-23 14:12:33 +00:00
|
|
|
virtual srs_error_t on_audio(SrsSharedPtrMessage* shared_audio);
|
2019-04-30 00:24:52 +00:00
|
|
|
// Forward the video packet.
|
|
|
|
// @param shared_video, directly ptr, copy it if need to save it.
|
2017-09-23 14:12:33 +00:00
|
|
|
virtual srs_error_t on_video(SrsSharedPtrMessage* shared_video);
|
2019-04-30 00:30:13 +00:00
|
|
|
// Interface ISrsReusableThread2Handler.
|
2013-12-14 06:06:32 +00:00
|
|
|
public:
|
2017-06-11 10:44:20 +00:00
|
|
|
virtual srs_error_t cycle();
|
2017-05-29 12:49:29 +00:00
|
|
|
private:
|
2017-06-11 10:44:20 +00:00
|
|
|
virtual srs_error_t do_cycle();
|
2013-11-29 14:21:31 +00:00
|
|
|
private:
|
2017-09-23 14:12:33 +00:00
|
|
|
virtual srs_error_t forward();
|
2013-11-29 14:21:31 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
2014-08-02 14:18:39 +00:00
|
|
|
|