c# - c#中的视频通话

标签 c# wpf silverlight streaming directshow

我想制作一个类似于 Skype 的应用程序,主要问题是处理视频和音频。第一个问题是如何获取视频的字节数组(具体来说,我需要获取代表视频的字节,以便我可以通过互联网发送它们),音频也是如此。第二个问题是播放来自另一台计算机的字节。 我一直在考虑在 WPF 中这样做。我是 WPF 的新手(我已经练习了一点,并制作了几个程序,其中有一个基本的聊天程序)。我这样做是为了练习,我想尽可能自己编写代码,服务器,客户端,数据的传输等等...... 我一直在互联网上搜索,在我看来只有一种解决方案是好的,或者更好地说是可行的,那就是使用 DirectShow。

补充一点,我知道 Silverlight 支持摄像头和麦克风,我已经尝试过了(实际上,我已经尝试在 WPF 项目中托管一个带有 silverlight 项目的 HTML 页面,其中有 webbrowser 控件,我已成功显示来 self 的网络摄像头的视频),但我不知道如何获取代表视频的字节。

这可能与 WPF 或 silverlight 相关吗? 如果您提出任何解决方案、建议或有用的链接,我将不胜感激。

最佳答案

使用 DirectShow 过滤器图,您可以直接访问来自输入设备(例如相机和麦克风)的图像和音频缓冲区作为字节数组,逐个样本。您将能够直接操作数据,选择编码或压缩格式(使用特定过滤器),并控制数据速率和同步。

但是:

  • 如果您是这个环境的新手,那将会困难。此外,我知道它与 C++ 配合得很好,但我从未用 C# 编写过任何 Directshow 应用程序。 (您可能希望这样看:CodeProject Tutorials、MSDN DirectShow 主题和使用 graphedit 的测试)

  • 跨网络传输流媒体并使用 Directshow 接收它并非易事,而且可能会非常痛苦。网络渲染器和网络源过滤器无处不在,但在我看来总是难以使用。根据您的视频格式(H264、MPEG、MJPEG...)和网络协议(protocol)(RTSP、简单的简单 UDP...)选择,您可能最终不得不编写自己的流/源过滤器,这很困难耗时。

尽管如此,它是可行的,如果您的主要目标是练习编码,那为什么不呢!

(从未使用过 WPF,也许它实际上更简单!)

关于c# - c#中的视频通话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680500/

相关文章:

c# - 如何将多个视觉元素作为一项任务批量打印?

c# - Silverlight中用于Wave文件的Sound Visualizer

wpf - WPF/Silverlight 中的标记扩展

silverlight - 为什么 silverlight 中的双向绑定(bind)不起作用?

c# - 渲染时纹理显示为灰色

c# - 没有为 ListView 启用 ScrollViewer

c# - 使用 LINQ to EF 确定重复数据

c# - 使用多个命名空间来描述一个类

c# - View 模型中的 wpf 页面导航

c# - 将内部控件内容属性公开为自己的[用户控件]