-
-
Notifications
You must be signed in to change notification settings - Fork 5.4k
migrate_v4_CN_introduction
Note: 如果觉得Github的Wiki访问太慢,可以访问 Gitee 镜像。
注意:SRS4已经发布,属于稳定版,可用于生产环境。
SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181。
Note: 简单的单节点架构,适用于大多数场景,大图请看figma。
Note: 这是典型的源站和边缘集群的架构,适用于需要高并发的场景,高清大图请参考这里
对于新手来说,音视频的门槛真的非常高,SRS的目标是降低(不能消除)音视频的门槛,所以请一定要读完Wiki。 不读Wiki一定扑街,不读文档请不要提Issue,不读文档请不要提问题,任何文档中明确说过的疑问都不会解答。
SRS支持下面多种方式启动,请使用你最熟悉的方式。
下载源码,推荐用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直接启动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的信息。
SRS可以在云虚拟机上工作得很好,下面是一些可用的云厂商,以及使用方式:
- TencentCloud LightHouse:不仅仅是SRS,这是个微缩视频云,参考#2856。
- TencentCloud CVM:不仅仅是SRS,这是个微缩视频云,参考#2856。
- DigitalOcean Droplet:海外用户,直接创建SRS Droplet。
- CentOS 7安装包:在所有云厂商的虚拟机上,手动安装SRS,使用systemctl管理服务。
推荐使用K8s部署SRS,参考Deploy to Cloud Platforms,视频教程Bilibili: SRS-027-用K8s零命令行部署SRS
SRS提供了一系列的模版项目,可以快速部署到云平台K8s:
请继续阅读下面的内容,了解更多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。
- 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编码格式。
- 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集群。
- Linux Service: 启动或停止服务。
- HTTP Callback: 使用HTTP回调侦听SRS的事件。
- HTTP API: 使用SRS的HTTP API获取数据。
- Special Control: 一些特殊的控制配置。
- 陈海博:SRS在安防中的应用
- 最佳实践:一对一通话,多人通话和直播连麦
- 最佳实践:如何扩展你的SRS并发能力?
- SRS是单进程模型,不支持多进程;可以使用集群 或者ReusePort扩展多进程(多核)能力。
- 基于HLS-TS&RTMP-FLV的微信小程序点直播方案
- 借力SRS落地实际业务的几个关键事项
- 干货 | 基于SRS直播平台的监控系统之实现思路与过程
- Android直播实现
- SRS直播服务器与APP用户服务器的交互
- 使用flvjs实现摄像头flv流低延时实时直播
- IOS 直播方面探索(服务器搭建,推流,拉流)
- 国产开源流媒体SRS4.0对视频监控GB28181的支持
- 高性能网络服务器设计,分析高性能网络服务器的设计要点。
- 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源码分析
- NG EXEC: 为特殊的事件执行外部程序,譬如exec_publish,当发布流时exec外部程序。
- Milestones: SRS的路线图和产品计划。
- Why SRS: 为何选择SRS?SRS的路线图?
- GIT Mirrors: SRS在各个主要GIT站点的镜像,代码都是保持同步的。
- Main Features: SRS的功能列表。请注意有些功能只有特定的版本才有。请注意有些功能是实验性的。
- Releases: SRS目前已经发布的版本。
- Docs: SRS的详细文档。
- Compare: SRS和其他服务器的对比。
- Performance: SRS的性能测试报告。
- 历经5代跨越25年的RTC架构演化史
- 技术解码 | SRT和RIST协议综述
- 公众号专栏:SRS,知识库,重要功能和阶段性结果,解决方案和DEMO
- 公众号专栏:深度,底层技术分析,服务器模型,协议处理,性能优化等
- 公众号专栏:动态,关于最新的会议和动态,新闻,社区等
- WebRTC 的现状和未来:专访 W3C WebRTC Chair Bernard Aboba
- B站专栏(视频):SRS开源服务器
- 零声学院(视频):SRS流媒体服务器实战
- 音视频开发为什么要学SRS流媒体服务器
- 如何向SRS提交ISSUE?
- File Issue: 提交需求、Bug和反馈。
- Contact: 用钉钉、微信、邮箱联系我们。
其他联系方式,参考联系我们
Winlin 2020.01
Welcome to SRS wiki!
Please select your language:
Please select your language:
Please select your language:
Please select your language:
Please select your language: