我需要重定向音频流以避免 CORS,以便使用 AudioContext() 进行可视化。
我不使用原始流 url,而是将播放器指向“mysite.com/stream/”,这将拦截流并将其提供给播放器。
我真的不知道在这种情况下我在做什么,这从我下面的尝试中应该很明显。感谢任何人的帮助。
System.Net.HttpWebRequest web = (System.Net.HttpWebRequest)System.Net.WebRequest.Create("https://ssl.geckohost.nz/proxy/caitlinssl?mp=/stream");
Response.ContentType = "audio/aac";
char[] buffer = new char[8192];
byte[] buffer_bytes = new byte[8192];
using (System.Net.HttpWebResponse web_resp = (System.Net.HttpWebResponse)web.GetResponse())
{
using (System.IO.Stream stream_web = web_resp.GetResponseStream())
{
//stream_web.CopyTo(Response.OutputStream);
using (System.IO.StreamReader stream_rdr = new System.IO.StreamReader(stream_web))
{
for (var i = 0; i < 100; i++)
{
stream_rdr.Read(buffer, 0, 8192);
Response.Write(buffer);
Response.Flush();
}
}
}
}
最佳答案
我找到的解决方案最初是为与 NAudio 一起使用来播放远程 MP3 文件而创建的,但我能够根据我的需要重新调整它的用途。可能有更好的方法,但这有效。
Play audio from a stream using C#
编辑:似乎服务器到服务器的连接已断开,但我并不肯定。 IIS 不会向客户端发送“Connection: keep-alive”,但它是由原始流发送到客户端的。尝试将 KeepAlive = true 添加到 WebRequest,并将协议(protocol)版本更改为 HTTP 1.0 以保持服务器到服务器的连接没有任何乐趣。
string url = "https://ssl.geckohost.nz/proxy/caitlinssl?mp=/stream";
Response.ContentType = "audio/aac";
using (Stream stream = WebRequest.Create(url).GetResponse().GetResponseStream())
{
byte[] buffer = new byte[32768];
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
Response.OutputStream.Write(buffer, 0, read);
Response.Flush();
}
}
结论:据我所知,在这种情况下,IIS 似乎无法将连接服务器持久保存到服务器。我不担心可扩展性,因为这是 1 用户的个人项目。我最终得到的解决方案是在单击时使用 ffmpeg 开始捕获流,将其转码为 flac/mkv,并使用上述的变体在写入文件时读取文件并将其提供给播放器(WPF WebView [IE/Edge])。
关于c# - 重定向音频流以避免 CORS - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61476626/