Daeamon
@Daeamon

Как проксировать бесконечный стрим?

Здравствуйте, есть задача проксировать аудио стрим. В выходящий поток отправить данные получилось, но во первых они не воспринялись Media Player Classic как аудио поток, во вторых не знаю как читать и писать его бесконечно пока пользователь не закроет страницу соединение(закрыв проигрыватель).
Помогите пожалуйста решить задачу) Вот что то уже накидал
using System;
using System.IO;
using System.Net;
using System.Web;

namespace WebApplication1
{
    public class proxy : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            HttpResponse response = context.Response;
            /*
            // Check for query string
            string uri = Uri.UnescapeDataString(context.Request.QueryString.ToString());
            if (string.IsNullOrWhiteSpace(uri))
            {
                response.StatusCode = 403;
                response.End();
                return;
            }

            // Filter requests
            if (!uri.ToLowerInvariant().Contains("wikimedia.org"))
            {
                response.StatusCode = 403;
                response.End();
                return;
            }
            */
            string uri = "http://111.223.51.8:8600/;?icy=http";
            // Create web request
            HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(uri);
            //WebRequest webRequest = WebRequest.Create(new Uri(uri));
            webRequest.Method = "GET";
            webRequest.ContentType = "audio/mpeg";

            // Send the request to the server
            
            WebResponse serverResponse = null;
            try
            {
                serverResponse = webRequest.GetResponse();
            }
            catch (WebException webExc)
            {
                response.StatusCode = 500;
                response.StatusDescription = webExc.Status.ToString();
                response.Write(webExc.Response);
                response.End();
                return;
            }

            // Exit if invalid response
            if (serverResponse == null)
            {
                response.End();
                return;
            }
            // Configure reponse
            //response.ContentType = serverResponse.ContentType;
            response.ContentType = "audio/mpeg";

            var headers = serverResponse.Headers;
            for(int i = 0; i < headers.Count; ++i)
            {
                string header = headers.GetKey(i);
                foreach (string value in headers.GetValues(i))
                {
                    response.AddHeader(header, value);
                }
            }
            //Stream stream = serverResponse.GetResponseStream();


            using (Stream answer = serverResponse.GetResponseStream())
            {

                byte[] buffer = new byte[128];
                for (int read = answer.Read(buffer, 0, buffer.Length); read > 0; read = answer.Read(buffer, 0, buffer.Length))
                {
                    response.OutputStream.Write(buffer, 0, read);
                }
            }
        }
        public bool IsReusable
        {
            get { return false; }
        }
    }
}
  • Вопрос задан
  • 500 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы