簡體   English   中英

使用ASP.NET MVC處理/接收來自WebRTC的實時視頻網絡攝像頭流或任何基於瀏覽器的捕獲機制到服務器

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

我們需要從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 Player ,無論是否喜歡它。 這是由於最近版本中的H.264編碼支持,以及音頻的AACMP3等。

流式傳輸使用RTMP協議完成,該協議最初設計用於Flash通信。 該協議適用於TCP ,具有多種風格,如RTMPSRTMP over TLS/SSL for encryption), RTMPTRTMP封裝在HTTP用於防火牆遍歷)。

流通常使用FLV容器格式。

您可以輕松找到使用Flash捕獲網絡攝像頭輸入並將其流式傳輸到RTMP服務器的開源項目。

在服務器端,您有兩個選擇:

  • 實現一個基本的RTMP服務器直接與發送庫通信並讀取流
  • 使用其中一個開源RTMP服務器並在ASP實現一個客戶端(您也可以根據您嘗試對應用程序執行的操作來動態轉碼傳入流)。

的WebRTC

使用WebRTC您可以:

  • 在計時器上記錄小媒體塊並將其上傳到重建流的服務器上(需要連接並重新標記塊以避免不連續)。 請參閱此答案以獲取鏈接
  • 使用WebRTC的對等通信功能,服務器是其中一個對等體。

Adam Roach提供了第二種情況的可能解決方案,我還沒有親自測試過。

  1. 瀏覽器檢索其中包含javascript的網頁。
  2. 瀏覽器執行javascript,其中:
    1. 使用getUserMedia獲取相機的句柄,
    2. 創建RTCPeerConnection
    3. RTCPeerConnection上調用createOffersetLocalDescription
    4. 向包含商品的服務器發送請求(采用SDP格式)
  3. 服務器處理商品SDP並生成自己的答案SDP ,並在其響應中返回瀏覽器。
  4. 該JavaScript調用setRemoteDescriptionRTCPeerConnection啟動媒體流。
  5. 服務器開始從瀏覽器接收DTLS/SRTP數據包,然后根據需要執行任何操作,直到並包括以易讀的格式存儲在本地硬盤驅動器上。

資源

這將在WebM上使用VP8Vorbis不是SRTPUDP ,也可以使用TCP )。

除非您可以使用包裝器直接在ASP實現RTCPeerConnection否則您需要一種方法將流轉發到您的服務器應用程序。

PeerConnection APIWebRTC的強大功能。 它目前由Web Hang使用的WebRTC版本使用。 您可以閱讀: 環聊如何使用WebRTC

同意這是一個偏離主題的問題,但我最近碰到了相同的問題/要求,我的解決方案是使用來自WebRTCExperiments的MultiStreamRecorder 這基本上給你一個每X秒的音頻/視頻流的“斑點”,並且證明你可以上傳你的ASP.NET MVC或控制器的WebAPI 這里 您可以按部分對服務器上的blob進行實時處理,也可以將它們連接到文件,然后在流停止后進行處理。 請注意,並非所有瀏覽器都完全支持此庫中使用的API,例如,目前還沒有iOS支持。

我的服務器端分析要求用戶說出完整的句子,所以另外我使用PitchDetect.js在將部分blob發送到服務器之前檢測音頻流中的靜音。 使用這種類型的設置,您可以將客戶端配置為在完成通話后將部分blob發送到服務器,而不是每隔X秒。

至於實現1-2秒延遲,我建議查看WebSockets以進行交付,而不是HTTP POST - 但您應該使用這些選項並根據您的要求選擇最佳渠道。

目前大多數IP攝像機都使用H264編碼或MJPEG。 您不清楚正在使用什么類型的相機。

我認為真正的問題是,有哪些組件用於創作/編輯視頻以及它需要哪種視頻格式。 只有當您知道需要使用的格式時,才能根據需要對視頻進行轉碼/轉換,以便在服務器端處理。

有許多媒體服務器可以進行轉換/轉碼,像FFMPEG虛幻媒體服務器這樣的東西可以在服務器端進行轉換,解碼等,以使其達到您可以使用的某種格式。 我見過的大多數IP攝像機都使用基於H264網絡的瀏覽器播放器。

編輯:你最大的敵人將是你的延遲。 1-2秒的延遲將很難實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM