2

我想把 Skype 的视频插入到我自己的应用程序中。我正在使用 skype4com 来控制呼叫,但我找不到任何参考或示例来建议一个工具来获取其视频流以将其嵌入到您的应用程序中。我尝试加入 SkypeKit 计划,但一个月后我仍在等待他们的任何消息,而且我听说您经常只是等待等待他们的消息。

我想知道是否还有其他事情可以做,就像找到 Skype 正在显示的视频的 hwnd 并将其用于面板/表单/等一样简单。我在我的应用程序中拥有的,然后隐藏 Skype 窗口的其余部分。我尝试在谷歌上搜索一般主题,但也许我不知道该概念的正确描述使我无法找到任何东西。

粗略地说,我知道我可以做一些事情,比如使用窗口句柄来获取框架的位图并在我自己的应用程序中显示它,隐藏 Skype,但这可能会产生很多开销。

任何人都知道如何做到这一点或这代表什么概念,所以我可以自己找到它?

谢谢!

4

1 回答 1

2

这不是问题的最终或完整答案,但它包含对我提出的问题的部分答案......

我最终尝试了各种事情并取得了不同程度的成功。

解决此类问题时的第一个问题显然是确定您尝试重新使用的视频是否通过 DirectX 呈现。

如果视频不是 DirectX 渲染的,那么您确实可以从窗口捕获视频并在任何您喜欢的地方实时播放。网络上有各种示例,您应该如何从窗口中捕获位图。诀窍是窗口可以通过不透明度不可见但不能最小化(最小化它不会更新)!您只需将 hwnd 用于包含视频的 Window 并在循环中通过各种方法获取这些位图的副本,然后在其他地方根据需要显示它们。根据您计算机的速度和视频的大小,此方法可以正常工作,我没有任何问题。

如果您尝试劫持的视频是通过 DirectX 呈现的,那么您大部分但并非完全不走运。因为 DirectX 视频是由显卡(而不是操作系统)直接渲染到操作系统表面上的,所以您必须使用完全不同的方法将视频作为帧抓取并在其他地方显示。有很多关于如何进行 DirectX 屏幕捕获的示例。但是,最大的问题是,如果 DirectX 窗口被隐藏、重叠或不透明度设置为零,您将无法捕获任何内容!我什至尝试使用虚拟桌面管理器软件来查看是否可以欺骗系统在虚拟窗口中播放 DirectX 视频,然后捕获它以在我想要的地方播放,但当然它比我更聪明,我得到了一个空白图片。所以,底线似乎是,除非您做一些非常极端的事情,例如编写虚拟显卡驱动程序,否则您将不走运。(有多种有趣的方法涉及编写 DirectX 代理,这些代理可以在传输到显卡的途中捕获视频/静止图像,但我仍然认为您可能需要一个虚拟图形驱动程序来说服它显示表面是可见的,因此值得渲染。)

于 2013-01-11T03:18:54.537 回答