#ifndef _cffmpeg_wrapper_hpp_ #define _cffmpeg_wrapper_hpp_ #include #include #include #include #include #include #include #include "common/callback.hpp" class CPacket; namespace ffwrapper{ class FormatIn; class CodedData; class VideoProp; } namespace cffmpeg_wrap{ class stream; class decoder; class rec; class Wrapper{ public: Wrapper(); explicit Wrapper(const char *logfile); ~Wrapper (); private: std::unique_ptr init_reader(const char* input); void init_worker(ffwrapper::FormatIn *in); int run_worker(ffwrapper::FormatIn *in, const CPacket &pkt); void deinit_worker(); public: int RunStream(const char* input); private: void run_stream_thread(); public: //recorder void BuildRecorder(const char* id, const char *dir, const int64_t &fid, const int mind, const int maxd, const bool audio); int FireRecorder(const char* sid,const int64_t &id); void GetInfoRecorder(std::string &recID, int &index, std::string &path); public: void GB28181(){gb_ = 1;} void CPUDec(){cpu_ = 1;} void AudioSwitch(const bool a); void SetRecMinCacheTime(const int mind); int GetFPS(){return fps_;} public: //decoder void BuildDecoder(); void GetPicDecoder(unsigned char **data, int *w, int *h, int *format, int *length, int64_t *id); public: // push stream void CloseStream(); void GetPacket(unsigned char **pktData, int *size, int *key); private: // stream 参数 std::string input_url_; bool audio_; int gb_, cpu_; bool run_dec_; bool run_stream_; // decoder 参数 std::unique_ptr thread_; std::atomic_bool stop_stream_; // 业务类 // 推流类 stream* stream_; // 解码类 decoder* decoder_; // 录像类,一直存在 rec* rec_; // 录像请求缓存,等待runstream后添加 std::function fn_rec_lazy_; bool logit_; int fps_; }; void *CreateEncoder(const int w, const int h, const int fps, const int br, const int pix_fmt, const int scale_flag, const int gi); void DestroyEncoder(void *h); int Encode(void *hdl, uint8_t *in, const int w, const int h, uint8_t **out, int *size, int *key); } #endif