srs的http-flv拉流源码源码解析

http-flv的主要处理逻辑在srs_app_http_conn.cpp,srs_app_http_stream.cpp,srs_http_stack.cpp文件zhong,http-flv拉流请求处理是从接受http请求开始的,客户端发起的拉流请求在SrsServer::accept_client函数中接受为独立的SrsResponseOnlyHttpConn连接,在连接线程中响应http-flv请求,如下图所示。

srs的http-flv拉流源码源码解析_第1张图片

srs中的http服务功能集中在SrsHttpServer类中,上图传入的参数http_server为http请求处理的入口。在SrsResponseOnlyHttpConn连接线程中SrsHttpConn::process_request中调用http_mux->serve_http(w, r)函数进入SrsHttpServer类的处理中,在SrsHttpServer::serve_http函数中会区分http请求的类型为http流还是静态http请求,如下图所示,http-flv进入http_stream->mux.serve_http(w, r)函数中。

srs的http-flv拉流源码源码解析_第2张图片

上图http_stream是SrsHttpStreamServer类对象,是实际实现http-flv处理的类,SrsHttpStreamServer类和SrsHttpServeMux类相互依赖,SrsHttpServeMux是http各种类型请求的总处理类,通过 类成员std::map vhosts中的handler对象来处理,这些对象继承自抽象类ISrsHttpHandler,分别实现了不同类型的http请求处理,比如重定向,no-found,http-flv等。

针对http-flv流的处理,SrsHttpStreamServer::http_mount函数中调用mux.handle(mount, entry->stream)将SrsLiveStream类(继承自ISrsHttpHandler)对象传入SrsHttpServeMux中,具体发送音视频流的实现在SrsLiveStream::serve_http函数中,该函数中调用source->create_consumer创建一个rtmp流接收对象,沿用的是rtmp拉流的处理,然后通过SrsConsumer中取流转换成http-flv发送到客户端。

你可能感兴趣的:(srs)