介绍
WPFMediaKit:获取电脑内视频设备画面的Nuget程序包
安装
右键引用->管理Nuget程序包->搜索MediaKit->安装第一个(这里使用2.2.0)
使用
获取电脑的视频设备
var videoDevices = MultimediaUtil.VideoInputNames;// 获取所有视频设备
string videoName = videoDevices[0] ;// 选择第一个
设置视频播放控件
VideoCaptureElement video = new VideoCaptureElement()
{
LoadedBehavior = WPFMediaKit.DirectShow.MediaPlayers.MediaState.Close,
FPS = 30
};
video.VideoCaptureSource = videoName;// 设置视频设备源
video.Play();// 播放视频画面
video.Stop();// 暂停视频画面
video.Close();// 关闭视频画面
截取视频画面
RenderTargetBitmap bmp = new RenderTargetBitmap((int)video.ActualWidth, (int)video.ActualHeight, 96, 96, PixelFormats.Default);
video.Measure(video.RenderSize);
video.Arrange(new Rect(video.RenderSize));
bmp.Render(video);
注意
- 控件打开视频设备比较慢。
- 如在其父级面板Loaded事件中设置视频设备并播放时,摄像头会打开失败,这之后再调用播放也无效。
解决:
更改初始启动摄像头的事件
或者// 视频控件的加载事件 private void video_Loaded(object sender, RoutedEventArgs e) { video.VideoCaptureSource = videoName; video.Play();// 播放视频画面 }
打开视频设备已失败后再次设置:// 重设当前视频设备源 video.VideoCaptureSource = null; video.VideoCaptureSource = videoName; // 播放视频画面 video.Play();
- 若视频控件被父级面板裁切( ClipToBounds=“True”),对其截取会保留的是被裁切后的图像(若控件实际大小比裁切后大多余面积以透明区域填充在图像右下侧)