This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Note: 如果觉得Github的Wiki访问太慢,可以访问 Gitee 镜像。
注意:SRS4已经发布,属于稳定版,可用于生产环境。
SRS Overview
SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。
Note: 简单的单节点架构,适用于大多数场景,大图请看figma。
Note: 这是典型的源站和边缘集群的架构,适用于需要高并发的场景,高清大图请参考这里
对于新手来说,音视频的门槛真的非常高,SRS的目标是降低(不能消除)音视频的门槛,所以请一定要读完Wiki。 不读Wiki一定扑街,不读文档请不要提Issue,不读文档请不要提问题,任何文档中明确说过的疑问都不会解答。
Getting Started
SRS支持下面多种方式启动,请使用你最熟悉的方式。
Build From Source
下载源码,推荐用CentOS7系统:
git clone -b 4.0release https://gitee.com/ossrs/srs.git
编译,注意需要切换到srs/trunk目录:
cd srs/trunk
./configure
make
启动服务器:
./objs/srs -c conf/srs.conf
检查SRS是否成功启动,可以打开 http://localhost:8080/ ,或者执行命令:
# 查看SRS的状态
./etc/init.d/srs status
# 或者看SRS的日志
tail -n 30 -f ./objs/srs.log
例如,下面的命令显示SRS正在运行:
MB0:trunk $ ./etc/init.d/srs status
SRS(pid 90408) is running. [ OK ]
MB0:trunk $ tail -n 30 -f ./objs/srs.log
[2021-08-13 10:30:36.634][Trace][90408][12c97232] Hybrid cpu=0.00%,0MB, cid=1,1, timer=61,0,0, clock=0,22,25,0,0,0,0,1,0
使用 FFmpeg(点击下载) 或 OBS(点击下载) 推流:
ffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://localhost/live/livestream
或者使用FFmpeg的Docker推流,请将192.168.1.10换成你的内网IP:
docker run --rm registry.cn-hangzhou.aliyuncs.com/ossrs/srs:encoder \
ffmpeg -re -i ./doc/source.200kbps.768x320.flv -c copy -f flv rtmp://192.168.1.10/live/livestream
打开下面的页面播放流(若SRS不在本机,请将localhost更换成服务器IP):
- RTMP (by VLC): rtmp://localhost/live/livestream
- H5(HTTP-FLV): http://localhost:8080/live/livestream.flv
- H5(HLS): http://localhost:8080/live/livestream.m3u8
注意如果RTMP转WebRTC流播放,必须使用配置文件rtmp2rtc.conf:
- H5(WebRTC): webrtc://localhost/live/livestream
Note: 若需要开启WebRTC能力,请将CANDIDATE设置为服务器的外网地址,详细请阅读WebRTC: CANDIDATE。
Note: 若需要HTTPS,比如WebRTC和浏览器都要求是HTTPS,那么请参考 HTTPS API 以及 HTTPS Callback 以及 HTTPS Live Streaming, 当然了HTTPS的反向代理也能和SRS工作很好,比如Nginx代理到SRS。
请继续阅读下面的内容,了解更多SRS的信息。
Docker
推荐使用Docker直接启动SRS,可用镜像在这里和每个Release都会给出来链接:
docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \
registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/docker.conf
若需要支持WebRTC,需要设置CANDIATE,并开启UDP/8000端口:
CANDIDATE="192.168.1.10"
docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \
--env CANDIDATE=$CANDIDATE -p 8000:8000/udp \
registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/docker.conf
若需要HTTPS,需要开启端口映射,并使用配置文件conf/https.*,比如conf/https.docker.conf:
CANDIDATE="192.168.1.10"
docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 1990:1990 -p 8088:8088 \
--env CANDIDATE=$CANDIDATE -p 8000:8000/udp \
registry.cn-hangzhou.aliyuncs.com/ossrs/srs:4 ./objs/srs -c conf/https.docker.conf
Note: 请将CANDIDATE设置为服务器的外网地址,详细请阅读WebRTC: CANDIDATE。
Note: 注意如果RTMP转WebRTC流播放,必须使用配置文件
rtmp2rtc.conf
Remark: 请使用你的证书文件,代替上面配置中的key和cert,请参考 HTTPS API 以及 HTTPS Callback 以及 HTTPS Live Streaming, 当然了HTTPS的反向代理也能和SRS工作很好,比如Nginx代理到SRS。
使用 FFmpeg(点击下载) 或 OBS(点击下载) 推流:
ffmpeg -re -i ./doc/source.flv -c copy -f flv rtmp://localhost/live/livestream
或者使用FFmpeg的Docker推流,请将192.168.1.10换成你的内网IP:
docker run --rm registry.cn-hangzhou.aliyuncs.com/ossrs/srs:encoder \
ffmpeg -re -i ./doc/source.200kbps.768x320.flv -c copy -f flv rtmp://192.168.1.10/live/livestream
打开下面的页面播放流(若SRS不在本机,请将localhost更换成服务器IP):
- RTMP (by VLC): rtmp://localhost/live/livestream
- H5(HTTP-FLV): http://localhost:8080/live/livestream.flv
- H5(HLS): http://localhost:8080/live/livestream.m3u8
请继续阅读下面的内容,了解更多SRS的信息。
Cloud Virtual Machine
SRS可以在云虚拟机上工作得很好,下面是一些可用的云厂商,以及使用方式:
- TencentCloud LightHouse:不仅仅是SRS,这是个微缩视频云,参考#2856。
- TencentCloud CVM:不仅仅是SRS,这是个微缩视频云,参考#2856。
- DigitalOcean Droplet:海外用户,直接创建SRS Droplet。
- CentOS 7安装包:在所有云厂商的虚拟机上,手动安装SRS,使用systemctl管理服务。
K8s
推荐使用K8s部署SRS,参考Deploy to Cloud Platforms,视频教程Bilibili: SRS-027-用K8s零命令行部署SRS
SRS提供了一系列的模版项目,可以快速部署到云平台K8s:
请继续阅读下面的内容,了解更多SRS的信息。
Effective SRS
SRS是一个服务器,也可以扩展成集群,还涉及多种协议和场景。下图是SRS的概览大地图,先有个大概印象:
Note: 高清图请看 https://www.processon.com/view/link/619f25c37d9c083e98adb37e
Note: 别被这张图吓到,一般也用不到所有的能力,关键是要花时间看文档,了解这些部分怎么工作的。
我们从几个典型的应用场景来说下上面的大图,更多场景请看Applications:
- 全平台直播,小荷才露尖尖角。只需要上图的Encoders(FFmpeg/OBS)推送RTMP到SRS;一台SRS Origin(不需要Cluster),转封装成HTTP-FLV流、转封装成HLS;Players根据平台的播放器可以选HTTP-FLV或HLS流播放。
- WebRTC通话业务,一对一通话,多人通话,会议室等。WebRTC是SRS4引入的关键和核心的能力,从1到3秒延迟,到100到300毫秒延迟,绝对不是数字的变化,而是本质的变化。
- 监控和广电上云,各行业风起云涌。除了使用FFmpeg主动拉取流到SRS,还可以广电行业SRT协议推流,或监控行业GB28181协议推流,SRS转换成互联网的协议观看。
- 直播低延迟和互动,聚变近在咫尺。RTMP转WebRTC播放降低播放延迟,还能做直播连麦,或者使用WebRTC推流,未来还会支持WebTransport直播等等。
- 大规模业务,带你装逼带你飞。如果业务快速上涨,可以通过Edge Cluster支持海量Players,或者Origin Cluster支持海量Encoders,当然可以直接平滑迁移到视频云。未来还会支持RTC的级联和集群。
Note: 这些场景的K8S部署,请参考Edge Cluster和Origin Cluster。
每个场景可能会用到一些通用的能力,比如:
- 一般都需要录制成FLV/MP4,将RTMP流转码,流截图。
- 也需要和现有业务系统集成,比如HTTP回调,或者通过HTTP API接口查询流和客户端的信息。
- 使用FFmpeg主动拉取流到SRS,或者Forward处理流后转给其他服务,或者推送RTSP/UDP/FLV到SRS。
- 安全方面,使用安全策略Security设置访问,或者用HTTP API接口踢流。
- 使用VHOST虚拟服务器 隔离不同的业务,用域名作为调度单元,应用不同的配置。
如果你更喜欢看视频,可以移步看下面的视频专栏介绍,最后还是要墙裂劝说看一遍Wiki:
- SRS答疑FAQ,精彩剪辑,大家有的疑问,你也可能有,推荐观看
- SRS云服务器,无门槛入门,推荐大家先使用SRS云服务器,先熟悉和跑通场景
- 如何使用OBS做直播,OBS的使用分享,一些有用的插件,推荐用OBS推流
- SRS使用和定制开发,核心能力分析,如何定制,推荐有一定基础的朋友观看
- 零声学院(视频):SRS4.0入门系列
再啰嗦一遍:不读Wiki一定扑街,不读文档请不要提Issue,不读文档请不要提问题,任何文档中明确说过的疑问都不会解答。
看完上面的文档,对SRS能做的事情有了大概的了解,可以阅读下面的文档,深入了解SRS。
Deployment Guides
- Delivery RTMP: 如何部署SRS提供RTMP服务。
- Delivery HLS: 如何部署SRS提供RTMP和HLS服务。
- Delivery HTTP FLV: 如何部署SRS分发FLV流。
- Delivery HDS: 如何部署SRS分发HDS流。
- Delivery DASH: 如何部署SRS分发DASH流。
- Transmux SRT: 如何部署SRS支持SRT流。
- Transmux GB28181:如何部署SRS支持GB28181流。
- Transcode: 如何部署SRS对直播流转码。
- Snapshot: 如何对直播流截图。
- Forward: 如何部署SRS转发RTMP流到其他服务器。
- Low latency: 如何部署SRS为低延迟模式。
- Ingest: 如何将其他流拉到SRS作为RTMP流。
- HTTP Server: 如何部署SRS为HTTP服务器。
- SRS DEMO: 如何启动SRS的DEMO。
- Projects: 都有谁在使用SRS。
- Setup: SRS安装和部署摘要。
- WebRTC Play: SRS支持WebRTC播放流。
- GB28181 Publish: SRS支持GB28181推流。
- SRT Publish: SRS支持SRT推流。
- HEVC/H.265: SRS支持H.265编码格式。
Cluster Guides
- Origin Cluster: 如何支持源站集群,扩展源站能力。
- Edge Cluster: RTMP: 如何部署RTMP分发集群,譬如CDN支持RTMP分发。
- Edge Cluster: FLV: 如何部署HTTP-FLV分发集群,譬如CDN支持HTTP-FLV分发。
- Edge Cluster: HLS: 如何部署HLS分发集群,比如CDN支持HLS分发。
- VHOST: 如何一个集群支持多个用户,即Vhost。
- Reload: 如何不中断服务的前提下应用新的配置,即Reload。
- Tracable Log: 如何在集群中追溯错误和日志,基于连接的日志,排错日志。
- Log Rotate: 如何切割服务器的日志,然后压缩或者清理。
- K8s: 如何使用ACK(阿里云容器服务Kubernetes版)部署SRS集群。
Integration Guides
- Linux Service: 启动或停止服务。
- HTTP Callback: 使用HTTP回调侦听SRS的事件。
- HTTP API: 使用SRS的HTTP API获取数据。
- Special Control: 一些特殊的控制配置。
Solution Guides
- 陈海博:SRS在安防中的应用
- 最佳实践:一对一通话,多人通话和直播连麦
- 最佳实践:如何扩展你的SRS并发能力?
- SRS是单进程模型,不支持多进程;可以使用集群 或者ReusePort扩展多进程(多核)能力。
- 基于HLS-TS&RTMP-FLV的微信小程序点直播方案
- 借力SRS落地实际业务的几个关键事项
- 干货 | 基于SRS直播平台的监控系统之实现思路与过程
- Android直播实现
- SRS直播服务器与APP用户服务器的交互
- 使用flvjs实现摄像头flv流低延时实时直播
- IOS 直播方面探索(服务器搭建,推流,拉流)
- 国产开源流媒体SRS4.0对视频监控GB28181的支持
Develop Guide
- 高性能网络服务器设计,分析高性能网络服务器的设计要点。
- SRS高精度、低误差定时器,论高并发服务器的定时器问题。
- 协程原理:函数调用过程、参数和寄存器,剖析SRS协程实现的最底层原理。
- 性能优化:SRS为何能做到同类的三倍,论性能优化的七七八八、前前后后。
- SRS代码分析,分析SRS结构和代码逻辑,类结构图,线程模型,模块架构。
- Third-party Client SDK: 第三方厂商提供的客户端推流和播放的SDK,一般是移动端包括Andoird和iOS。
- 轻量线程分析,分析SRS依赖的库ST的关键技术。
- SRS代码分析,分析SRS结构和代码逻辑,类结构图,线程模型,模块架构。
- 深度: 掀起你的汇编来:如何移植ST协程到其他系统或CPU?
- 肖志宏:SRS支持WebRTC级联和QUIC协议
- StateThreads源码分析
- SRS 4.0源码分析
Migrate From NGINX-RTMP
- NG EXEC: 为特殊的事件执行外部程序,譬如exec_publish,当发布流时exec外部程序。
Product & Milestones
- Milestones: SRS的路线图和产品计划。
- Why SRS: 为何选择SRS?SRS的路线图?
- GIT Mirrors: SRS在各个主要GIT站点的镜像,代码都是保持同步的。
- Main Features: SRS的功能列表。请注意有些功能只有特定的版本才有。请注意有些功能是实验性的。
- Releases: SRS目前已经发布的版本。
- Docs: SRS的详细文档。
- Compare: SRS和其他服务器的对比。
- Performance: SRS的性能测试报告。
Tech Docs
- 历经5代跨越25年的RTC架构演化史
- 技术解码 | SRT和RIST协议综述
- 公众号专栏:SRS,知识库,重要功能和阶段性结果,解决方案和DEMO
- 公众号专栏:深度,底层技术分析,服务器模型,协议处理,性能优化等
- 公众号专栏:动态,关于最新的会议和动态,新闻,社区等
- WebRTC 的现状和未来:专访 W3C WebRTC Chair Bernard Aboba
- B站专栏(视频):SRS开源服务器
- 零声学院(视频):SRS流媒体服务器实战
- 音视频开发为什么要学SRS流媒体服务器
Join Us
- 如何向SRS提交ISSUE?
- File Issue: 提交需求、Bug和反馈。
- Contact: 用钉钉、微信、邮箱联系我们。
Questions or need help?
其他联系方式,参考联系我们
Winlin 2020.01
Welcome to SRS wiki!
SRS 5.0 wiki
Please select your language:
SRS 4.0 wiki
Please select your language:
SRS 3.0 wiki
Please select your language:
SRS 2.0 wiki
Please select your language:
SRS 1.0 wiki
Please select your language:



