аудио трансляция в asp. net core 2.2 - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь создать приложение для трансляции аудио, используя webrt c и websocket. Я нашел эту WSAudioAPI библиотеку для трансляции аудио в websocket. Я настроил веб-сокет для чтения двоичных данных и отправки его в подключенный сокет. Моя реализация веб-сокета здесь.

 public async Task Invoke(HttpContext context, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler)
    {
         if (context.WebSockets.IsWebSocketRequest)
            {
            string username = Guid.NewGuid().ToString(); //context.Request.Query["u"];
                if (!string.IsNullOrEmpty(username))
                {
                    WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();
                    CustomWebSocket userWebSocket = new CustomWebSocket()
                    {
                        WebSocket = webSocket,
                        Username = username
                    };
                    wsFactory.Add(userWebSocket);
                    //await wsmHandler.SendInitialMessages(userWebSocket);
                    await Listen(context, userWebSocket, wsFactory, wsmHandler);
                }
            }
            else
            {
                context.Response.StatusCode = 400;
            }

        await _next(context);
    }

    private async Task Listen(HttpContext context, CustomWebSocket userWebSocket, ICustomWebSocketFactory wsFactory, ICustomWebSocketMessageHandler wsmHandler)
    {
        WebSocket webSocket = userWebSocket.WebSocket;
        var buffer = new byte[1024 * 4];
        WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
        while (!result.CloseStatus.HasValue)
        {
            //await wsmHandler.HandleMessage(result, buffer, userWebSocket, wsFactory);
            await wsmHandler.BroadcastOthers(buffer, userWebSocket, wsFactory);
            buffer = new byte[1024 * 4];
            result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
        }
        wsFactory.Remove(userWebSocket.Username);
        await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
    }


public async Task BroadcastOthers(byte[] buffer, CustomWebSocket userWebSocket, ICustomWebSocketFactory wsFactory)
    {
        var others = wsFactory.Others(userWebSocket);
        foreach (var uws in others)
        {
            await uws.WebSocket.SendAsync(buffer, WebSocketMessageType.Binary, true, CancellationToken.None);
            //await uws.WebSocket.SendAsync(new ArraySegment<byte>(buffer, 0, buffer.Length), WebSocketMessageType.Binary, true, CancellationToken.None);
        }
    }

и моя реализация на стороне клиента

    <script>

        var streamer;
        var player ;
        $(function () {

            streamer = new WSAudioAPI.Streamer({
                server: {
                    host: 'localhost', //websockets server addres.  - localhost
                    port: '44330' //websockets server port
                }
            });

            player = new WSAudioAPI.Player({
                server: {
                    host: 'localhost', //websockets server addres. - localhost
                    port: '44330' //websockets server port
                }
            });

        });
    </script>
   <button onclick="streamer.start()">Start stream</button>
        <button onclick="streamer.stop()">Stop stream</button>


        <button onclick="player.start()">Play stream</button>
        <button onclick="player.stop()">Stop playing</button>

на стороне игрока возникает ошибка

см. Снимок экрана

Пожалуйста, помогите мне разрешить это.

или

любое другое предложение по внедрению аудиовещания в веб-приложении asp. net core 2.2.

Что я пытаюсь сделать is 1. текстовый чат для группы и отдельного лица - выполняется через ядро ​​signalR 2. голосовые заметки для группы и отдельного лица - выполняется через ядро ​​signalR и веб-интерфейс 3. отправляет вложение группе и индивидууму - выполняется через ядро ​​signalR и web apis 4. аудио трансляция в группу - застрял здесь

Я не могу использовать одноранговое соединение webrt c из-за большого количества отказов.

...