Здравствуйте, есть задача проксировать аудио стрим. В выходящий поток отправить данные получилось, но во первых они не воспринялись 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; }
}
}
}