FAQ
关于Q&A,请按下面的流程:
- 在Wiki中有的内容,请花时间看文档,不要提Issue。
- 重复的Issue会被删除,请先在Issues中搜索你的问题,确认没有后再提Issue。
- 我如何才能够?How do I? -- Stack Overflow
- 我碰到一个错误,为何?I got this error, why? -- Stack Overflow
- 我碰到个错误,确定是Bug,请按Issue模版提Bug or PR,不提供完整信息的Issue会被直接删除。
- 咨询和讨论请来视频号直播间交流。也可以加微信群,在群里交流。
FAQ
下面是常见的问题,如果没有找到你的问题,请先在本Issue中搜索,如果你确 认是个Bug并且没有提交过, 请按照要求提交Issue。
Note: 这是关于SRS的FAQ,如果是Oryx的FAQ请参考Oryx FAQ
Cluster and CDN
- 关于RTMP/HTTP-FLV/WebRTC等直播?
- SRS只支持流协议,比如直播或WebRTC,详细请参考WiKi中关于集群的部分。
- 关于HLS/DASH等切片直播,或者点播/录制/VoD/DVR?
- 关于HLS/DASH/VoD/DVR的分发集群?
- 这些都是HTTP文件,HTTP文件分发集群建议使用NGINX,参考 HLS Cluster
- 可以用NGINX结合SRS Edge分发HTTP-FLV,实现所有HTTP协议的分发,参考 Nginx For HLS
- SRS源站集群,多流热备,流切换,推流容灾,提问关于直播流的容灾和切换,参考链接
- 如何构建一个服务器网络,解决就近服务,和扩展服务器容量,SRS的Edge集群,参考链接
- 如何做多流备份,多个流取可用的一个,流的灾备和切换,参考链接
Console
Pagination
: 关于控制台流和客户端的分页问题,参考 #3451- API默认参数为
start=0
,count=10
,而Console没有支持分页,计划在新的Console支持。
- API默认参数为
CORS
CORS
: 关于HTTP API或流的跨域
CPU and OS
CPU and OS
:关于SRS支持的CPU架构和OS操作系统- SRS支持常见的CPU架构,比如x86_64或者amd64,以及armv7/aarch64/AppleM1,还有MIPS或RISCV,以及龙芯loongarch,其他CPU适配请参考ST#22。
- SRS支持常用的操作系统,比如Linux包括CentOS和Ubuntu等,还有macOS,以及Windows等。
- 国产信创系统,SRS也是支持的,如果需要适配新的国产信创系统,可以提issue。
Windows
: 关于Windows的特别说明- 一般用Windows做服务器比较少,但也有一些应用场景,SRS 5.0目前已经支持了Windows,每个版本发布都会有Windows的安装包下载。
- 由于大家在Github下载比较困难,我们提供了gitee的镜像下载,具体请看 Gitee: Releases 每个版本的附件。
- 在Windows平台还有些问题未解决,也会继续完善支持,详细请参考#2532
DVR
Dynamic DVR
: 关于动态录制,正则表达式匹配需要录制的流等。- SRS录制WebRTC为MP4为何会失败,参考链接
Edge HLS/DVR/RTC
Edge HLS/DVR/RTC
: 关于边缘(Edge)支持HLS/DVR/RTC等- 边缘(Edge)是直播的集群,只支持直播流协议比如RTMP和FLV,只有源站才能支持HLS/DVR/RTC,参考 #1066
- 目前并没有在Edge禁用HLS/DVR/RTC等能力,但未来会禁用,所以请不要这么用,也用不起来。
- HLS的集群,请参考文档HLS Edge Cluster
- 正在开发WebRTC和SRT的集群能力,参考#3138。
FFmpeg
FFmpeg
: 关于FFmpeg相关的问题- 找不到FFmpeg,出现
terminate, please restart it
,编译失败No FFmpeg found
,FFmpeg不支持h.265或其他Codec,这是需要自己编译或者下载FFmpeg,并放到指定的路径后SRS就会检测到,参考 #1523 - 如果是FFmpeg的使用问题,请一律不要在SRS提Issue,请移步到FFmpeg的社区提交。在SRS提FFmpeg的问题,会被直接删除,不要偷懒。
- 找不到FFmpeg,出现
Features
- 关于支持的功能,过时的功能,以及计划?
- 每个版本支持的功能不一样,在Github首页会给出来支持的功能,比如develop/5.0, release/4.0, release/3.0。
- 每个版本的变更也不相同,在Github首页也会给出来具体的变更,比如develop/5.0, release/4.0, release/3.0。
- 除了新增功能,SRS还会删除不合适的功能,比如RTSP推流,比如srs-librtmp,比如GB的SIP信令等等,这些功能有可能是没有用,有可能是因为不合适,也有可能是以更加合适的方式提供,参考 #1535
GB28181
GB28181
: 关于GB的状态和路线图- GB已经放到独立的仓库 srs-gb28181, 请参考 #2845
- GB的使用请参考 #1500 ,目前GB还是在feature/gb28181分支,稳定后才会合并到develop然后release,预计在SRS 5.0发布。
- SRS支持GB不会支持全,只会作为接入协议。关注度比较高的对讲有计划支持。
Help
- 微信群问问题没人回答?社区提问的艺术?
- 请先在社区的各种文档中搜索,不要问已经存在的答案的问题。
- 请详细描述问题的背景,请表现出自己已经做出的努力。
- 开源社区意味着需要你自己能解决问题,如果不行,请考虑付费咨询。
HEVC/H.265
RTMP for HEVC
: 关于RTMP如何支持HEVC。- 如何支持RTMP FLV HEVC推流,参考链接
HLS Fragments
HLS Fragment Duration
: 关于HLS切片时长- HLS切片时长,和GOP长度、是否等待关键帧
hls_wait_keyframe
,切片时长hls_fragment
,三个因素决定的。 - 举例来说,GOP若设置为
2s
,切片长度hls_fragment:5
,等待关键帧hls_wait_keyframe:on
,那么实际每个TS切片可能在5~6秒左右,因为需要等待一个完整的GOP才能关闭切片。 - 举例来说,GOP若设置为
10s
,切片长度hls_fragment:5
,等待 关键帧hls_wait_keyframe:on
,那么实际每个TS切片也是10秒以上。 - 举例来说,GOP若设置为
10s
,切片长度hls_fragment:5
,等待关键帧hls_wait_keyframe:off
,那么实际每个TS切片是5秒左右。切片不是关键帧开头,所以有些播放器起播可能会花屏,或者出现画面比较慢。 - 举例来说,GOP若设置为
2s
,切片长度hls_fragment:2
,等待关键帧hls_wait_keyframe:on
,那么实际每个TS切片可能在2秒左右。这样HLS的延迟比较低,而且不会有花屏或解码问题,但是由于GOP比较小,所以编码质量会稍微有所损失。 - 虽然切片大小可以设置为小于1秒,比如
hls_fragment:0.5
,但是#EXT-X-TARGETDURATION
还是1秒,因为它是个整数。而且切片太小,会导致切片数量过多,不利于CDN缓存,也不利于播放器缓存,所以不建议设置太小的切片。 - 若希望降低延迟,不要将切片设置为1秒以下,设置为1秒或2秒会比较合适。因为就算设置为1秒,由于播放器有取切片的策略,有缓存策略,并不代表延迟就能和RTMP或HTTP-FLV流一样。一般HLS的最小延迟都在5秒以上。
- GOP就是两个关键帧之间的帧数目,需要在编码器上设置,比如FFmpeg的参数
-r 25 -g 50
,就是帧率为25fps,GOP为50帧,也就是2秒。 - OBS上是有个
Keyframe Interval(0=auto)
,它最小是1s
,如果设置为0实际上是代表自动,并不是最低延迟设置。低延迟建议设置为1s或2s。
- HLS切片时长,和GOP长度、是否等待关键帧
HTTP API
-
HTTP RAW API
: 关于RAW API,动态录制DVR等- 由于RAW API有各种问题,会导致过度使用,4.0已经将该功能删除,详细原因请看 #2653
- 再次强调不要用HTTP RAW API实现业务,这是你的业务系统该做的,用Go或Nodejs搞下就可以。
-
Secure HTTP API
: 关于API鉴权,API安全等- 关于HTTP API鉴权,如何防止所有人访问,目前建议用Nginx代理解决,后续会增强,详细请看 #1657
- 还可以使用HTTP Callback来实现鉴权,在推流或播放时,调用你的业务系统的API,实现hook。
-
HTTP Callback
: 关于HTTP回调和鉴权。- SRS的HTTP回调做鉴权,HTTP Callback, Response如何返回错误码,参考链接
HTTPS & HTTP2/3
HTTPS
: 关于HTTPS服务、API、Callback、Streaming、WebRTC等- HTTPS API提供传输层安全的API,WebRTC推流要求是HTTPS页面自然也只能访问HTTPS API。
- HTTPS Callback回调HTTPS服务,如果你的服务器是HTTPS协议,一般业务系统为了安全性都是HTTPS协议。
- HTTPS Live Streaming提供传输层安全的Stream流,主要是HTTPS的网页只能访问HTTPS的资源。
- 单域名自动从
letsencrypt
自动申请SSL证书,方便中小企业部署SRS,也避免HTTPS代理因为流媒体业务代理的开销太大了,参考 #2864 - 使用Nginx或Caddy等反向代理,HTTP/HTTPS Proxy,提供统一的HTTP/HTTPS服务,参考 #2881
HTTP2
: 关于HTTP2-FLV或HTTP2 HLS等。- SRS不会实现HTTP2或者HTTP3,而是推荐使用反向代理来转换协议,比如Nginx或者Go。
- 由于HTTP是非常非常成熟的协议,现有的工具和反向代理能力非常完善,SRS没有必要实现完整的协议。
- SRS已经实现的是一个简单的HTTP 1.0的协议,主要提供API和Callback的能力。
Latency
Latency
: 关于如何降低延迟,如何做低延迟直播,WebRTC延迟多少。HLS Latency
: 关于HLS协议的延迟。- HLS的延迟太大,切换内容后观看到需要挺久,如何降低HLS延迟,参考链接
- 如何配置HLS降低延迟,参考HLS Latency
Benchmark
: 关于延迟的测量和测试。- 如何测量和优化直播的延迟,各个环节和协议的延迟,如何改善和度量延迟,参考链接
Performance and Memory
Performance
: 关于性能优化,并发,压测,内存泄漏,野指针- 性能是一个综合话题,是项目的质量、支持的容量和并发、如何优化性能等比较笼统的叫法,甚至也包含内存问题,比如内存泄漏(导致性能降低)、越界和野指针问题。
- 如果是需要了解SRS的并发,必须分为直播和WebRTC单独的并发,直播可以用srs-bench,WebRTC可以用feature/rtc分支压测,获取特定码率和延迟以及业务特点下,你的硬件和软件环境所能支持的并发数。
- SRS也提供了官方的并发数据,具体可以参考 Performance ,还给出了如何测量这些并发,以及什么条件下的数据,还有具体的优化代码。
- 如果是需要查性能问题,或者内存泄漏,或者野指针问题,必须使用系统的相关工具,比如perf、valgrind或者gperftools等工具,具体请参考 SRS性能(CPU)、内存优化工具用法 或者 Perf 。
- 特别强调,valgrid从SRS 3.0(含)开始已经支持,ST的patch已经打上了。
Player
Player
: 关于播放器的选择和平台支持情况。
RTSP
RTSP
:RTSP推流,RTSP服务器,RTSP播放等Browser RTSP
: 如何使用浏览器播放RTSP等- 如何用一个服务器接收所有的IPC流,内网RTSP转公网直播或RTC,参考链接