#pragma once
|
|
#include <string>
|
#include <vector>
|
#include <sstream>
|
#include <iostream>
|
|
#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<int> 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;
|
};
|
}
|