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

2024-03-17

我们需要从 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 上被认为是偏离主题的。为了避免容易发表意见的陈述,我将把答案限制在一般概念上。

闪存/RTMP

WebRTC尚未在所有浏览器上可用,因此从当前使用的浏览器捕获网络摄像头输入的最广泛使用的方法是通过插件。最常见的解决方案使用Adobe Flash 播放器 http://www.adobe.com/devnet/adobe-media-server/articles/encoding-live-video-h264.html,无论人们喜欢与否。这是由于H.264最新版本中的编码支持,以及AAC, MP3等音频。

流式传输是使用以下方式完成的RTMP https://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol协议最初是为Flash通信而设计的。该协议适用于TCP并且有多种口味,例如RTMPS (RTMP over TLS/SSL用于加密),RTMPT(RTMP封装在HTTP用于防火墙穿越)。

流通常使用FLV https://en.wikipedia.org/wiki/Comparison_of_video_container_formats容器格式。

您可以轻松找到使用 Flash 捕获网络摄像头输入并将其流式传输到RTMP server.

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

  • 实施基本的RTMP服务器直接与发送库对话并读取流
  • 使用开源之一RTMP服务器并仅实现一个客户端ASP(您还可以根据您尝试对应用程序执行的操作即时对传入流进行转码)。

WebRTC

With WebRTC您可以:

  • 在计时器上记录小媒体块并将它们上传到重建流的服务器上(需要连接并重新标记块以避免不连续)。请参阅此答案的链接 https://stackoverflow.com/questions/25523289/sending-a-mediastream-to-host-server-with-webrtc-after-it-is-captured-by-getuser.
  • 使用点对点通信功能WebRTC服务器是对等方之一。

Adam Roach 提供了第二种情况的可能解决方案,我还没有亲自测试过:

  1. 浏览器检索其中包含 JavaScript 的网页。
  2. Browser executes javascript, which:
    1. 使用获取相机句柄getUserMedia,
    2. 创建一个RTCPeerConnection
    3. Calls createOffer and setLocalDescriptionRTCPeerConnection
    4. 向包含报价的服务器发送请求(在SDP格式)
  3. 服务器处理报价SDP并生成自己的答案SDP, 它在响应中返回给浏览器。
  4. JavaScript 调用setRemoteDescription on the RTCPeerConnection开始媒体流动。
  5. 服务器开始接收DTLS/SRTP来自浏览器的数据包, 然后它会做任何它想做的事情,包括存储 以本地硬盘上易于读取的格式。

Source https://groups.google.com/forum/#!topic/mozilla.dev.media/pos7woJMimo

这将使用VP8 and Vorbis inside WebM over SRTP (UDP,也可以使用TCP).

除非你能实现RTCPeerConnection直接在ASP使用包装器,您需要一种将流转发到服务器应用程序的方法。

The PeerConnection API是一个强大的功能WebRTC。它目前由 Google Hangouts 的 WebRTC 版本使用。你可以阅读:环聊如何使用 WebRTC https://webrtchacks.com/hangout-analysis-philipp-hancke/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐