我正在使用Microsoft.MixedReality.WebRTC库,我计划将它用于我的下一个项目-一个实时视频聊天应用程序。我已经建立了一个连接和传递视频帧。
如何正确渲染这些帧并将其显示为视频?
使用WPF的MediaElement看起来很容易,但是我只能输入一个Uri对象作为源,我不能为它提供单个帧AFAIK。
我读过,绘制位图是一个可能的解决方案,但我相信这将意味着许多小时重新发明车轮和测试,我不喜欢做,除非没有其他办法。
库的工作方式如下:每次客户端接收新帧时,都会引发Argb32VideoFrameReady事件。然后将一个Argb32VideoFrame结构对象传递给回调,回调包含一个IntPtr到原始数据。还提供了Height、Width和Stride。
我有什么办法能做到这一点?
我正计划使用WPF。该解决方案应针对WindowsFramework4.6.2和7+。
预先谢谢.
发布于 2020-07-30 11:50:09
使用XAML中的图像元素
<Image x:Name="image"/>下面的简单方法将直接将框架复制到分配给图像的Source属性的WriteableBitmap中。
private void UpdateImage(Argb32VideoFrame frame)
{
var bitmap = image.Source as WriteableBitmap;
var width = (int)frame.width;
var height = (int)frame.height;
if (bitmap == null ||
bitmap.PixelWidth != width ||
bitmap.PixelHeight != height)
{
bitmap = new WriteableBitmap(
width, height, 96, 96, PixelFormats.Bgra32, null);
image.Source = bitmap;
}
bitmap.WritePixels(
new Int32Rect(0, 0, width, height),
frame.data, height * frame.stride, frame.stride);
}来自这里的ARGBVideoFrame:https://github.com/microsoft/MixedReality-WebRTC/blob/master/libs/Microsoft.MixedReality.WebRTC/VideoFrame.cs
由于对结构的评论,PixelFormats.Bgra32似乎是合适的格式:
ARGB组件的顺序是一个小的endian 32位整数,所以0xAARRGGBB,或(B,G,R,A)作为内存中的字节序列,B首先和A最后一个。
https://stackoverflow.com/questions/63171628
复制相似问题