ZLMediaKit服务器源码再读
WebApi
/**
-
安装api接口
-
所有api都支持GET和POST两种方式
-
POST方式参数支持application/json和application/x-www-form-urlencoded方式
*/
void installWebApi() {
addHttpListener();
GET_CONFIG(string,api_secret,API::kSecret);//获取线程负载
//测试url http://127.0.0.1/index/api/getThreadsLoad
api_regist(“/index/api/getThreadsLoad”,{
EventPollerPool::Instance().getExecutorDelay([invoker, headerOut](const vector &vecDelay) {
Value val;
auto vec = EventPollerPool::Instance().getExecutorLoad();
int i = API::Success;
for (auto load : vec) {
Value obj(objectValue);
obj[“load”] = load;
obj[“delay”] = vecDelay[i++];
val[“data”].append(obj);
}
val[“code”] = API::Success;
invoker(200, headerOut, val.toStyledString());
});
});
监听kBroadcastHttpRequest
处理kBroadcastHttpRequest
FFMPEG
ffmpeg循环推流://注意看,此处推的是rtmp,webrtc服务器也能接收到流
ffmpeg -re -stream_loop -1 -i 1.mp4 -vcodec h264 -acodec aac -f flv rtmp://192.168.2.205/live/test1
rtsp服务器,端口默认554
rtsps服务器,端口默认322
rtmp服务器,端口默认1935
rtmps服务器,端口默认19350
http服务器,端口默认80
https服务器,端口默认443
telnet远程调试服务器
在主流的推流拉流技术中,主流的推送协议RTMP协议中,视频必须是H264编码,音频必须是AAC或MP3编码,且多以flv格式封包
RTMP是目前最主流的流媒体传输协议,对CDN支持良好,但RTMP不支持浏览器
RTMP Real Time Messaging Protocol(实时消息传输协议)
RTMP HLS拉流、HTTP-FLV拉流、RTMP拉流
| 摄像头或录屏格式 | RGB、YUV | H.265、H.264 |
|音频 |PCM |AAC|
合成 FLV、TS、RTMP packet格式
向服务器推流的协议:
HLS、RTSP、RTMP 应用层
RTCP、RTP 传输层协议
RSVP 网络层协议
从服务器拉流:
HLS、RTSP、RTMP 应用层
RTCP、RTP 传输层协议
RSVP 网络层协议
H.264 和 AAC 使用硬解码(GPU解码和CPU解码)和软解码(CPU解码)
将YUV或RGB