接SRS源码阅读(一)
7、如果后台运行写进程pid到文件
if ((err = svr->acquire_pid_file()) != srs_success) {
return srs_error_wrap(err, "acquire pid file");
}
8、监听连接:
Listen()函数里面包含了对各个部分的监听,主要包含如下部分:
if ((err = svr->listen()) != srs_success ) {
return srs_error_wrap(err, "listen");
}
8.1 listen_rtmp: rtmp推流或拉流连接
if ((err = svr->listen——rtmp()) != srs_success ) {
return srs_error_wrap(err, "rtmp listen");
}
8.2 listen_http_api: api请求连接
if ((err = svr->listen_http_api()) != srs_success ) {
return srs_error_wrap(err, "http api listen");
}
8.3 listen_http_stream: http拉流连接,http-flv,http-ts,http-aac,http-mp3
if ((err = svr->listen_http_stream()) != srs_success ) {
return srs_error_wrap(err, "http stream listen");
}
8.4 listen_stream_caster: 接收MpegTSOverUdp流请求,rtsp推流请求,http-flv推流请求
if ((err = svr->listen_http_stream()) != srs_success ) {
return srs_error_wrap(err, "stream caster listen");
}
9、初始化http_ api接口处理
if ((err = svr->http_handle()) != srs_success ) {
return srs_error_wrap(err, "http handle");
}
10、启动ingest协程,使用ffmpeg,拉取文件或流转发到本服务
if ((err = svr->ingest()) != srs_success ) {
return srs_error_wrap(err, "ingest");
}
跳转至函数ingest(),里面会有一个start()函数,进入该函数里面的clear_engines()函数,里面就是一些关于FFmpeg的操作。
11、启动主线程
if ((err = svr->cycle()) != srs_success ) {
return srs_error_wrap(err, "main cycle");
}
主要是重新加载配置,更新时 间缓冲,更新CPU,内存,网络,磁盘使用情况,更新RTMP服务器状态网络流量,发送http心跳等等。