您的位置:首页 > 理论基础 > 计算机网络

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

2018-01-17 19:27 302 查看
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服务功能集中在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)函数中。


上图http_stream是SrsHttpStreamServer类对象,是实际实现http-flv处理的类,SrsHttpStreamServer类和SrsHttpServeMux类相互依赖,SrsHttpServeMux是http各种类型请求的总处理类,通过 类成员std::map<std::string, ISrsHttpHandler*> 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发送到客户端。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: