Видеопоток с веб-камеры и отправка через websocket и сохранение в mp4

#c# #asp.net-core #websocket

Вопрос:

 private static async Task EchoRecording(HttpContext context, WebSocket webSocket)
    {
        //string path = @"E:Recording.mp4";
        var path = Path.Combine("wwwroot", "SaveRecord", "Recording.mp4");
        var buffer = new byte[1024 * 8];
        WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);

        while (!result.CloseStatus.HasValue)
        {
            using (var stream = new FileStream(path, FileMode.Append))
                try
                {
                    await stream.WriteAsync(buffer, 0, result.Count);
                }
                catch (Exception ex)
                {

                }

            result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);

        }
        await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
    }
 

Поток успешно сохраняется, но продолжительность и длительность видео при просмотре не сохраняются.
Должен ли я использовать что-либо вместо filestream?

Комментарии:

1. Почему у вас два веб-узла? ReceiveAsync()? Обычно у вас есть запрос (отправка данных) и ответ (получение данных). Таким образом, веб-сокет, клиент отправляет запрос, а сервер возвращает ответ. Таким образом, перед другим запросом и ответом должны быть запрос и ответ. Похоже, у вас есть два ответа без промежуточного запроса.

2. ОК. но проблема в том, что при записи потока с помощью filestream длина видео не сохраняется. видео сохраняется без атрибутов длины, продолжительности

3. Продолжительность указана в метаданных файла, которые вы видите при наведении курсора мыши на файл. См. Страницу 14 из следующего : adobe.com/content/dam/acom/en/devnet/flv/. … Вам нужно будет добавить метаданные в файл. Видео имеет заголовок ASCII, который соответствует размеру кадра. Таким образом, вы можете рассчитать продолжительность на основе размера файла и размера кадра.