srs 如何集成rannet

来源:互联网 发布:php网站管理系统源码 编辑:程序博客网 时间:2024/06/14 16:57

编译的问题上一篇已经解决了。

这篇主要解决如何在代码层面来整合。只是大概的框架。还没有完全成熟。

1)增加属于udp的listener类

代码为:

struct IRakListenerHandler{IRakListenerHandler();~IRakListenerHandler();virtual int on_udp_connect(RakNetGUID guid) = 0;};struct   IRakNetDealer{IRakNetDealer(){};~IRakNetDealer(){};virtual void deal_udp_data(Packet *packet)=0;};//includer one thread ,all udp data dealby this thread;class CUdpListenerByRaknet {public:CUdpListenerByRaknet(IRakListenerHandler *h);~CUdpListenerByRaknet();void    deal_udp_data(Packet *packet);void    RegPackHandler(IRakNetDealer *handler);protected:map<RakNetGUID, IRakNetDealer *>m_packDealer;IRakListenerHandler *   m_listenHandler;private:};

核心类为CUdpListenerByRaknet,由于udp连接的的特性是无连接的,所有区别连接要靠raknet本身的guid来做判断,而且,没有专门的连接 数据包的区别,所以这个类既要负责tcp的accept功能,又要负责rev的功能。次类中应该有线程的存在。


1)在class SrsServer类有继承IRakListenerHandler接口,实现在udp有新的连接上来的时候,创建对应的conn类,代码如下

class SrsServer : virtual public ISrsReloadHandler    , virtual public ISrsSourceHandler, virtual public ISrsHlsHandler, virtual public IConnectionManager, public IRakListenerHandler
虚函数的实现
virtual int accept_client::on_udp_connect(RakNetGUID guid){SrsConnection* conn = NULL;conn = new SrsRtmpConn(this, guid);conns.push_back(conn);return 0;}


3)SrsRtmpConn类要增加一个构造函数可以构造udp的连接

SrsRtmpConn(SrsServer* svr, RakNetGUID guid);

实现为

SrsRtmpConn::SrsRtmpConn(SrsServer* svr, RakNetGUID guid){server = svr;req = new SrsRequest();res = new SrsResponse();skt = new SrsStSocket(guid);rtmp = new SrsRtmpServer(skt);refer = new SrsRefer();bandwidth = new SrsBandwidth();security = new SrsSecurity();duration = 0;kbps = new SrsKbps();kbps->set_io(skt, skt);wakable = NULL;mw_sleep = SRS_PERF_MW_SLEEP;mw_enabled = false;realtime = SRS_PERF_MIN_LATENCY_ENABLED;send_min_interval = 0;tcp_nodelay = false;_srs_config->subscribe(this);}

4)最底层的SrsStSocket类,要增加支持udp的实现。主要表现为

继承IRakNetDealer ,这样可以处理udp的数据。

class SrsStSocket : public ISrsProtocolReaderWriter, public IRakNetDealer

增加基于guid的构造

SrsStSocket(RakNetGUID guid);
SrsStSocket::SrsStSocket(RakNetGUID guid) :m_guid(guid), m_udp(true){}

修改read write函数为raknet的实现。



0 0
原创粉丝点击