flv.js 跨域访问 nginx-http-flv-moudle 开启basic authentication时遇到的问题

项目流程大概是这样的,浏览器从a服务器获取到流服务器地址和用户名密码,然后从流服务器上通过basic authentication取流

这里有两点:1、跨域问题  2 、要做访问验证

是开启nginx这边的basic authentication验证,这个网上的方法很多,不在累述了,网上找了一篇,看看就会了,改好后使用vlc取流,按要求输入用户名,密码就能取到流了

然后是flv.js的使用:在createPlayer的第二个参数config里加入basic authentication的http头

例如:

            this._videoPlayerObj = FlvJs.createPlayer({
                    type: 'flv',
                    url: url,
                    isLive: true,
                }, {
                    enableStashBuffer: false,
                    stashInitialSize: 128,
                    autoCleanupSourceBuffer: true,
                    headers:{
                        'Authorization':'Basic '+btoa(unescape(encodeURIComponent("username:password")))
                    }
                }
            );
如上,其中的headers部分就是要添加上的http头部,这个属性在最新的flv.js里是支持的,作者根据使用者的反馈更新过

这时,来通过flv.j获取视频,实际还是不行的,通过抓包发现发送的请求是OPTION!!

OPTIONS /live?port=1935&app=hls&stream=jt_n127000000001_c3_s0 HTTP/1.1
Host: 192.168.110.166
Connection: keep-alive
Accept: */*
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization
Origin: http://localhost:8090
Sec-Fetch-Mode: cors
Referer: http://localhost:8090/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8

这个是夸域访问时的预检请求,网上文章很多,找几篇来看看就明白了,处理这个问题在服务端,也就是nginx端来解决,博主最后找的了这篇文章来处理的,就是在配置里加上对OPTIONS的处理,如下

if ( $request_method = 'OPTIONS' ) {
      add_header 'Access-Control-Allow-Origin' '*';
      add_header 'Access-Control-Max-Age' '604800';
      add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
      add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Access-Token,Blog-ID';
      return 200;
}

这样当方法是OPTION时,按这个脚本来返回。

到此,通过flv.js就可以访问到流了吗,不行,上面的脚本还差点

因为我们需要做basic authentication认证,会在http头里加上Authorization字段,但是上面的脚本Access-Control-Allow-Headers里并没有指明Authorization是允许的。浏览器会包如下错:

Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response

既然说authorization是not allowed,哪就把它加上

add_header 'Access-Control-Allow-Headers' 'DNT,Authorization,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Access-Token,Blog-ID';
这时,再来访问就可以了。

以上就是配置时遇到的问题并解决的全过程

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Windows环境下,我们可以使用Nginx服务器来搭建一个支持flv.js直播下载的环境。而为了方便用户快速部署,我们可以使用nginx-http-flv-module这个一键部署包。 Nginx是一个高性能的HTTP和反向代理服务器,可以实现负载均衡、静态文件缓存和动态请求处理等功能。而nginx-http-flv-module是Nginx的一个模块,专门用于支持flv.js直播下载。它提供了与flv.js交互的接口,使得我们可以在网页上直接使用flv.js进行FLV直播的下载和播放。 使用nginx-http-flv-module一键部署包的过程相对简单。首先我们需要下载适用于Windows环境的Nginx服务器程序,这个可以在Nginx官方网站上下载到。然后我们解压缩得到一个可执行文件的目录。接下来,我们下载nginx-http-flv-module的一键部署包,并将其拷贝到Nginx的安装目录中的“modules”文件夹下。 然后,我们需要修改Nginx的配置文件,将nginx-http-flv-module添加到HTTP模块中。我们可以通过编辑Nginx的配置文件“nginx.conf”来完成这一步骤。在配置文件中找到对应的位置,添加“--with-http_flv_module”来启用nginx-http-flv-module。 最后,我们启动Nginx服务器,这样就成功部署了一个支持flv.js直播下载的环境。我们只需要配置好服务器,然后将具有FLV视频流的URL嵌入到flv.js的代码中,就可以在网页上进行直播的下载和播放了。 需要注意的是,使用nginx-http-flv-module一键部署包需要一些基本的Nginx配置知识,以及一定的网络技术能力。同,我们还需要了解flv.js的使用方法和相关配置,以便正确地使用它进行视频直播的下载和播放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值