SRS 入门:整体概念与框架

对应视频:

  • 135--01-SRS流媒体服务器开发概述.mp4
  • 136--02-SRS流媒体框架入门.mp4

这篇先建立大图景:SRS 是什么、它在推流/拉流链路里站在哪里、源码框架从哪里进入。

1. SRS 是什么

SRS 是一个流媒体服务器。你可以先把它理解成“音视频中转站”:

推流端 -> SRS -> 拉流端

推流端可能是 OBS、FFmpeg、摄像头、编码器或业务程序;拉流端可能是播放器、浏览器、移动端 App 或另一个服务。

SRS 收到一路流后,可以用不同协议对外分发,例如:

SRS 在推流和拉流之间的位置

2. 新手先分清几个词

推流

推流就是把音视频数据发送到服务器。

OBS/FFmpeg/摄像头 -> SRS

常见 RTMP 推流 URL:

rtmp://server-ip/live/livestream

拉流

拉流就是客户端从服务器取音视频数据播放。

播放器/浏览器 -> SRS

常见 URL:

rtmp://server-ip/live/livestream
http://server-ip:8080/live/livestream.flv

流名和 App

rtmp://server-ip/live/livestream 为例:

部分含义
liveapp,也可以理解为业务分类
livestreamstream,也就是具体流名

SRS 内部经常会按 vhost/app/stream 管理一路流。

3. SRS 启动后做什么

SRS 启动后会读取配置、初始化模块、监听端口,然后等待客户端连接。

典型流程:

main
读取配置文件
初始化日志、统计、网络
启动监听器
等待 TCP 连接
为每个连接创建 connection 对象
进入对应协议处理流程

SRS 启动日志和监听信息

启动日志里可以重点看:

4. 源码入口怎么读

刚入门不要一上来追所有文件。可以按“连接进入服务器”的路径读。

main
  -> server 初始化
  -> listener 监听端口
  -> accept 新连接
  -> 创建 SrsRtmpConn / HTTP conn
  -> do_cycle 处理连接生命周期

SRS 连接类和 socket 相关代码

课程中出现的常见类可以先这样理解:

名称入门理解
SrsServer服务器总管,负责启动、监听、管理连接
SrsListener监听端口,收到新连接
SrsConnection一个客户端连接的抽象
SrsRtmpConnRTMP 客户端连接
SrsHttpConnHTTP 客户端连接
SrsSource一路媒体源,推流和拉流会围绕它交互
SrsConsumer拉流消费者,从 SrsSource 取数据

5. 主流程图

课程里反复围绕主流程展开:SRS 不是一次性处理完请求就退出,而是一个长期运行的服务进程。

SRS 主调用流程

你可以先记住这个简化版:

启动服务
监听端口
来了一个连接
判断是什么协议
进入 RTMP 或 HTTP 处理
连接断开后回收资源

6. Listener 和 Connection

Listener 的职责是“等人敲门”。客户端连上来后,SRS 会创建对应连接对象,再把真正的业务逻辑交给 connection 处理。

Listener 代码入口

入门时可以把它想成:

Listener:
    只负责 accept TCP 连接

Connection:
    负责这个连接后续的协议交互

这样读源码会轻松很多,因为监听端口和处理 RTMP 协议是两件事。

7. 连接生命周期

一个 RTMP 连接大致经历:

TCP 连接建立
RTMP handshake
connect 命令
createStream
publish 或 play
循环处理音视频消息
连接断开
资源清理

连接进入后的处理流程

8. 协程/线程的入门理解

课程里会看到线程、协程、循环等待等概念。先不用陷进实现细节,可以这样理解:

线程与连接处理笔记

9. 入门阅读顺序

建议按这个顺序看源码和视频:

1. SRS 怎么启动
2. RTMP 端口怎么监听
3. 客户端连接后创建什么对象
4. RTMP handshake 怎么做
5. connect / publish / play 命令怎么处理
6. 推流数据进入 SrsSource
7. 拉流客户端从 SrsSource 消费数据
8. HTTP-FLV 怎么复用这一路媒体源

这条线抓住了,后面看 RTMP 协议、推流、拉流、HTTP-FLV 就不会散。

评论

...

正在读取评论。