C# 使用ASP.NET MVC处理/接收来自WebRTC或任何基于浏览器的捕获机制到服务器的实时视频网络摄像头流

C# 使用ASP.NET MVC处理/接收来自WebRTC或任何基于浏览器的捕获机制到服务器的实时视频网络摄像头流,c#,asp.net,asp.net-mvc,asp.net-web-api,webrtc,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,Webrtc,我们需要从WebRTC捕获实时视频流(或者从客户端网络摄像头捕获任何其他捕获机制,即使不是所有浏览器都支持,而是作为PoC) 此实时视频需要由服务器组件(ASP.Net MVC/Web API)处理,我认为服务器上的代码如下所示: [HttpPost] public ActionResult HandleVideoStream(Stream videoStream) { //Handle the live stream } 寻找任何关键字或有用的链接 我们已经实现了一种使用base

我们需要从WebRTC捕获实时视频流(或者从客户端网络摄像头捕获任何其他捕获机制,即使不是所有浏览器都支持,而是作为PoC)

此实时视频需要由服务器组件(ASP.Net MVC/Web API)处理,我认为服务器上的代码如下所示:

[HttpPost]
public ActionResult HandleVideoStream(Stream videoStream)
{
      //Handle the live stream
}
寻找任何关键字或有用的链接


我们已经实现了一种使用base64 jpg发送单个帧的方法,但这根本没有用处,因为base64编码有巨大的开销,而且我们可以使用任何视频编码来更有效地发送视频(例如,使用VPx-vp8发送帧之间的差异),所需的解决方案需要从客户端的网络摄像头捕获视频,并将其作为流(或表示新视频数据的数据块)实时(未录制)发送到服务器(asp.net)。

您的问题太广泛,要求非现场资源在stackoverflow上被视为离题。为了避免意见倾向性陈述,我将把答案限制在一般概念上

Flash/RTMP

WebRTC
尚未在所有浏览器上提供,因此从当前使用的浏览器捕获网络摄像头输入的最常用方法是通过插件。不管人们喜欢与否,最常见的解决方案都使用。这是由于最新版本中的
H.264
编码支持,以及音频的
AAC
MP3

流式传输使用最初为Flash通信设计的协议完成。该协议在
TCP
上工作,并具有多种风格,如
RTMPS
RTMP
over
TLS/SSL
用于加密),
RTMPT
RTMP
封装在
HTTP
中用于防火墙穿越)

流通常使用容器格式

您可以轻松找到使用Flash捕获网络摄像头输入并将其流式传输到
RTMP
服务器的开源项目

在服务器端,您有两个选项:

  • 实现一个基本的
    RTMP
    服务器,直接与发送库对话并读取流
  • 使用一个开源的
    RTMP
    服务器,在
    ASP
    中只实现一个客户端(您还可以根据您的应用程序尝试执行的操作动态地对传入流进行转码)
WebRTC

使用
WebRTC
您可以:

  • 在计时器上记录小型媒体块,并将其上载到重建流的服务器上(需要连接并重新标记这些块以避免中断)
  • 使用
    WebRTC
    的点对点通信功能,服务器是对等方之一
Adam Roach为第二个场景提供了一个可能的解决方案,我还没有亲自测试过:

  • 浏览器检索包含javascript的网页
  • 浏览器执行javascript,其中:
  • 使用
    getUserMedia
    获取相机的句柄
  • 创建
    rtpeerconnection
  • 在上调用
    createOffer
    setLocalDescription
    rtpeerconnection
  • 向包含报价的服务器发送请求(采用
    SDP
    格式)
  • 服务器处理报价
    SDP
    ,并生成自己的答案
    SDP
    , 它将在响应中返回到浏览器
  • JavaScript在
    rtpeerconnection
    启动媒体流
  • 服务器开始从浏览器接收
    DTLS/SRTP
    数据包, 然后它可以做任何它想做的事情,包括存储 以本地硬盘上易于读取的格式
  • 这将使用
    VP8
    Vorbis
    WebM
    内部
    SRTP
    UDP
    ,也可以使用
    TCP

    除非您可以使用包装器直接在
    ASP
    中实现
    rtpeerconnection
    ,否则您需要一种将流转发到服务器应用程序的方法


    peerconnectionapi
    WebRTC
    的一个强大功能。它目前由谷歌Hangouts的WebRTC版本使用。您可以阅读:。

    现在大多数IP摄像头将使用H264编码或MJPEG。你不清楚使用的是哪种相机

    我认为真正的问题是,创作/编辑视频需要什么组件,需要什么视频格式。只有当您知道需要使用什么格式时,您才能根据需要对视频进行转码/转换,以便在服务器端进行处理

    有任意数量的媒体服务器需要进行转换/转码,服务器端有类似或可以进行转换、解码等操作,以将其转换为您可以使用的格式。我见过的大多数IP摄像机都使用基于H264网络的浏览器播放器


    编辑:你最大的敌人将是你的拖延。1-2秒的延迟将很难实现。

    同意这是一个离题的问题,但我最近遇到了相同的问题/要求,我的解决方案是使用WebRTC实验。这基本上是每X秒为您提供一个音频/视频流的“blob”,您可以将其上传到ASP.NET MVC或WebAPI控制器,如图所示。您可以在服务器上逐部分实时处理blob,也可以将它们连接到一个文件,然后在流停止后进行处理。请注意,并非所有浏览器都完全支持此库中使用的API,例如,到目前为止还不支持iOS

    我的服务器端分析要求用户说出完整的句子,所以除此之外,我还使用了