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发送到客户端。
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发送到客户端。
相关文章推荐
- net/http包的使用模式和源码解析
- Spring Security3源码分析(2)-http标签解析
- Nginx源码解析- http模块分析
- HTTP Client MultiThreadedHttpConnectionManager线程安全连接管理类源码解析
- 安卓面试清单----OKHttp源码解析(一)
- python之aiohttp源码解析——add_route和middleware的工作方式
- OKHttp网络框架源码解析(一)okHttp框架同步异步请求流程和源码分析
- aiohttp 源码解析之 request 的处理过程
- Nginx源码解析- http模块分析
- Spark DAGScheduler模块源码解析(转自:http://guozhongxin.com/tag/spark.html)
- tomcat http get 参数中文乱码,tomcat源码解析
- MVC源码解析 - HttpRuntime解析
- OHHTTPStubs 源码解析
- Solr 6.0 学习(九) SolrDispatchFilter源码解析之HttpSolrCall及扩展
- [nginx源码分析]配置解析(http作用域)
- Spring MVC 源码解析: HTTP 请求与响应过程
- JDK 源码解析 —— Integer 来自 http://blog.csdn.net/wenniuwuren
- Okhttp源码解析(一)——Http相关知识
- 源码解析Servlet和HttpServlet
- MVC源码解析 - Http Pipeline 解析(上)