13

我们正在尝试找出 .NET 堆栈中可用的任何技术/库(甚至是 3rd 方 dll 之上的包装器),这将帮助我们构建一个可以

  • 1 - 从用户的视频设备捕获图像
  • 2 - 实时上传到服务器
  • 3 - 处理视频(在服务器中) - 例如:为视频添加水印
  • 4 - 将其流回给用户/其他用户

优选地,步骤 2 和 4 之间的时间延迟/延迟应该是最小的

第一个要求(捕获)似乎很简单。挑战在于确定一种合适的方式来进行上传、处理和流式传输。任何有效的建议或想法?

最近出现了一个 FFmpeg 库,它有一个 C# 包装器。FFmpeg可以用来做处理端吗?

4

6 回答 6

13

我会这样做:

  1. 使用silverlight 或闪光灯来捕捉摄像机输入,例如此处详述
  2. 您可以通过服务器正在侦听的套接字发送字节流。
  3. 在接收端,只需将套接字接受程序用作连接了许多侦听工作人员的路由器程序。在工作人员和路由器程序之间,例如 AMQP 和RabbitMQ将带有例如流编码的异步消息(例如具有反应式扩展)发送到rabbit-node,然后它可以将所有消息作为会话/用户会话的一部分进一步发送到一台计算机,或者在可用工作人员之间交错。这是手册。当视频被编码时,它通过消息总线异步流回。根据英特尔的测试,总线本身应该在高吞吐量下运行良好,但他们必须使用交错的 tcp 通道模式(他们在千兆位局域网上进行了测试)。这里的其他用户建议使用 FFlib. 您可能还考虑让工作人员转换为webM,但如果 FFlib 有效,那可能会容易得多。每个工作人员通过 AMQP 发布下一个编码的视频片段。一个服务器运行程序,例如我之前谈到的路由器程序,开始向客户端发送数据(见第 4 点)
  4. 有一个客户端程序,例如silverlight/flash 连接(例如通过您为客户端-> 服务器数据打开的同一个套接字,或通过HTTP),并使用解码器读取字节流。渲染输出。
于 2010-08-05T15:53:07.993 回答
3

来自 Mitov 的 VideoLab 可以完成所有这些,并且免费供个人使用(商业用途不是那么免费,但定价也不算太高)。

我已经购买并使用了 Delphi 版本,并且知道它运行良好,所以我很确定 .NET 版本可以满足您的需求。

这种任务不是微不足道的(从这里缺乏响应可以看出),所以预计 DirectX/Microsoft Media Encoder 会遇到很大的困难——但是有了这个工具包和作者的一些帮助,你最终成功。

http://www.mitov.com/html/videolab.html

于 2010-07-31T11:40:14.303 回答
2

Splicer 似乎可以处理静态视频并将其转换 - 我不确定是否处理实时上传的视频 - http://splicer.codeplex.com/

于 2010-07-30T05:20:59.560 回答
2

看看VertigoVideo.Show。这是一个用于用户生成视频内容的开源网站。它使用表达式编码器来处理压缩/视频编辑。这不完全是您所需要的,但它是一个好的开始!

于 2010-08-05T15:57:02.387 回答
2

如上所述,您可以使用 Silverlight 进行捕获,然后使用Expression Encoder将其推送到流服务器或直接从那里流式传输。

它应该有你需要的一切:

WMV 的智能编码/智能重新压缩,如果源也是 WMV 并且不执行帧操作 [4],剪辑编辑,串行批量编码,来自网络摄像头和 DV 摄像机的实时编码

DirectShow 支持解码/导入格式

使用优化的客户端 (Silverlight) 和服务器(具有流畅流的 IIS)实现流畅的流式传输(使用 HTTP 的 720p+ 视频)

WebDAV 发布、Silverlight Streaming、Amazon S3 的发布插件

导入在 Expression Design 中创建的 XAML 覆盖并自定义它们的时间、动画、不透明度、放置和循环

JavaScript 触发事件

Windows Media 11 SDK 和 VC-1 SDK 集成,原生 MPEG-2 解码器

使用 SAMI 或 W3C 定时文本格式为视频添加字幕

实时预览和比较编码设置

屏幕截图

编码引擎的对象模型,SDK 可单独下载

于 2010-08-07T10:52:22.730 回答
1

这个问题有点缺乏细节(这是一个网络服务器,服务器是什么操作系统?等等),但我会根据我认为你正在尝试做的事情进行尝试。

您可能会考虑的一件事是同时进行捕获和处理。如果用户正在运行您的客户端应用程序,请让它通过 DirectShow 进行捕获和处理。然后你需要做的就是上传视频,你可以跳过整个服务器过程。这是假设“用户”在您的控制之下——这不是某个随机上传视频的人,而是员工或其他受信任的人。

如果不是这种情况,那么 ffmpeg 肯定可以用于在您的服务器上为视频添加水印。你真的不需要'包装器'。您可以从服务器应用程序将其作为命令行应用程序调用,然后等待它完成。

这个过程真的没有那么复杂......它的细节很重要(例如 - 'stream'对你意味着什么?你真的是指'stream',还是通过http?这是一个巨大的话题)

于 2010-08-04T21:40:12.677 回答