Потоковое видео с использованием MJPEG в приложении .netcore 2.0 с PushStreamResult - проблемы с задержкой - PullRequest
0 голосов
/ 31 января 2019

Я создаю видеопоток MJPEG в основном приложении dotnet.Который я чем могу просмотреть из хрома.Я получил следующую настройку:

Я получаю растровые изображения как необработанные данные с IntPtr, который я затем оборачиваю в объект Bitmap, используя следующий код:

private void UpdateBitmap(IntPtr memoryPointer, int height, int width, int v)
{
    if (this.currentImage == null)
        this.currentImage = new Bitmap(width, height, width * v, PixelFormat.Format24bppRgb, memoryPointer);

    var data = this.currentImage.LockBits(new Rectangle(0, 0, this.currentImage.Width, this.currentImage.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);
    CopyMemory(data.Scan0, memoryPointer, (uint) (data.Height * data.Stride));
    this.currentImage.UnlockBits(data);

}

[DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory")]
public static extern void CopyMemory(IntPtr destination, IntPtr source, uint length);

После созданияраспакованный растрв Chrome я могу просматривать живое изображение, как и ожидалось.Но у меня задержка составляет около 300 мс (сервер и клиент находятся на одной машине).

Я измеряю время, необходимое для обработки изображения, из события низкого уровня, которое передает мне точку памяти на Flush вызов моего PushStreamResult, это занимает около 12 мс.

Если я вставлю изображение в элемент управления WinForms, такой задержки не будет, что означает, что сама камера не вызывает задержку.

Как можно уменьшить задержку живого изображениядо 50 мс?Подход, использующий PushStreamResult, способен решить эту проблему?

...