开发一款高质量视频流的视频聊天应用程序

20

我在一家公司工作,我们正在开发现有应用程序上的视频聊天支持。我已经查看了各种解决方案,例如:

  1. 使用C#中的Managed Direct Show进行视频捕获和流处理
  2. 一些代码示例,其中我们拍摄一张图片并通过网络传输(我认为这是一个比较粗糙的解决方案,因为这将占用大量带宽)。
  3. 从头开始编写压缩算法并使用它来压缩/解压缩视频。

现在的挑战是,我们希望实现非常高质量的视频流,并且容器应用程序是使用C#.NET编写的。

到目前为止,这是我提出的建议:将用于流数据的网络逻辑编写为C#,将视频压缩编写为VC++,并使用PInvoke或CLI调用此VC++ dll。

我正在寻找在这个领域比我更有经验的人,他可以建议我是否正确或者这个方案是否还能改进。

最终目标是高质量的视频流。编解码器可以是任何像h.2633、h.264等的编码格式。


https://www.twilio.com/docs/api/video - Megan Speir
Twilio的可编程视频目前还不支持C#。 - Aamir Nakhwa
4个回答

24

我使用了几种简单的方法来实现.net的视频流/视频会议,无需深入研究directshow。(好的,有一些研究,但不是很深入 :)

1) 使用纯Windows Media编码器组件。它在Windows Media编码器SDK中有文档和示例。适用于任何高分辨率的流媒体,但实时聊天的延迟太大(最佳为0.5-2秒)。现代的Express Encoder SDK是另一个选择。

2) 微软研究院的ConferenceXP http://cct.cs.washington.edu/ 。完整的会议API,包括应用程序流式传输。他们使用低级别的Windows Media编码滤镜,并将其封装到托管代码中。工作良好。易于自定义。现在看起来有点被遗弃。

3) Microsoft RTC Client直至版本1.3 - Windows Messenger的核心。

优点: 来自Microsoft的托管示例,良好的文档,可靠的性能,免费可再分发,与Microsoft兼容(好的)SIP堆栈已包含在内。主要的会议供应商如Emblaze VCON在过去曾基于此提供解决方案,不确定这些日子里是否还是如此,但我知道Tandberg授权了Microsft的VC-1。

缺点: 版本1.3支持仅h261-h263视频。支持VC-1(h264)编解码器的现代版本不允许直接的服务器之间的ip-ip连接。它要求Microsoft Live Communications服务器。较新版本的SDK对视频会议呼叫的覆盖不太好。

http://msdn.microsoft.com/en-us/library/ms775892(VS.85).aspx

请告诉我们您选择了哪个平台。顺便说一句,我甚至将ConferenceXP视频rtp部分与RTC 1.3语音/SIP功能一起使用以提高视频质量,因此您在这里有广泛的托管技术选择。还有一件事是Live Meeting,我还没有机会好好看看。


这些信息还正确吗?或者有更好的库/方法来创建视频聊天应用程序吗? - Zubaer Naseem

10

让自己省事,使用VLC。有一些不错的.NET封装器可用(http://forum.videolan.org/viewtopic.php?f=32&t=52021&start=30

我们正在使用C#和VLC建立IPTV网络。我们通过Windows XP服务器上的Osprey-450视频捕获设备从DISH网络卫星接收输入。然后,我们编写了一个使用VLC的.NET服务器组件(在.NET中启动单独的进程来控制vlc.exe实例)。VLC进程会转码并通过网络流传输信号(.h264或MPEG-4,我们已经成功完成了两者)。

在客户端,我们有一个C# WinForm应用程序,该应用程序使用嵌入式VLC Viewer查看多播信号。此应用程序主要用于命令和控制。当我们连接到电视机的机顶盒解码和显示流时,多播信号的真正用途就出现了。

我们曾认为还需要编写自己的DirectX编码器,但不必费那么大劲。VLC运行良好,并且具有足够的C#支持,非常有用。如果您对实现有具体问题,请随时给我发电子邮件。


你所获得的视频质量如何?它非常好吗? - Sumit Ghosh
是的。我们使用这个系统可以获得非常好的视频质量。实际上,当我接手这个任务时,这就是其中一个优先考虑的因素。.h264编码看起来非常不错,但它需要很高的处理器性能。我们在我们的IPTV系统中使用MPEG-4编码,效果也很好。 - Chris Holmes
1
针对您的使用情况,您是正确的。然而根据我的经验,VLC 有相当高的延迟,这使得它在视频聊天中无法使用。 - DerMike

2
你应该查看Ucentrik SDK。该SDK将使您能够在应用程序中集成丰富的媒体功能,如视频、音频、聊天、远程桌面共享和控制以及视频录制。支持的视频编解码器为VP8(Google)、Theora和x.264。此外,丰富的媒体流量被封装在HTTP协议中,以便穿越允许正常Web流量的防火墙。这项技术完全免费,您可以下载SDK并请求API密钥,以便在不投入设置基础架构的任何时间的情况下进行评估。在接下来的几个月中,我们将发布一个服务器组件,以便您可以自己或您的客户下载和托管基础架构。该技术支持1对多的连接,这意味着您可以创建视频会议。特点高度模块化,因此您可以使用相同的SDK集成仅视频、音频、桌面共享或技术组合...您应该在此处请求可用的SDK:www.ucentrik.com。此外,这里还有一些视频:http://www.youtube.com/user/ucentrik。祝你好运。

0
Ucentrik刚刚发布了一个集成了CTX技术的开源呼叫中心应用程序。该呼叫中心应用程序实现了来自CTX API可用的视频、音频、桌面/应用程序共享(带有控制)、文本聊天功能。该应用程序还包括一些业务逻辑,特别是提供将呼叫路由到可用或具有特定技能集的代理的能力。该项目可在http://vcca.codeplex.com上获得 - 请注意,您需要访问Ucentrik网站(www.ucentrik.com)上提供的Ucentrik CTX SDK。祝好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接