阅读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							   	//<tcpserver,对应的rtsp/rtmpsession>
			|
			|->Socket::listen
			|
			|->std::make_shared<Timer>					   	//新建定时器管理这些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
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: zlmediakit是一个开源的流媒体服务器软件,其源码可以用于搭建自己的流媒体服务器。该软件使用C++编写,具有高性能和低资源消耗的特点。 zlmediakit源码提供了丰富的功能和模块,可以支持RTSP、RTMP、HLS、HTTP/HTTPS等流媒体协议的直播和点播。它可以用于构建具有较高并发量的流媒体平台,适用于各种场景,如视频直播、音频直播、视频点播等。 zlmediakit源码采用了多线程和事件驱动的设计,可以同时处理多个客户端连接和媒体流传输。它还支持实时录制功能,可以将接收到的流媒体数据实时保存到本地磁盘中,方便后续回放和存储。 zlmediakit源码的使用相对较为简单,只需要在服务器上编译和安装即可。同时,它还提供了丰富的配置选项和API接口,以便于用户进行个性化定制和二次开发。 总之,zlmediakit源码是一个强大而灵活的流媒体服务器软件,通过使用它,用户可以搭建自己的流媒体平台,实现高并发的流媒体传输和处理,适用于各种直播和点播场景。 ### 回答2: zlmediakit是一款基于C++语言开发的开源流媒体解决方案,旨在提供高性能的实时音视频传输和处理功能。其源码提供了丰富的功能和模块,可以用于构建各种音视频应用。 zlmediakit源码具有的特点包括: 1. 高性能:通过使用底层优化技术和多线程处理,zlmediakit能够实现高效的音视频传输和处理,保证了应用的实时性和流畅性。 2. 支持多种协议:zlmediakit支持常见的音视频传输协议,如RTSP、RTMP、HTTP等,使得应用能够与各类设备和平台进行互通。 3. 灵活的扩展性:zlmediakit源码提供了丰富的接口和模块,可以根据具体需求进行定制和扩展,满足不同应用场景的需求。 4. 多平台支持:zlmediakit源码可以在多个平台上运行,如Windows、Linux等,且可以与常见的开发框架和工具协同使用。 5. 丰富的功能:zlmediakit提供了各种功能模块,如音视频编码、解码、录制、转码、推流、拉流等,可以实现多种实时音视频处理需求。 通过使用zlmediakit源码,开发者可以快速构建和部署高性能的音视频应用,如视频直播、视频会议、监控系统等。同时,源码的开放性也意味着开发者可以根据自己的需求进行二次开发和定制,以满足更加复杂的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值