支持动态创建GB28181收流端口并可指定stream_id:#338

This commit is contained in:
xiongziliang
2020-07-07 10:01:12 +08:00
parent 30260e5414
commit 477f99b756
10 changed files with 89 additions and 73 deletions

View File

@@ -24,19 +24,21 @@ class RtpSelector;
class RtpProcessHelper : public MediaSourceEvent , public std::enable_shared_from_this<RtpProcessHelper> {
public:
typedef std::shared_ptr<RtpProcessHelper> Ptr;
RtpProcessHelper(uint32_t ssrc,const weak_ptr<RtpSelector > &parent);
RtpProcessHelper(const string &stream_id, const weak_ptr<RtpSelector > &parent);
~RtpProcessHelper();
void attachEvent();
RtpProcess::Ptr & getProcess();
protected:
// 通知其停止推流
bool close(MediaSource &sender,bool force) override;
// 观看总人数
int totalReaderCount(MediaSource &sender) override;
private:
weak_ptr<RtpSelector > _parent;
RtpProcess::Ptr _process;
uint32_t _ssrc = 0;
string _stream_id;
};
class RtpSelector : public std::enable_shared_from_this<RtpSelector>{
@@ -44,16 +46,21 @@ public:
RtpSelector();
~RtpSelector();
static RtpSelector &Instance();
bool inputRtp(const Socket::Ptr &sock, const char *data,int data_len,const struct sockaddr *addr ,uint32_t *dts_out = nullptr );
static bool getSSRC(const char *data,int data_len, uint32_t &ssrc);
RtpProcess::Ptr getProcess(uint32_t ssrc,bool makeNew);
void delProcess(uint32_t ssrc,const RtpProcess *ptr);
static RtpSelector &Instance();
bool inputRtp(const Socket::Ptr &sock, string &stream_id, const char *data, int data_len,
const struct sockaddr *addr, uint32_t *dts_out = nullptr);
RtpProcess::Ptr getProcess(const string &stream_id, bool makeNew);
void delProcess(const string &stream_id, const RtpProcess *ptr);
private:
void onManager();
void createTimer();
private:
unordered_map<uint32_t,RtpProcessHelper::Ptr> _map_rtp_process;
unordered_map<string,RtpProcessHelper::Ptr> _map_rtp_process;
recursive_mutex _mtx_map;
Timer::Ptr _timer;
};