注:如下展示结构非单纯调用顺序,只是方便看代码
1.zlmediaserver main | |->loadIniConfig //加载配置文件,如果配置文件不存在就创建一个 | |->initEventListener | |->addListener Broadcast::kBroadcastonGetRtspRealm //监听kBroadcastOnGetRtspRealm事件决定rtsp链接是否需要鉴权(传统的rtsp鉴权方案)才能访问 | |->addListener Broadcast::kBroadcastonRtspAuth //监听kBroadcastOnRtspAuth事件返回正确的rtsp鉴权用户密码 | |->addListener Broadcast::kBroadcastMediaPublish //监听rtsp/rtmp推流事件,返回结果告知是否有推流权限 | |->addListener Broadcast::kBroadcastMediaPlayed //监听rtsp/rtsps/rtmp/http-flv播放事件,返回结果告知是否有播放权限(rtsp通过kBroadcastOnRtspAuth或此事件都可以实现鉴权) | |->addListener Broadcast::kBroadcastShellLogin //shell登录事件,通过shell可以登录进服务器执行一些命令 | |->addListener Broadcast::kBroadcastMediaChanged //监听rtsp、rtmp源注册或注销事件;此处用于测试rtmp保存为flv录像,保存在http根目录下 | |->addListener Broadcast::kBroadcastNotFoundStream //监听播放失败(未找到特定的流)事件 | |->addListener Broadcast::kBroadcastFlowReport //监听播放或推流结束时消耗流量事件 | |->TcpServer::Ptr rtspSrv(new TcpServer()) //new rtspserver | |->bind TcpServer::onAcceptConnection_l //构造函数中bind 此函数然后保存到类型为function的成员变量_acceptCB中,回调接口 | |->bind TcpServer::onBeforeAcceptConnection_l //构造函数中bind 此函数然后保存到类型为function的成员变量_beforeAcceptCB中,回调接口 | |->TcpServer::Ptr rtmpSrv(new TcpServer()) //new rtmpserver | |->bind TcpServer::onAcceptConnection_l //构造函数中bind 此函数然后保存到类型为function的成员变量_acceptCB中,回调接口 | |->bind TcpServer::onBeforeAcceptConnection_l //构造函数中bind 此函数然后保存到类型为function的成员变量_beforeAcceptCB中,回调接口 | |->TcpServer::start //分别对rtspserver rtmpserver做start | |->start_l //模板,TcpSession创建器,通过它创建不同类型的服务器 | |->_sessionMaker //| |->Socket::listen | |->std::make_shared //新建定时器管理这些tcp会话 | |->Timer::Timer //timer的构造 | |->onManager //执行各个子类的onManager | |->RtspSession::onManager //异常监控处理 | |->RtmpSession::onManager //同上 Socket::onAccept | |->_beforeAcceptCB | |->_acceptCB | |->onAcceptConnection_l | |->onAcceptConnection | |->Socket::setonRead //将recv lambda 存到_readCB中 Socket::onRead | |->_readCB | |->onRecv | |->RtspSession::onRecv | |->HttpRequestSplitter::input | |->RtspSession::onRtpPacket //过滤到rtp包 | |->handleoneRtp | |->sortRtp | |->RtspSession::onRtpSorted | |->RtspMediaSource::onWrite | |-> | |->RtspSplitter::onRecvContent //如果过滤到rtsp包 | |->RtspSession::onWholeRtspPacket //这里对client发的rtsp请求做处理 | |->RtspSession::handleReq_Options | //OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, ANNOUNCE, RECORD, SET_PARAMETER, GET_PARAMETER |->200 OK //直接回复200ok,带能力 | |->RtspSession::handleReq_Describe | |->RtspSession::handleReq_ANNOUNCE | |->RtspSession::handleReq_RECORD | |->RtspSession::handleReq_Setup | |->RtspSession::handleReq_Play | |->RtspSession::handleReq_Pause | |->RtspSession::handleReq_Teardown | |->RtspSession::handleReq_Get | |->RtspSession::handleReq_Post | |->RtspSession::handleReq_SET_PARAMETER | |->RtspSession::handleReq_SET_PARAMETER | |->RtmpSession::onRecv



