Handling / receiving live video webcam stream from WebRTC or any browser based capturing mechanism to the server using ASP.NET MVC

前端 未结 3 689
时光说笑
时光说笑 2021-02-01 19:01

We need to capture a live video stream from WebRTC (or any other capturing mechanism from the client webcam, even if it is not supported on all browsers, but as a PoC).

3条回答
  •  孤独总比滥情好
    2021-02-01 19:13

    Your question is too broad and asking for off-site resources is considered off-topic on stackoverflow. In order to avoid opinion-prone statements I will restrict the answer to general concepts.

    Flash/RTMP

    WebRTC is not yet available on all browser so the most widely used way of capturing webcam input from a browser currently in use is via a plugin. The most common solution uses the Adobe Flash Player, whether people like it or not. This is due to the H.264 encoding support in recent versions, along with AAC, MP3 etc. for audio.

    The streaming is accomplished using the RTMP protocol which was initially designed for Flash communication. The protocol works on TCP and has multiple flavors like RTMPS (RTMP over TLS/SSL for encryption), RTMPT(RTMP encapsulated in HTTP for firewall traversal).

    The stream usually uses the FLV container format.

    You can easily find open-source projects that use Flash to capture webcam input and stream it to an RTMP server.

    On the server-side you have two options:

    • implement a basic RTMP server to talk directly to the sending library and read the stream
    • use one of the open-source RTMP servers and implement just a client in ASP (you can also transcode the incoming stream on the fly depending on what you're trying to do with your app).

    WebRTC

    With WebRTC you can either:

    • record small media chunks on a timer and upload them on the server where the stream is reconstructed (needs concatenating and re-stamping the chunks to avoid discontinuities). See this answer for links.
    • use the peer-to-peer communication features of WebRTC with the server being one of the peers.

    A possible solution for the second scenario, which I haven't personally tested yet, is offered by Adam Roach:

    1. Browser retrieves a webpage with javascript in it.
    2. Browser executes javascript, which:
      1. Gets a handle to the camera using getUserMedia,
      2. Creates an RTCPeerConnection
      3. Calls createOffer and setLocalDescription on the RTCPeerConnection
      4. Sends an request to the server containing the offer (in SDP format)
    3. The server processes the offer SDP and generates its own answer SDP, which it returns to the browser in its response.
    4. The JavaScript calls setRemoteDescription on the RTCPeerConnection to start the media flowing.
    5. The server starts receiving DTLS/SRTP packets from the browser, which it then does whatever it wants to, up to and including storing in an easily readable format on a local hard drive.

    Source

    This will use VP8 and Vorbis inside WebM over SRTP (UDP, can also use TCP).

    Unless you can implement RTCPeerConnection directly in ASP with a wrapper you'll need a way to forward the stream to your server app.

    The PeerConnection API is a powerful feature of WebRTC. It is currently used by the WebRTC version of Google Hangouts. You can read: How does Hangouts use WebRTC.

提交回复
热议问题