Я создаю angular клиент, который позволит пользователю записывать видео / аудио со своей машины с помощью MediaRecorder, затем я хочу отправить его на свой внутренний сервер и затем сохранить его в Azure Blob (последний этап, но в настоящее время не требуется). Поскольку запись может длиться столько времени, сколько требуется пользователю, а не загружать всю запись в конце, я установил интервал времени в 10 секунд (при локальном тестировании), а затем помещаю это sh на свой внутренний сервер. У меня это работает при использовании HTTP POST, но мне было интересно, если использование веб-сокетов было бы лучше, но я не могу заставить файл работать, когда я делаю это через веб-сокеты.
Angular код
this.recorder.ondataavailable = e => {
const fr = new FileReader();
const overThis = this;
fr.onloadend = function () {
const test = new Uint8Array(<ArrayBuffer>fr.result);
overThis.myWebSocket.next(test);
};
fr.readAsArrayBuffer(e.data);
}
c# websocket
var buffer = new byte[300000];
WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
while (!result.CloseStatus.HasValue)
{
using (var fs = new FileStream("C:\\test.webm", FileMode.Append))
{
fs.Write(buffer, 0, buffer.Length);
}
}
Я установил байт [] на 300000, потому что когда я делал console.log в angular, он говорил, что длина байта варьируется между 260000-270000.
Следующие шаги, я полагаю, когда я получу эту работу, будет транскодировать из webm в другой формат, а затем сохранить его в BLOB-объекте для последующего воспроизведения.
Любая помощь / совет будут полезны!