阅读zlmediakit源码的一些整理

注:如下展示结构非单纯调用顺序,只是方便看代码

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

你可能感兴趣的:(服务器,音视频,运维)