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

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Воспроизведение аудиопотока в клиентском браузере

Сообщение Anonymous »

Я пытаюсь отправить звук со своей звуковой карты в HTTP-поток с помощью NAaudio, чтобы любой браузер в локальной сети мог открыть его. Например, LAN-радиостанция или что-то в этом роде, и используйте аудиоплеер по умолчанию из браузера. У меня звук записан в байтах, отправляю, но браузер не позволяет воспроизвести поток.

Код: Выделить всё

        public bool live = false;
public MMDeviceEnumerator MDE = new();
public MMDevice device_out;
public MMDevice device_in;
public WaveIn WaveIn = new();
public WaveOut WaveOut = new();
public BufferedWaveProvider BWP;
public string Port = "8572";
public HttpListener server;
public string ipAddress = "";

private void Window_Loaded(object sender, RoutedEventArgs e)
{
MMDeviceEnumerator Audio_out = new();
MMDevice Devices_out = Audio_out.GetDefaultAudioEndpoint(DataFlow.Render, Role.Multimedia);
device_out = Devices_out;

BWP = new(new WaveFormat(44100, 16, 2));
VolumeWaveProvider16 volumeProvider = new(BWP);
WaveOut.Init(volumeProvider);
WaveOut.Play();

WaveIn = new WaveIn
{
WaveFormat = new WaveFormat(44100, 1)
};

MMDeviceEnumerator Audio_in = new();
MMDevice devices_in = MDE.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Multimedia);
device_in = devices_in;
WaveIn.StartRecording();
WaveIn.DataAvailable += AudioInput_DataAvailable;
}

private void AudioInput_DataAvailable(object? sender, WaveInEventArgs e)
{
float max = 0;
for (int index = 0; index < e.BytesRecorded; index += 2)
{
short sample = (short)((e.Buffer[index + 1]  max) max = sample32;
}

BWP.AddSamples(e.Buffer, 0, e.BytesRecorded);
}

public void StartServer()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
ipAddress = ip.ToString();
}
}

server = new();
server.Prefixes.Add("http://*:8572/");
server.Start();

clientTasks = new ConcurrentDictionary();

Task.Run(() => HandleRequests());
T_IP.Text = "http://" + ipAddress.ToString() + ":8572/stream";
}

private async Task HandleRequests()
{
while (server.IsListening)
{
HttpListenerContext context = await server.GetContextAsync();
var task = Task.Run(() => ProcessRequest(context));
clientTasks.TryAdd(context.Request.RemoteEndPoint.ToString(), task);
}
}

private async Task ProcessRequest(HttpListenerContext context)
{
HttpListenerResponse response = context.Response;
response.ContentType = "audio/wav";
response.StatusCode = 206;
response.StatusDescription = "OK";
response.ProtocolVersion = new Version("1.0");

byte[] buffer = new byte[BWP.BufferLength];

while (context.Response.OutputStream.CanWrite)
{
int bytesRead = BWP.Read(buffer, 0, buffer.Length);
await response.OutputStream.WriteAsync(buffer, 0, bytesRead);
context.Response.Headers.Add("Content-Range", $"bytes 0-{buffer.Length - 1}/{buffer.Length}");
await response.OutputStream.FlushAsync();
}

response.OutputStream.Close();
clientTasks.TryRemove(context.Request.RemoteEndPoint.ToString(), out _);
}

public void StartServer()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
ipAddress = ip.ToString(); // Lable in WPF Window
}
}

server = new();
server.Prefixes.Add("http://*:8572/");
server.Start();

clientTasks = new ConcurrentDictionary();

Task.Run(() => HandleRequests());
}

public void StopServer()
{
live = false;
server.Stop();
}
Вот что я вижу после запуска сервера и перехода на локальный IP-адрес. Что-то не так с отправкой?
Изображение


Подробнее здесь: https://stackoverflow.com/questions/787 ... nt-browser
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Удалить звук системного динамика из аудиопотока
    Anonymous » » в форуме JAVA
    0 Ответы
    32 Просмотры
    Последнее сообщение Anonymous
  • Blazor воспроизводит добавление аудиопотока в ServerApp [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Объединение потоков и asyncio для обработки аудиопотока через соединение WebSocket.
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Получение аудиопотока при использовании Linphone
    Anonymous » » в форуме IOS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Требуется ли Android AcousticEchoCanceler только для входного аудиопотока?
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»