视频捕获 + 上传 + 处理 + 流回 - .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 重新加入会导致音频丢失
捕获从“ NE”开始的正则表达式,后跟61到71之间的任何一位或两位数字
番外2. OpenCV 中摄像头捕获与视频处理与常见问题解决方案