srs源码分析
文章平均质量分 80
分析srs源码
玩转流媒体
这个作者很懒,什么都没留下…
展开
-
srs源码分析6-connect
现在根据抓包信息,分析connect的过程。int SrsClient::do_cycle(){... /*handshake成功后,进行connect。*/ if ((ret = rtmp->connect_app(req)) != ERROR_SUCCESS) { srs_error("rtmp connect vhost/app failed. ret=%d", ret); return ret; } srs_verbose("rtmp connect app succe.原创 2021-10-02 18:52:12 · 613 阅读 · 0 评论 -
srs源码分析5-handshake
要建立一个有效的RTMP Connect连接,首先需要进行握手,客户端要向服务器发送C0、C1、C2(按序)三个chunk,服务器向客户端发送S0、S1、S2(按序)三个chunk,然后才能进行有效的信息传输。RTMP协议本身并没有规定这6个Message的具体传输顺序,但RTMP协议的实现者需要保证这几点:客户端要等收到S1之后才能发送C2客户端要等收到S2之后才能发送其他信息(控制信息和真实⾳视频等数据)服务端要等到收到C0之后发送S1服务端必须等到收到C1之后才能发送S2服务端必须等到收原创 2021-10-02 18:45:27 · 443 阅读 · 0 评论 -
srs源码分析4-客户端的连接
void SrsListener::listen_cycle(){... while (loop) { ... /*当有客户端连接srs时,listen协程会从此函数返回。*/ st_netfd_t client_stfd = st_accept(stfd, NULL, NULL, ST_UTIME_NO_TIMEOUT); ... /*通知SrsServer,有新的客户端连接进来了。*/ if ((ret = server->accept_cl原创 2021-10-02 18:42:30 · 395 阅读 · 0 评论 -
srs源码分析3-srs的启动
先从main函数开始分析,分析srs的启动过程。int main(int argc, char** argv){ int ret = ERROR_SUCCESS; /*注册SIGHUB信号处理函数,用于重载配置文件。*/ signal(SIGNAL_RELOAD, handler); /*解析命令行参数,解析配置文件。*/ if ((ret = config->parse_options(argc, argv)) != ERROR_SUCCESS) { return ret;原创 2021-10-02 18:41:47 · 1318 阅读 · 0 评论 -
srs源码分析2-浅析state_threads
srs是基于协程开发的,底层使用了state_threads协程库。为了更好的理解srs,所以需要先熟悉state_threads。这里并不会介绍协程的相关概念,只是简单的介绍一下state_threads的核心逻辑。以下state_thread会被简称为st。使用示例-echo server使用st实现了一个简单的echo服务器,以下代码写的很简单,重点是理解st的使用。#include <arpa/inet.h>#include <errno.h>#include &原创 2021-10-02 18:39:59 · 1217 阅读 · 1 评论 -
srs源码分析1-搭建环境
在搭建srs-0.6.0时,总是提示各种错误,为了简化搭建,我直接使用CMake重新组织了一下构建方式,目前至只支持rtmp。平台:Ubuntu 18.04先安装state_threads:cd stmake linux-debugcd ./objcp libst.a /usr/local/lib/cp st.h /usr/local/include/然后安装srs:mkdir build && cd buildcmake ../make运行srs:./srs原创 2021-10-02 18:32:33 · 391 阅读 · 0 评论