Javascript 我能';从流媒体服务器下载M3U8 HLS播放列表时是否不会遇到CORS错误?

Javascript 我能';从流媒体服务器下载M3U8 HLS播放列表时是否不会遇到CORS错误?,javascript,cors,avplayer,http-live-streaming,Javascript,Cors,Avplayer,Http Live Streaming,为了监控我们正在运行的一些HLS视频流,我制作了一个HTML网页,其中包括: videojs播放器(在元素中) 一些javascript每10秒运行一次,以获取和分析m3u8播放列表内容(例如检测冻结的播放列表) 这适用于我监控的大多数流媒体网站,只有一个 当我在视频播放器中使用播放列表URL作为src时,一切正常,视频播放完毕。但是,当我的脚本使用XMLHttpRequest()获取M3U8时,由于CORS原因,我被Chrome阻止: 访问位于的XMLHttpRequest'https:/

为了监控我们正在运行的一些HLS视频流,我制作了一个HTML网页,其中包括:

  • videojs播放器(在
    元素中)

  • 一些javascript每10秒运行一次,以获取和分析m3u8播放列表内容(例如检测冻结的播放列表)

这适用于我监控的大多数流媒体网站,只有一个

当我在视频播放器中使用播放列表URL作为
src
时,一切正常,视频播放完毕。但是,当我的脚本使用XMLHttpRequest()获取M3U8时,由于CORS原因,我被Chrome阻止:

访问位于的XMLHttpRequest'https://www.xxxx.com/cdn/live/video/xxxxx.m3u8?sec=xxxxxxCORS策略已阻止“来自原点”的“null”:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许原点”标头。

我最初使用Muyor的Chrome扩展“Allow CORS”v0.1.1,但它似乎不再工作了。目前的Chrome是76.0.3809.132,几天前它还在工作

现在,我更希望能够正确地表达出来,但尽管我尽可能多地阅读了CORS,但我仍然不明白为什么videojs可以阅读播放列表(videojs是JavaScript,不是吗?),而我的脚本不能。两者都运行在同一浏览器上,在同一页面中,访问同一URL

下面是获取播放列表的Javascript代码示例:

xhr.onreadystatechange=function(){
    // there lies the code that analyse the downloaded playlist and write to the HTML document in case of errors
}
xhr.open( "GET", checkitem.url, true );
xhr.setRequestHeader('Access-Control-Allow-Headers', '*'); // doesn't help
xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); // doesn't help neither
xhr.send();
这适用于除一个站点以外的所有站点。 我不能要求服务器更改任何内容。 无论是从文件系统还是通过本地Web服务器在浏览器中打开html文件,行为都是相同的

由于videojs可以访问URL,我相信我可以从自己的角度做一些事情


谢谢

CORS正在做它设计的事情。有办法绕过它会使CORS毫无用处

Access Control Allow header
Access Control Allow Origin
不是客户端头,它们是服务器端头

有几种选择:

  • 服务器管理员必须更新服务器配置以包含必要的头
  • 或者,您可以配置代理服务器来代理请求

  • 或者你可以修改和编译chrome的源代码


您的服务器应该允许html所在的域hostedHi@szatmary,因此请您解释一下为什么作为JavaScript视频播放器的VideoJS可以访问URL?如果可以的话,肯定有一些我做得不对。我不知道你的整个设置,但我猜视频JS播放器与播放列表来自同一个域,而你的代码不是。不,不是。我的网页在我的电脑上是本地的,并从以下位置获取videojs代码:
,这是一个与承载视频流的服务器(即m3u8文件)完全不同的域。所有这些都运行在同一个网页上:videojs播放器和我自己的javascript。不幸的是,我无法共享该URL,而且它可能只被地理阻止到我的国家,因此不容易提供完整的示例进行复制。然后发生了一些非标准的事情,可能是自定义服务器逻辑。