// // Copyright (c) 2013-2025 The SRS Authors // // SPDX-License-Identifier: MIT // #ifndef SRS_APP_FACTORY_HPP #define SRS_APP_FACTORY_HPP #include #include class ISrsFileWriter; class ISrsFileReader; class SrsPath; class SrsLiveSource; class ISrsOriginHub; class ISrsHourGlass; class ISrsHourGlassHandler; class ISrsBasicRtmpClient; class ISrsHttpClient; class ISrsFileReader; class ISrsFlvDecoder; class ISrsHttpResponseReader; class ISrsRtspSendTrack; class ISrsRtspConnection; class SrsRtcTrackDescription; class ISrsFlvTransmuxer; class ISrsMp4Encoder; class ISrsDvrSegmenter; class ISrsGbMediaTcpConn; class ISrsGbSession; class ISrsFragment; class ISrsInitMp4; class ISrsFragmentWindow; class ISrsFragmentedMp4; class SrsFinalFactory; class ISrsIpListener; class ISrsTcpHandler; class ISrsRtcConnection; class ISrsExecRtcAsyncTask; class ISrsFFMPEG; class ISrsIngesterFFMPEG; // The factory to create app objects. class ISrsAppFactory : public ISrsKernelFactory { public: ISrsAppFactory(); virtual ~ISrsAppFactory(); public: virtual ISrsFileWriter *create_file_writer() = 0; virtual ISrsFileWriter *create_enc_file_writer() = 0; virtual ISrsFileReader *create_file_reader() = 0; virtual SrsPath *create_path() = 0; virtual SrsLiveSource *create_live_source() = 0; virtual ISrsOriginHub *create_origin_hub() = 0; virtual ISrsHourGlass *create_hourglass(const std::string &name, ISrsHourGlassHandler *handler, srs_utime_t interval) = 0; virtual ISrsBasicRtmpClient *create_rtmp_client(std::string url, srs_utime_t cto, srs_utime_t sto) = 0; virtual ISrsHttpClient *create_http_client() = 0; virtual ISrsFileReader *create_http_file_reader(ISrsHttpResponseReader *r) = 0; virtual ISrsFlvDecoder *create_flv_decoder() = 0; #ifdef SRS_RTSP virtual ISrsRtspSendTrack *create_rtsp_audio_send_track(ISrsRtspConnection *session, SrsRtcTrackDescription *track_desc) = 0; virtual ISrsRtspSendTrack *create_rtsp_video_send_track(ISrsRtspConnection *session, SrsRtcTrackDescription *track_desc) = 0; #endif virtual ISrsFlvTransmuxer *create_flv_transmuxer() = 0; virtual ISrsMp4Encoder *create_mp4_encoder() = 0; virtual ISrsDvrSegmenter *create_dvr_flv_segmenter() = 0; virtual ISrsDvrSegmenter *create_dvr_mp4_segmenter() = 0; #ifdef SRS_GB28181 virtual ISrsGbMediaTcpConn *create_gb_media_tcp_conn() = 0; virtual ISrsGbSession *create_gb_session() = 0; #endif virtual ISrsInitMp4 *create_init_mp4() = 0; virtual ISrsFragmentWindow *create_fragment_window() = 0; virtual ISrsFragmentedMp4 *create_fragmented_mp4() = 0; virtual ISrsIpListener *create_tcp_listener(ISrsTcpHandler *handler) = 0; virtual ISrsRtcConnection *create_rtc_connection(ISrsExecRtcAsyncTask *exec, const SrsContextId &cid) = 0; virtual ISrsFFMPEG *create_ffmpeg(std::string ffmpeg_bin) = 0; virtual ISrsIngesterFFMPEG *create_ingester_ffmpeg() = 0; }; // The factory to create app objects. class SrsAppFactory : public ISrsAppFactory { // clang-format off SRS_DECLARE_PRIVATE: // clang-format on ISrsKernelFactory *kernel_factory_; public: SrsAppFactory(); virtual ~SrsAppFactory(); public: virtual ISrsFileWriter *create_file_writer(); virtual ISrsFileWriter *create_enc_file_writer(); virtual ISrsFileReader *create_file_reader(); virtual SrsPath *create_path(); virtual SrsLiveSource *create_live_source(); virtual ISrsOriginHub *create_origin_hub(); virtual ISrsHourGlass *create_hourglass(const std::string &name, ISrsHourGlassHandler *handler, srs_utime_t interval); virtual ISrsBasicRtmpClient *create_rtmp_client(std::string url, srs_utime_t cto, srs_utime_t sto); virtual ISrsHttpClient *create_http_client(); virtual ISrsFileReader *create_http_file_reader(ISrsHttpResponseReader *r); virtual ISrsFlvDecoder *create_flv_decoder(); #ifdef SRS_RTSP virtual ISrsRtspSendTrack *create_rtsp_audio_send_track(ISrsRtspConnection *session, SrsRtcTrackDescription *track_desc); virtual ISrsRtspSendTrack *create_rtsp_video_send_track(ISrsRtspConnection *session, SrsRtcTrackDescription *track_desc); #endif virtual ISrsFlvTransmuxer *create_flv_transmuxer(); virtual ISrsMp4Encoder *create_mp4_encoder(); virtual ISrsDvrSegmenter *create_dvr_flv_segmenter(); virtual ISrsDvrSegmenter *create_dvr_mp4_segmenter(); #ifdef SRS_GB28181 virtual ISrsGbMediaTcpConn *create_gb_media_tcp_conn(); virtual ISrsGbSession *create_gb_session(); #endif virtual ISrsInitMp4 *create_init_mp4(); virtual ISrsFragmentWindow *create_fragment_window(); virtual ISrsFragmentedMp4 *create_fragmented_mp4(); virtual ISrsIpListener *create_tcp_listener(ISrsTcpHandler *handler); virtual ISrsRtcConnection *create_rtc_connection(ISrsExecRtcAsyncTask *exec, const SrsContextId &cid); virtual ISrsFFMPEG *create_ffmpeg(std::string ffmpeg_bin); virtual ISrsIngesterFFMPEG *create_ingester_ffmpeg(); public: virtual ISrsCoroutine *create_coroutine(const std::string &name, ISrsCoroutineHandler *handler, SrsContextId cid); virtual ISrsTime *create_time(); virtual ISrsConfig *create_config(); virtual ISrsCond *create_cond(); }; extern ISrsAppFactory *_srs_app_factory; // The factory to create kernel objects. class SrsFinalFactory : public ISrsKernelFactory { public: SrsFinalFactory(); virtual ~SrsFinalFactory(); public: virtual ISrsCoroutine *create_coroutine(const std::string &name, ISrsCoroutineHandler *handler, SrsContextId cid); virtual ISrsTime *create_time(); virtual ISrsConfig *create_config(); virtual ISrsCond *create_cond(); }; // The proxy for config. class SrsConfigProxy : public ISrsConfig { public: SrsConfigProxy(); virtual ~SrsConfigProxy(); public: virtual srs_utime_t get_pithy_print(); virtual std::string get_default_app_name(); }; // The time to use system time. class SrsTrueTime : public ISrsTime { public: SrsTrueTime(); virtual ~SrsTrueTime(); public: virtual void usleep(srs_utime_t duration); }; #endif