视频捕获 + 上传 + 处理 + 流回 - .NET & C#

Posted

技术标签:

【中文标题】视频捕获 + 上传 + 处理 + 流回 - .NET & C#【英文标题】:Video Capturing + Uploading + Processing + Streaming back - .NET & C# 【发布时间】:2011-03-22 13:08:52 【问题描述】:

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

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

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

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

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

【问题讨论】:

【参考方案1】:

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

它应该有你需要的一切:

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

解码/导入格式支持,因为 DirectShow的

流畅的流式传输(720p+ 视频使用 HTTP) 与优化客户端 (Silverlight) 和服务器 (IIS 与 流畅的流媒体)

WebDAV发布、发布插件 用于 Silverlight 流媒体、Amazon S3

导入在 表情设计和定制 它们的时间、动画、不透明度、 放置和循环

javascript 触发事件

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

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

预览和比较编码 实时设置

截屏

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

我会这样做:

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

【讨论】:

更新:流编码 => 消息中的 URI,带有您接收视频数据的 ZeroMQ 套接字。【参考方案4】:

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

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

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

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

【讨论】:

【参考方案5】:

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

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

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

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

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于视频捕获 + 上传 + 处理 + 流回 - .NET & C#的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 上捕获/分割视频并通过 HLS 重新加入会导致音频丢失

强制用户使用 HTML5 视频输入捕获以低分辨率捕获视频

捕获从“ NE”开始的正则表达式,后跟61到71之间的任何一位或两位数字

番外2. OpenCV 中摄像头捕获与视频处理与常见问题解决方案

番外2. OpenCV 中摄像头捕获与视频处理与常见问题解决方案

捕获和处理videojs的'bigplaybutton'的'click'事件不起作用