Я хочу создать приложение для потоковой передачи видео, используя .NET Core Blazor
. Простым вариантом использования будет внедрение веб-камеры в реальном времени на веб-сайт. Пока что мое решение основано на захвате видео OpenCV (OpenCvSharp4.Windows 4.3
) и асинхронном c методе, который постоянно перерисовывает источник изображения, конвертируя его в Base64 string
. Важно, что видео поступает с сервера. Использование openCV
необязательно. Это мой компонент:
@page "/webcam"
@using OpenCvSharp
<div class="top-row">
<button type="button" class="btn btn-dark" @onclick="CaptureWebCam">Capture</button>
</div>
<img src="@_imgSrc" />
@code {
private string _imgSrc;
// Start task for video capture
protected async Task CaptureWebCam()
{
// 0 = default cam (mostly webcam)
using (var capture = new VideoCapture(0))
{
// set every image in videocapture as image source
using (var image = new Mat())
{
while (true)
{
capture.Read(image);
// encode image with chosen encoding format
string base64 = Convert.ToBase64String(image.ToBytes());
_imgSrc = $"data:image/png;base64,{base64}";
await Task.Delay(1);
StateHasChanged();
}
}
}
}
}
Моя проблема:
Использование строки base64
для каждого изображения совершенно неэффективно! Из того, что я исследовал, я должен преобразовать свое необработанное видео в контейнер mp4 (например, используя ffmpeg
), а затем передать его в элемент html <video>
, используя протокол HLS
или RTSP
: DIY: Сервер потокового видео
Вот где я застрял, потому что я не могу найти хорошую framwework / library / api для потоковой передачи mp4 на веб-сайт с использованием .net core blazor
. Есть предложения?
Я нашел что-то вроде VLC
и WebRTC
, но не уверен, что это сработает. Также я обнаружил, что может работать потоковая передача через SignalR
в сочетании с WebRTC
: можно передавать потоковое видео с помощью SignalR?