mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-07-04 01:37:33 +08:00
适配ZLToolKit代码,支持自定义创建Socket:#468
This commit is contained in:
@@ -11,7 +11,6 @@
|
||||
#ifndef SRC_RTSP_RTPBROADCASTER_H_
|
||||
#define SRC_RTSP_RTPBROADCASTER_H_
|
||||
|
||||
|
||||
#include <mutex>
|
||||
#include <memory>
|
||||
#include <unordered_set>
|
||||
@@ -20,60 +19,52 @@
|
||||
#include "RtspMediaSource.h"
|
||||
#include "Util/mini.h"
|
||||
#include "Network/Socket.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace toolkit;
|
||||
|
||||
namespace mediakit{
|
||||
|
||||
class MultiCastAddressMaker
|
||||
{
|
||||
class MultiCastAddressMaker {
|
||||
public:
|
||||
static MultiCastAddressMaker &Instance();
|
||||
~MultiCastAddressMaker() {}
|
||||
static MultiCastAddressMaker& Instance();
|
||||
static bool isMultiCastAddress(uint32_t addr);
|
||||
static string toString(uint32_t addr);
|
||||
|
||||
std::shared_ptr<uint32_t> obtain(uint32_t max_try = 10);
|
||||
|
||||
static bool isMultiCastAddress(uint32_t iAddr){
|
||||
static uint32_t addrMin = mINI::Instance()[MultiCast::kAddrMin].as<uint32_t>();
|
||||
static uint32_t addrMax = mINI::Instance()[MultiCast::kAddrMax].as<uint32_t>();
|
||||
return iAddr >= addrMin && iAddr <= addrMax;
|
||||
}
|
||||
static string toString(uint32_t iAddr){
|
||||
iAddr = htonl(iAddr);
|
||||
return SockUtil::inet_ntoa((struct in_addr &)(iAddr));
|
||||
}
|
||||
virtual ~MultiCastAddressMaker(){}
|
||||
std::shared_ptr<uint32_t> obtain(uint32_t iTry = 10);
|
||||
private:
|
||||
MultiCastAddressMaker(){};
|
||||
void release(uint32_t iAddr);
|
||||
uint32_t _iAddr = 0;
|
||||
MultiCastAddressMaker() {};
|
||||
void release(uint32_t addr);
|
||||
|
||||
private:
|
||||
uint32_t _addr = 0;
|
||||
recursive_mutex _mtx;
|
||||
unordered_set<uint32_t> _setBadAddr;
|
||||
unordered_set<uint32_t> _used_addr;
|
||||
};
|
||||
|
||||
class RtpMultiCaster {
|
||||
public:
|
||||
typedef std::shared_ptr<RtpMultiCaster> Ptr;
|
||||
typedef function<void()> onDetach;
|
||||
virtual ~RtpMultiCaster();
|
||||
static Ptr get(const EventPoller::Ptr &poller,const string &strLocalIp,const string &strVhost,const string &strApp,const string &strStream);
|
||||
~RtpMultiCaster();
|
||||
|
||||
static Ptr get(SocketHelper &helper, const string &local_ip, const string &vhost, const string &app, const string &stream);
|
||||
void setDetachCB(void *listener,const onDetach &cb);
|
||||
uint16_t getPort(TrackType trackType);
|
||||
string getIP();
|
||||
|
||||
string getMultiCasterIP();
|
||||
uint16_t getMultiCasterPort(TrackType trackType);
|
||||
|
||||
private:
|
||||
static recursive_mutex g_mtx;
|
||||
static unordered_map<string , weak_ptr<RtpMultiCaster> > g_mapBroadCaster;
|
||||
static Ptr make(const EventPoller::Ptr &poller,const string &strLocalIp,const string &strVhost,const string &strApp,const string &strStream);
|
||||
RtpMultiCaster(SocketHelper &helper, const string &local_ip, const string &vhost, const string &app, const string &stream);
|
||||
|
||||
std::shared_ptr<uint32_t> _multiAddr;
|
||||
private:
|
||||
recursive_mutex _mtx;
|
||||
unordered_map<void * , onDetach > _mapDetach;
|
||||
RtspMediaSource::RingType::RingReader::Ptr _pReader;
|
||||
Socket::Ptr _apUdpSock[2];
|
||||
struct sockaddr_in _aPeerUdpAddr[2];
|
||||
|
||||
RtpMultiCaster(const EventPoller::Ptr &poller,const string &strLocalIp,const string &strVhost,const string &strApp,const string &strStream);
|
||||
|
||||
Socket::Ptr _udp_sock[2];
|
||||
std::shared_ptr<uint32_t> _multicast_ip;
|
||||
unordered_map<void * , onDetach > _detach_map;
|
||||
RtspMediaSource::RingType::RingReader::Ptr _rtp_reader;
|
||||
};
|
||||
|
||||
}//namespace mediakit
|
||||
|
||||
#endif /* SRC_RTSP_RTPBROADCASTER_H_ */
|
||||
|
||||
Reference in New Issue
Block a user