//
|
// Created by ps on 19-1-10.
|
//
|
|
#ifndef GB28181SDK_VIDEOCAPTUREELEMENT_H
|
#define GB28181SDK_VIDEOCAPTUREELEMENT_H
|
|
#include "FFmpegDecoderJPG.h"
|
#include "28181SDK.h"
|
#include <basic/pipe/PipeElement.h>
|
//#include <RtspAnalysManager.h>
|
//#include <VideoToImageMulth/RtspAnalysManager.h>
|
|
class RtspAnalysManager;
|
|
namespace BASICGB28181 {
|
|
class VideoCaptureElementWithRtp : public basic::PipeElement {
|
public:
|
/***
|
* VideoCaptureElementWithRtp 视频解码
|
* @param chanPubID 通道地(摄像机id)
|
* @param fps
|
* @param streamTransType 请求的视频流类型
|
* @param gpuIdx gpuindex
|
* @param manager 上层类的指针
|
*/
|
explicit VideoCaptureElementWithRtp(std::string &chanPubID, int fps, int streamTransType, int gpuIdx = -1,
|
RtspAnalysManager *manager = nullptr);
|
|
virtual ~VideoCaptureElementWithRtp();
|
|
/***
|
* 获取当前实时流接收数据线程运行状态
|
* @return
|
*/
|
bool getRunning();
|
|
|
/***
|
* 获取图片
|
* @return
|
*/
|
cv::Mat getImage();
|
|
//保存视频接口,从RtspAnalysManager发起调用
|
void SaveVideo(const std::string &strImageName);
|
|
//设置保存视频的最小和最大长度,单位是秒,实际的运行情况有一些差距,需要完善
|
void SetVideoMinMaxSeconds(const int minSeconds, const int maxSeconds);
|
|
//根据timeStamp创建路径
|
std::string MakeDir(const std::string &timeStamp);
|
|
private:
|
int reopenTime{10};
|
int m_gpuIdx;
|
int m_fps;
|
int m_streamTransType;
|
std::string m_chanPubID;
|
std::atomic<int> m_picCount{0};
|
//几张图丢一张,目前是8张丢一张
|
const int m_nPicsPickOne = 8;
|
FFmpegDecoderJPG m_fFmpegDecoderJPG;
|
cv::Mat m_image;
|
long m_userdata;
|
RtspAnalysManager *m_pManager;
|
|
std::atomic<bool> m_running;
|
std::atomic<bool> m_waitSignal;
|
std::atomic<bool> m_waitSignalrunning;
|
|
//用来保存录像视频的路径
|
std::string m_cutPath;
|
private:
|
/***
|
* 启动实时流接收数据线程
|
* @param streamTransType 流数据发送方式
|
* @return
|
*/
|
bool startRtpStream(int streamTransType = 1);
|
|
/***
|
* 停止实时流接收数据线程
|
* @return
|
*/
|
bool stopRtpStream();
|
|
|
/***
|
* GB28181 SDK rtp组包回调函数
|
* @param handle
|
* @param datatype
|
* @param frametype
|
* @param data
|
* @param datalen
|
* @param userdata
|
*/
|
static void streamcallback(long handle, int datatype, int frametype,
|
unsigned char *data, int datalen, long userdata);
|
|
virtual void threadFunc() override;
|
|
virtual void threadInitial() override;
|
|
virtual void threadClosing() override;
|
|
};
|
|
}
|
|
|
#endif //GB28181SDK_VIDEOCAPTUREELEMENT_H
|