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,参考链接
Solution
Media Stream Server
: 关于媒体服务器和比较。Raspberry Pi
: 关于树莓派的支持。- 远程控制Raspberry PI摄像头和车,直播和纯WebRTC方案,参考链接
Others
:其他方案和常见问题。- 为何两个RTMP会逐步不同步,如何使用SRT或WebRTC来让两个不同的流保持同步,参考链接
- SRS源站集群如何支持HLS,切片文件如何分发,参考链接
- SRS源站集群如何扩展,如何解决MESH通信问题,参考链接
- 使用WebRTC录制视频,用SRS将WebRTC转RTMP后录制,参考链接
- RTSP和RTP的差别,RTSP和WebRTC区别,参考链接
- SRS的日志缩写含义,基于连接的日志,参考链接
- FPS为何不准,TBN的含义,转换时的误差,参考链接
- RTMP的tcURL是什么,如何获取流地址,参考链接
- 不用Flash和Nginx,H5如何播放RTMP流,参考链接
- WebRTC是否能替代RTMP,直播是否只能WebRTC,参考链接
- 如何使用云主机自建流媒 体系统,参考链接
Source Cleanup
Source Cleanup
: 关于超多路流的内存增长等- 推流的Source对象没有清理,推流路数增多内存会增长,暂时可以使用Gracefully Quit绕开,会在未来解决,参考 #413
- 再次强调,可以用Gracefully Quit绕开,就算未来解决了这个问题,这个方案也是最靠谱和最优的,重启大法好。
Threading
- SRS为何不支持多线程,如何扩容你的SRS,参考链接
Video Guides
下面是答疑的视频资料,详细讲解了某个话题,如果你的问题类似请直接看视频哈:
- FAQ:SRS有哪些文档和资料 SRS有哪些文档资料?先看Usage,在看FAQ,接着是Wiki,还有Issues。如果GitHub访问慢怎么办呢?可以把资料Clone到本地,或者访问Gitee镜像。
- FAQ:SRS是否支持STUN和WebRTC的P2P SRS是否支持STUN协议?如何支持WebRTC P2P打洞?SFU和P2P的区别?
- FAQ:SRS导致WebRTC丢帧如何排查 RTMP推流到SRS使用WebRTC播放是常见的用法,RTMP是30帧,WebRTC只有10帧,看起来就会卡顿不流畅,这个视频分享了 如何排查这类问题。
- FAQ:SRS如何实现服务的高可靠和热备 SRS如果挂了,怎么能保障服务不受到影响?如何实现音视频服务的高可靠?如何做流的热备和恢复?
- FAQ:SRS有哪些Docker镜像 Docker是非常好用的技术,SRS提供了完善的Docker镜像,也可以自己打SRS的Docker镜像。
- FAQ:SRS如何提交Issue 如果碰到问题,怎么判断是否是Issue?怎么排查Issue?如何提交新的Issue?为何提交的Issue被删除?
- FAQ:SRS为何不支持WebRTC的FEC等复杂算法 什么是WebRTC的拥塞控制算法?FEC和NACK有何不同、如何选择?为何SRS没有支持复杂的算法?为何说复杂牛逼的算法一般没什么鸟用?
- FAQ:CDN支持WebRTC的完善度 CDN或云厂商是否都支持WebRTC了?为何说是差不多支持了?目前还有哪些问题或坑?都有哪些CDN的直播是支持WebRTC协议的?
- FAQ:如何实现直播混流或WebRTC的MCU 如何给直播添加LOGO?如何实现直播画中画?如何实现WebRTC转直播?如何实现WebRTC的MCU功能?为何RTC架构大多是SFU而不是MCU?什么时候必须用MCU?
- FAQ:开源SFU如何选?Janus有哪些问题,何解? Janus是WebRTC领域使用最广泛也是最好的SFU之一,当然和所有SFU一样它也有一堆的问题,选择开源选的不仅是代码和架构,选择的更是活跃的社区和对方向的判断。
- FAQ:如何更低码率达到同等画质 在保证画质的前提 下,如何降低码率?我们可以使用动态码率,还可以使用相对空闲的客户端CPU交换码率,还可以在业务上优化,特别多平台推流时需要避免上行码率过高。
WebRTC Cluster
WebRTC+Cluster
: 关于WebRTC集群的相关问题
WebRTC Live
WebRTC+Live
: 关于WebRTC和直播的相关问题- WebRTC和RTMP的互相转换,比如RTMP2RTC(RTMP推流RTC播放), 或者RTC2RTMP(RTC推流RTMP播放),必须要指定转换配置,默认不会开启音频转码,避免较大的性能损失,参考 #2728
- SRS 4.0.174之前可以,更新到之后就不工作了,是因为
rtc.conf
不默认开启RTMP转RTC,需要使用rtmp2rtc.conf
或者rtc2rtmp.conf
,参考 71ed6e5dc51df06eaa90637992731a7e75eabcd7 - 未来也不会自动开启RTC和RTMP的转换,因为SRS必须要考虑到独立的RTMP和独立的RTC场景,转换的场景只是其中一个,但是由于转换的场景导致严重的性能问题,所以不能默认开启,会导致独立的场景出现大问题。
- WebRTC如何支持一对多广播,支持非常多的拉流客户端,WebRTC转直播,参考链接
- FFmpeg和H5如何做低延迟直播,RaspberryPI采集设备推流,医疗设备远程协助,参考链接
WebRTC
-
WebRTC
: 关于WebRTC推拉流或会议的问题- WebRTC比直播复杂多了,很多WebRTC的问题,就不要在SRS里面提Issue,要自己先Google查询下什么问题。如果没有这个能力,就不要用WebRTC,这不是给小白用的功能,坑非常非常的多,没有爬坑能力就别往坑里跳。
- 比较常见的是Candidate设置不对,导致无法推拉流,这个详细看WebRTC的使用说明:#307
- 还有UDP端口无法访问的问题,可能是防火墙设置问题,也可能是网络问题,请用工具测试,参考 #2843
- 另外比较常见的是RTMP和WebRTC互相转换,请看上面 #webrtc-live 的说明。
- 接着就是WebRTC权限问题,比如本机能推流部署到公网不能推流,这是Chrome的安全设置问题,参考 #2762
- 还有不太常见,用官网的播放器,是不能播放非HTTPS的SRS的流,这也是Chrome的安全策略问题,参考 #2787
- 在docker映射端口时,若改变了端口需要改配置文件,或者通过eip指定,参考 #2907
-
WebRTC RTMP
: 关于WebRTC和直播相关的问题。 -
WebRTC的SFU的作用和应用场景有哪些,SFU功能对比,参考链接
Websocket
WebSocket/WS
:如何支持WS-FLV或WS-TS?- 可以用一个Go代理转一次,几行关键代码稳定又可靠,参考mse.go
Q&A
WebRTC Demo Failed
Question 加入RTC房间或通话失败
根据5.0文档中的SFU: One to One说明,我已经完成了以下配置:
- 将CANDIDATE设置为内网地址192.168.100.140
- 使用Docker启动了RTC服务、信令服务和HTTPS服务
- 成功访问了http://192.168.100.140/demos/并能够正常打开
然而,我在点击开始通话或加入房间后,摄像头会亮一下但没有任何反应。已经使用了自签发的OpenSSL key和crt证书,遇到了一个TLS证书握手错误的提示。
Answer
- 首先明确严格按照文档SFU: One to One进行操作
- 排查证书问题、https连接问题、浏览器权限问题等
Deleting
如果不符合要求的Issue,一般会打标为Deleting,会在一两周后删除,并回复:
!!! Before submitting a new bug/feature/discussion report, please ensure you have searched for any existing
bug/feature/discussion. Duplicate issues or questions that are overly simple or already addressed in the documentation
will be removed without any response.
这个问题在[Wiki](https://ossrs.net/lts/en-us/docs/v5/doc/getting-started)中有,请看文档。该Issue会被删除,请先阅读FAQ:#2716
咨询和讨论请加[付费星球](https://mp.weixin.qq.com/s/HdSf7qAR94v2Mxdzf2qLAQ)交流。也可以[加微信群](https://ossrs.net/lts/zh-cn/docs/v4/doc/contact),在群里交流。
该Issue会被删除,请先阅读FAQ:#2716
你的问题不符合Issue的要求,请按Issue模版提Bug,不提供**完整**信息的Issue会被直接删除。
该Issue会被删除,请先阅读FAQ:#2716
你的问题已经在FAQ中存在,该Issue会被删除,请在FAQ中搜索。#2716
你的问题已经在Issues中存在,属于重复的问题,该Issue会被删除,请在Issues中搜索。#2716
这个问题不是SRS问题,是FFmpeg、WebRTC、客户端、OBS、反向代理Nginx、流的内容、编译工具问题,该Issue会被删除。#2716
Oryx的问题,请提交到[Oryx](https://github.com/ossrs/oryx),该Issue会被删除,请先阅读FAQ:#2716