#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, который соответствует размеру кадра. Таким образом, вы можете рассчитать продолжительность на основе размера файла и размера кадра.