首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从ARGB帧渲染视频

如何从ARGB帧渲染视频
EN

Stack Overflow用户
提问于 2020-07-30 10:54:20
回答 1查看 573关注 0票数 0

我正在使用Microsoft.MixedReality.WebRTC库,我计划将它用于我的下一个项目-一个实时视频聊天应用程序。我已经建立了一个连接和传递视频帧。

如何正确渲染这些帧并将其显示为视频?

使用WPF的MediaElement看起来很容易,但是我只能输入一个Uri对象作为源,我不能为它提供单个帧AFAIK。

我读过,绘制位图是一个可能的解决方案,但我相信这将意味着许多小时重新发明车轮和测试,我不喜欢做,除非没有其他办法。

库的工作方式如下:每次客户端接收新帧时,都会引发Argb32VideoFrameReady事件。然后将一个Argb32VideoFrame结构对象传递给回调,回调包含一个IntPtr到原始数据。还提供了HeightWidthStride

关于这里的特定结构的更多信息

我有什么办法能做到这一点?

我正计划使用WPF。该解决方案应针对WindowsFramework4.6.2和7+。

预先谢谢.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-30 11:50:09

使用XAML中的图像元素

代码语言:javascript
复制
<Image x:Name="image"/>

下面的简单方法将直接将框架复制到分配给图像的Source属性的WriteableBitmap中。

代码语言:javascript
复制
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最后一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63171628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档