c# - 重定向音频流以避免 CORS - C#

标签 c# asp.net audio cross-domain audiocontext

我需要重定向音频流以避免 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/

相关文章:

c# - 在 GridView 中对 DropDownList 选定值使用 Eval

c# - 统一处理众多异常

c# - .Net 如何为部分类创建构造函数?

c# - 平均存储过程中的空列

algorithm - 为翻译字幕添加静音的机器学习方法

c# - Windows 8 C# : Windows. Ui.Xaml.Media.ImageSource 更改图像

c# - 如何将 SQL 日期转换为 DateTime?

asp.net - NHibernate:无法实例化 CacheProvider?

android - 如何让Android分贝测量更准确?它完全正确吗?

audio - 好的音频混响源?