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

ama*_*int 12 .net c# video-capture video-processing video-streaming

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

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

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

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

最近来了acrsoss FFmpeg库,它有一个C#包装器.FFmpeg可用于处理方面吗?

Hen*_*rik 13

我会这样做:

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