Захват видео очень медленно в C#
Я пытаюсь написать видео плеер, который может накладывать видео с текстом и изображением. Сейчас я использую сэмплерный фильтр для захвата видео, чтобы захватить видео и представить его в своем программном обеспечении. Он работает нормально, но очень медленно на менее мощных системах, таких как Atom. Я также пытался использовать EVR Presenter, как предлагали другие. Я использовал пример кода EVR Presenter из проекта кода ( EVR Presenter в чистом C# с Direct3D Video Rendering) в Управляемом графическом программировании DirectX 9 и игре, Kick Start для преобразования кадра в текстуру и отображения преобразованной текстуры на экране, пример кода показан ниже:
lock (m_csLock)
{
if (systemSurface == null)
systemSurface = Surface.CreateOffscreenPlain(m_Device, _surface.Description.Width, _surface.Description.Height, _surface.Description.Format, Pool.SystemMemory);
if (texture == null)
texture = new Texture(m_Device, systemSurface.Description.Width, systemSurface.Description.Height, 1, Usage.Dynamic, systemSurface.Description.Format, Pool.Default);
using (Surface texturesurface = texture.GetSurfaceLevel(0))
{
m_Device.GetRenderTargetData(_surface, systemSurface);
m_Device.UpdateSurface(systemSurface, texturesurface);
}
}
Но все равно скорость рендеринга очень низкая и отнимает много ресурсов процессора. Могу ли я узнать, есть ли способ захватить видео или скопировать видеокадр в текстуру быстрее?