HTTPS站点下使用video.js无法播放RTMP音频流问题咨询
RTMP流在HTTPS站点播放失败的解决方案
根因说明
HTTPS站点的安全策略默认会拦截明文传输的非加密资源,RTMP本身属于明文协议,未做TLS加密的RTMP请求在HTTPS上下文下会被浏览器直接拦截,就是你收到的报错的原因。
你没有源RTMP服务端控制权限的前提下,可以使用以下三种方案解决:
- 方案1:新增流媒体中转层做协议转换
在你自己可控的服务端部署中转服务,拉取源站的RTMP流后转封装为支持HTTPS传输的HLS、DASH或者WebRTC协议流,你的HTTPS站点直接请求中转后的加密流即可。常用的开源中转工具包括ffmpeg、SRS、Nginx-RTMP模块,中转服务需要配置合法的HTTPS证书,保证输出的流走HTTPS传输。 - 方案2:拆分业务到HTTP子域名部署
单独申请一个HTTP协议的子域名,专门用来部署RTMP播放相关的页面,主HTTPS站点通过iframe嵌入该HTTP子域名的播放页面即可。该方案会触发浏览器的混合内容警告,部分安全策略严格的浏览器会默认拦截iframe加载,需要用户手动授权允许混合内容运行,仅适合对用户可控的场景。 - 方案3:指导用户修改浏览器安全配置(仅内部场景可用)
如果你的站点仅面向内部固定用户使用,可以指导用户手动开启浏览器对应站点的「允许加载不安全内容」权限,即可正常加载RTMP流。该方案完全不需要修改服务端配置,但公网场景下普通用户不会主动修改浏览器配置,不推荐使用。
以上所有方案均不需要调整源RTMP服务端的配置,仅需要修改你侧的站点部署逻辑或者新增中转服务即可。
内容的提问来源于stack exchange,提问作者shrw
相关产品推荐
相关产品推荐

