Перенаправление аудиопотока, чтобы избежать CORS - C# - PullRequest
0 голосов
/ 28 апреля 2020

Мне нужно перенаправить аудиопоток, чтобы избежать CORS, чтобы использовать AudioContext () для визуализаций.

Вместо того, чтобы использовать исходную ссылку на поток, я бы указал игроку на «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();
            }
        }
    }
}

1 Ответ

0 голосов
/ 29 апреля 2020

Решение, которое я нашел, изначально было создано для использования с NAudio для воспроизведения удаленного файла MP3, но я смог повторно использовать его для своих нужд. Возможно, есть и лучшие способы, но это работает.

Воспроизведение аудио из потока с использованием C#

Редактировать: кажется, что соединение сброшено с сервера на сервер, но я не уверен IIS не будет отправлять «Connection: keep-alive» клиенту, однако он отправляется клиенту исходным потоком. Попытался добавить KeepAlive = true в WebRequest и изменить версию протокола на 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]).

...