如何为 UAP(windows 10)截取媒体元素的当前帧

Posted

技术标签:

【中文标题】如何为 UAP(windows 10)截取媒体元素的当前帧【英文标题】:How to snapshot the current frame of a mediaelement for UAP(windows 10) 【发布时间】:2016-01-31 22:55:09 【问题描述】:

基本思想是这样的。 我正在暂停的视频上写一段文字,我想拍下它的快照 但 RenderTargetBitmap api 不适用于视频内容,只能渲染黑色背景的文本。并且 Screencapture api 仅适用于移动设备系列,并且仅呈现视频而不是文本。

还有其他方法可以使用纯 c# 来做到这一点吗? 这很简单。在暂停的媒体元素上绘制文本并将其截屏并保存到文件中,为什么这么难做到这一点?

【问题讨论】:

在最近的许多 Microsoft 客户端平台技术中,这并不是一件容易的事(这取决于视频的呈现方式)。但是,这里有一个为 Win 8.1 设计的示例,可以帮助您入门:code.msdn.microsoft.com/windowsapps/… AFAIK 这是不可能的,原因有两个:1)MediaElement 的实际渲染视频不是视觉树的一部分,2)DRM 【参考方案1】:

只要您有一个连接到媒体扩展视频管道的组件,就可以参与与 MediaElement 相关的任何方式的数据操作。

以下链接中给出了示例:

https://github.com/mmaitre314/MediaReader https://code.msdn.microsoft.com/windowsapps/media-extensions-sample-7b466096

第一个链接提供了一个功能齐全的解决方案。

【讨论】:

【参考方案2】:

您好,我回答了一个类似的问题here,这是我在编写 UWP 应用程序时遇到的类似问题。就我而言,我需要一个 UI 快照,其中可能不止一个 MediaElement 动态加载了一堆其他元素(图像、文本、...)。 我想出的解决方案不是那么线性,但仍然有效。当我需要快照时:

我提取视频帧并在需要时保存在磁盘上(您可以在我写的其他答案中找到方法); 我创建了一个新的动态图像,并将保存的框架 e 放在 UI 中的 MediaElement 顶部; 您可以在此处使用文本创建另一个“图层”

此时,您可以使用 RenderTargetBitmap 拍摄快照并将图像放置在 UI 上。不要忘记像我第一次那样从磁盘中删除文件......

【讨论】:

以上是关于如何为 UAP(windows 10)截取媒体元素的当前帧的主要内容,如果未能解决你的问题,请参考以下文章

添加 Signalr 版本 2.2.0 nuget 包会在 UAP 项目中引发错误“序列包含多个元素”

Windows 10 UAP 更改颜色主题

Vs Blend + Windows 8:如何为应用程序中的元素设置系统通知主题的样式?

如何用wireshark截取流媒体视频

如何为 Windows 10 安装 luarocks

如何为直播创建本地媒体服务器?