如何为 Metro 应用程序 C# 执行实时摄像头流

How to carry out live camera stream for metro apps c#

我已经花了一个多月的时间寻找如何将实时摄像头流从地铁应用程序传输到我以网络套接字 ashx 处理程序的形式实现的发布服务器的解决方案。显然,我在网上找到的所有资源都表明我无法使用 C# 访问实时摄像机帧,据说这只能通过本机 C++ 实现。

我写了一个 hack 来覆盖 Windows.Storage.Streams 命名空间中的 WriteAsync 方法 IRandmomAccessStream class。我相信每次将新的字节序列从记录摄像机写入流缓冲区时都会调用此方法。我覆盖了这种写入方法,将这些字节序列发送到手动创建的网络套接字服务器,该服务器工作正常,但视频在接收端总是损坏。

我认为这是由于流在 h.264 中缺少 metadata/fragmented 帧造成的。我想问一下是否有人知道可以实时转码相机源以在纯 c# 中进行实时流式传输的库。

您可以使用 MediaCapture API https://msdn.microsoft.com/en-us/library/windows/apps/mt280228.aspx

var properties = _mediaCapture.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview) as VideoEncodingProperties;
var frame = new VideoFrame(BitmapPixelFormat.Bgra8, (int)properties.Width, (int)properties.Height);
var previewFrame = await _mediaCapture.GetPreviewFrameAsync(frame);
var previewBitmap = frame.SoftwareBitmap;
frame.Dispose();
frame = null;