如何解决Icecast用户身份验证和Web音频API
我运行了一个Icecast2服务器,使用Web Audio API可从我的网站上获取流。我想使用Icecast User Basic Auth设置私人流。可以使用以下网址访问这些流:http:// Username:Password@example.com/stream。
我面临的问题是,如果可能的话,我想将URL作为http://example.com/stream传递给WEB音频API并使用XMLHTTPRequest进行身份验证;但是,该请求未通过CORS预检,因此我不确定是否正确设置了标头。
请注意,我还尝试在不使用任何请求的情况下提供带有用户名和密码的URL,并获得消息:The HTMLMediaElement passed to createMediaElementSource has a cross-origin resource,the node will output silence.
因此,我想无论如何我都需要发送请求。
我目前正在我的本地网络上对此进行测试。 Icecast服务器在Linux上运行,而我正在测试的网页在Windows上使用IIS运行。 Icecast ip为192.168.1.30:6048
,而IIS位于127.0.0.1:80
以下是我的Icecast配置文件和我正在使用的XMLHTTPRequest的相关部分。我目前还在测试中,在Icecast配置中关闭了全局标头:
<mount>
<mount-name>/test-stream.ogg</mount-name>
<authentication type="htpasswd">
<option name="filename" value="/usr/share/icecast2/user_auth"/>
<option name="allow_duplicate_users" value="0"/>
</authentication>
<http-headers>
<header name="Access-Control-Allow-Credentials" value="true" />
<header name="Access-Control-Allow-Origin" value="http://127.0.0.1" />
<header name="Access-Control-Allow-Headers" value="Authorization" />
<header name="Access-Control-Allow-Methods" value="GET,OPTIONS" />
</http-headers>
</mount>
window.onload = function() {
let username = "User1";
let password = "Pass1";
let xhr = new XMLHttpRequest();
xhr.open('GET','http://192.168.1.30:6048/test-stream.ogg',true);
xhr.withCredentials = true;
xhr.setRequestHeader('Origin','http://127.0.0.1');
xhr.setRequestHeader ("Authorization","Basic " + btoa(username + ":" + password));
xhr.onload = function() {
// Do Stuff...
}
xhr.send(null);
}
解决方法
尝试将其添加到Icecast配置文件的顶部(这将启用* CORS)
<icecast>
<http-headers>
<header name="Access-Control-Allow-Origin" value="*" />
<header name="Access-Control-Allow-Headers" value="Origin,Accept,X-Requested-With,Content-Type,If-Modified-Since" />
<header name="Access-Control-Allow-Methods" value="GET,OPTIONS,HEAD" />
</http-headers>
<limits>
...
,
经过一堆的设置和进一步研究后,我发现尝试在本地主机上的Web服务器上使用Icecast身份验证似乎存在一些未指定的问题。
我能够通过将所有内容移至公共服务器并向Icecast添加SSL来解决该问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。