ZLMediaKit是一个服务也是一个sdk。作为一个媒体框架既可以独立成为流媒体转发服务,也可以以三方库的形式被引用到其他媒体服务。下面就从ZLMediaKit服务和sdk两方面做一下说明。
1、ZLMediaKit作为服务:
根据配置文件可以启动对应的服务,支持媒体流的发布和转发
1)启动rtsp/rtsps服务,支持rtsp拉流和推流
2)启动rtmp/rtmps服务,支持rtmp拉流和推流
3)启动http/https服务,支持flv hls拉流,支持Web Api
4)启动shell服务
5)启动rtp服务,支持rtp(GB28181)推流。可以通过Web Api信令启动rtp proxy,从source拉流推送到指定url
6)初始化Web Api,用于处理http请求:获取本服务基本信息(线程负载、工作线程数目、服务器配置、获取流参数信息等等)、断流(断开source、断开指定拉流session)、录制控制、
代理播放器控制(开启、关闭)、截图、hook api请求响应(接收web hook请求,并发送响应)
可见Web Api可以作为:
(6.1)中心配置服务器,媒体服务可以从Web Api获取文件访问权限、也可以指定转封包的配置
(6.2)统计服务器,可以接收媒体服务的流量上报,码流信息、拉流信息等
(6.3)鉴权服务器,rtsp鉴权 rtmp鉴权、shell登录鉴权等等
(6.4)运维服务器,接收媒体服务器重启信息
7)初始化Web Hook,Web Hook监听来自于通知中心的媒体事件,并执行http请求,通过响应决定流媒体行为
(7.1)媒体发布广播事件,执行推流鉴权,并获取转封包配置
(7.2)媒体播放广播事件,执行拉流鉴权
(7.3)流量上报广播事件,通知远端服务结束的拉流session流量使用情况
(7.4)获取rtsp realm广播事件,获取rtsp realm
(7.5)rtsp鉴权广播事件,执行rtsp拉流/推流鉴权
(7.6)媒体源(source)注册或注销广播事件
(7.7)监听播放失败(未找到特定的流)事件
(7.8)MP4文件录制成功广播事件,通知远端文件信息
(7.9)TS文件录制成功广播事件,通知远端文件信息
(7.10)Shell登录鉴权,通过http请求远端鉴权
(7.11)媒体源无订阅者广播事件,通过http请求通知远端
(7.12)Http文件访问鉴权,通过http请求远端鉴权
(7.13)初始化上报重启信息
具体的http地址从配置中获取
2、ZLMediaKit作为sdk
存在一套c接口,用户可以构建自己的流媒体分发、拉流、推流服务
1)通用接口:支持配置的设置和获取、启动各种服务:rtsp rtmp http rtp shell等
2)事件回调接口:用户可以注册所需要监听的事件完成自己的业务处理。支持各种事件的回调:meidasource注册注销回调、推流鉴权回调、拉流鉴权回调、未找到指定码流通知、无人拉取某个码流通知、http api请求回调(外部可以处理该请求)、http访问权限回调、rtsp获取realm回调、rtsp认证回调、mp4分片(fmp4)录制成功通知、shell鉴权回调、会话(rtsp rtmp http-flv)结束后流量回调deng )结束后流量回调
3)事件对象接口:
(1)MP4Info对象从事件回调接口中获取,MP4Info事件对象接口可以获取mp4分片的各种信息
(2)HttpParser对象从事件回调接口中获取,可以通过接口获取http请求的内容:Method Header Content
(3)MediaInfo对象从事件回调接口中获取,可以通过接口获取码流url的各种信息:协议、IP地址和端口、虚拟主机、streamid等
(4)MediaSource对象事件回调接口中获取,可以通过接口获取source的各种信息:协议、虚拟主机、streamid、订阅者流者数目;关闭source、source跳转;从此source推rtp流到指定url、
关闭此source的rtp推流;查找指定source、source列表遍历
(5)HttpBody对象接口可以构造、销毁HttpBody实例,可以作为http响应的response body使用
(6)在事件回调接口中存在http请求回调和鉴权回调,这些回调函数需要响应处理结果(这些回调本身包含发送响应的函数指针invoker),事件请求处理完毕后,
需要通过事件对象接口发送结果或者响应,包括http请求响应发送接口、rtsp鉴权结果发送接口、获取realme结果发送接口、发布鉴权结果发送接口、拉流鉴权结果发送接口
基本上事件对象接口和事件回调接口一一对应
4)httpclient接口
(1)http下载接口
(2)通用http请求接口
5)媒体源接口
(1)媒体源的创建接口
(2)媒体数据输入接口
(3)媒体事件回调注册:关闭、跳转、发布或者注销
(4)订阅者数目获取
(5)通过此媒体源推rtp码流到指定url、关闭rtp推流
6)播放器接口-player
(1)创建、释放接口
(2)拉流接口:拉取指定url的码流,这个和source没什么关系
(3)播放控制:暂停/恢复、跳转
(4)注册回调函数接口:播放器开启播放结果回调、播放被异常中断的回调
(5)获取码流参数:视频编解码器、分辨率、帧率,音频编解码器、采样率、采样位宽、声道数目,点播时长
7)代理播放器-proxyplayer
内部继承于player,使用player拉流,通过转封包,支持发布多种视频源
(1)创建、释放接口
(2)考试播放
(3)注册关闭回调
(4)获取订阅者人数
8)推流器-pusher
(1)创建(从指定码流源订阅码流)、释放接口
(2)将码流推送到指定url(rtsp/rtmp)
(3)注册回调:推流器推流结果回调、推流被异常中断的回调
9)录制器:flv、MP4、HLS
(1)FLV录制器
(1.1)FLV录制器创建与释放
(1.2)FLV录制器从指定码流源录制flv文件,并指定文件位置
(2)hls/mp4录制器
(2.1)指定码流源是否正在被录制MP4或HLS文件
(2.2)开始录制hls/mp4
(2.3)停止录制hls/mp4
10)rtpserver
(1)创建与销毁
(2)获取rtp服务端口号
(3)注册GB28181 RTP 服务器接收流超时事件
11)tcp接口
(1)socket接口:本地地址、本地端口、对端地址、对端端口
(2)tcp server接口:开启及事件注册,返回tcp_session
(3)tcp_session接口:获取socket信息、关闭、发送数据
(4)tcp client接口:创建、连接、注册回调、发送数据
12)线程接口
(1)获取线程实例:获取tcp session、tcp client关联的线程实例;从事件线程池中获取线程实例,负载均衡算法;根据负载均衡算法,从后台线程池中随机获取一个线程
(2)事件执行:同步、异步
(3)定时器的创建与销毁
13)工具类接口
(1)路径接口:获取可执行文件的路径
(2)时间接口
(3)二进制转字符串
(4)日志类接口