#pragma once #include #include #include #include #include "vp_src_node.h" namespace vp_nodes { // rtsp source node, receive video stream via rtsp protocal. // example: // rtsp://admin:admin12345@192.168.77.110:554/ class vp_rtsp_ffmpeg_src_node : public vp_src_node { private: /* data */ std::string ffprobe_template = "ffprobe -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate -of csv=p=0 %s"; cv::VideoCapture rtsp_capture; std::vector initialize_stream_properties(); int start_ffmpeg_thread(const std::string &rtsp_url, int width, int height); protected: // re-implemetation virtual void handle_run() override; public: vp_rtsp_ffmpeg_src_node(std::string node_name, int channel_index, std::string rtsp_url, float resize_ratio = 1.0, int skip_interval = 0, bool use_gpu = false, std::string ffmpeg_format = "rawvideo", // other options: avi/mp4/mov/mkv/flv/gif/h264/hevc std::string ffmpeg_pix_fmt = "bgr24"); // yuv420p 带宽小一半,但做detection 时还需要转换成bgr24 ~vp_rtsp_ffmpeg_src_node(); virtual std::string to_string() override; std::string rtsp_url; bool use_gpu = false; std::string ffmpeg_format = "rawvideo"; std::string ffmpeg_pix_fmt = "bgr24"; // 0 means no skip int skip_interval = 0; }; }