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;}
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
- srs 如何集成rannet
- srs之如何选CDN
- SRS
- srs代码学习(6)--如何实现edge
- 如何把raknet的库编译到srs里面
- 多实例srs:srs-srs-dolphin
- srs rtmp
- SRS-DOLPHIN
- SugarCRM如何集成CAS
- PyCharm如何集成PyQt
- 如何集成支付宝
- Unity3D如何集成ShareSDK
- Eclipse如何集成SVN?
- 如何集成百度自动更新
- Myeclipse10如何集成findBug
- 如何做好集成测试
- storm如何集成kafka
- 如何集成Windows login, forms集成验证?
- 根据某个View获得图片
- 常用排序(二)
- JAVA-1 简介
- poj 1061 青蛙的约会(数论)
- maven-->update project
- srs 如何集成rannet
- Mybatis中mapper.xml中的模糊查询
- 数据库索引
- 直接插入排序
- win系统下nodejs安装及环境配置
- 被说了很多遍的设计模式---工厂方法模式
- Android探索之旅(第五篇) eclipse执行run之后的过程
- tomcat 源代码 断点
- 继电器电路设计