#ifndef GST_PLAYER_H_ #define GST_PLAYER_H_ #include #include #include #include #include #include #include #include typedef std::function VideoFrameCallback; class GstPlayer { public: GstPlayer(const std::vector& cmd_arguments); ~GstPlayer(void); void onVideo(VideoFrameCallback callback); void play(const gchar* pipelineString); private: std::string pipelineString_; VideoFrameCallback video_callback_; GstElement *pipeline = nullptr; GstElement *sink_ = nullptr; void freeGst(void); static GstFlowReturn newSample(GstAppSink *sink, gpointer gSelf); }; class GstPlayers { public: GstPlayer* Get(int32_t id, std::vector cmd_arguments = {}); void Dispose(int32_t id); private: std::mutex mutex_; std::map> players_; }; static std::unique_ptr g_players = std::make_unique(); #endif