Я пытаюсь создать приложение для трансляции аудио, используя 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 из-за большого количества отказов.