2010-01-21 40 views
8

我試圖將網絡攝像頭的視頻和音頻錄製到存儲在用戶本地硬盤上的FLV文件中。我有一個使用NetConnection和NetStream通過網絡將視頻流式傳輸到FMS(Red5)服務器的代碼版本,但我希望能夠在本地存儲視頻以適應低帶寬/片狀網絡情況。我正在使用FLex 3.2和AIR 1.5,所以我不認爲應該有任何防止這種情況發生的沙箱限制。如何將視頻錄製到AIR中的本地磁盤?

事情我已經看到:

  • FileStream - 允許reading.writing本地文件,但沒有.attachCamera和.attachAudio methids創建FLV。
  • flvrecorder - 從網絡攝像頭產生屏幕抓圖並創建它自己的flv文件。不支持音頻。許可證禁止商業使用。
  • SimpleFLVWriter.as - 與沒有奇怪許可證的flvrecorder類似。不支持音頻。
  • This stackoverflow post - 演示使用NetConnection/NetStream從本地磁盤播放視頻。

鑑於我已經有一個使用NetStream流式傳輸到服務器的版本,我認爲最後一個版本是最有前途的,並繼續完成這個演示應用程序。代碼編譯和運行沒有錯誤,但我沒有在單擊停止按鈕的磁盤上的FLV文件。 -

<mx:Script> 
    <![CDATA[ 

     private var _diskStream:NetStream; 
     private var _diskConn:NetConnection; 
     private var _camera:Camera; 
     private var _mic:Microphone; 

     public function cmdStart_Click():void { 
      _camera = Camera.getCamera(); 
      _camera.setQuality(144000, 85); 
      _camera.setMode(320, 240, 15); 
      _camera.setKeyFrameInterval(60); 

      _mic = Microphone.getMicrophone(); 

      videoDisplay.attachCamera(_camera); 

      _diskConn = new NetConnection(); 
      _diskConn.connect(null); 

      _diskStream = new NetStream(_diskConn); 
      _diskStream.client = this; 
      _diskStream.attachCamera(_camera); 
      _diskStream.attachAudio(_mic); 
      _diskStream.publish("file://c:/test.flv", "record"); 

     } 

     public function cmdStop_Click() { 
      _diskStream.close(); 
      videoDisplay.close(); 
     } 

    ]]> 
</mx:Script>  
    <mx:VideoDisplay x="10" y="10" width="320" height="240" id="videoDisplay" /> 
    <mx:Button x="10" y="258" label="Start" click="cmdStart_Click()" id="cmdStart"/> 
    <mx:Button x="73" y="258" label="Stop" id="cmdStop" click="cmdStop_Click()"/> 

</mx:WindowedApplication> 

在我看來,有要麼有毛病這是防止它的工作,或NetStream只是不能在此溫妮被濫用來記錄視頻上面的代碼。

我想知道的是,a)上面的代碼有什麼(如果有的話)是錯誤的? b)如果NetStream不支持錄製到磁盤,有沒有其他方法可以將音頻和視頻捕獲到用戶本地硬盤上的文件?

在此先感謝!

+0

爲什麼不使用AIR 2.0嗎?可能會更容易使用AIR 2.0功能進行麥克風錄製...使用AIR 2.0的順便說一句,您至少可以壓縮視頻(不使用鍊金術)......或者您至少可以測試您的流是可玩的只是試圖播放它 - 不寫入文件系統 – Rella 2010-01-25 23:49:44

+0

在問AIR 2.0時仍處於測試階段。我研究了它,並且它似乎沒有爲Camera或FileStrewam對象提供額外的API,但是,如果AIR 2.0允許本地錄製相機,我一定會使用它。 – 2010-03-14 10:52:05

回答

0

我也在嘗試做同樣的事情,但是我從avchat.net的開發者那裏得知,目前無法使用AIR來做到這一點。如果你確實知道如何去做,我很想知道!

我也發現了這個鏈接,它是不知道如何有幫助http://www.zeropointnine.com/blog/webcam-dvr-for-apollo/

+0

嗨,Webcam DVR後面的視頻錄製後端是我喜歡的SimpleFLVRecorder.as。 SimpleFLVWriter.as的主要問題是,它不支持與網絡攝像頭視頻一起錄製音頻。在我的應用程序中,音頻非常重要(實際上,這是一種僅記錄音頻的解決方案,沒有視頻會比沒有音頻的視頻更好)。 – 2010-03-14 10:58:35

0

好吧,我只是覺得,讓它連接到無(NULL)不起作用。我已經讓他嘗試連接到本地主機,但這也沒有成功。我不認爲這是可能的。流式視頻僅適用於Flash Media Server和Red5,不適用於本地。也許你可以在你的PC上安裝Red5?

+0

目標是提供用戶從網站下載的「應用程序」(理想情況下按照AIR允許的那樣無縫安裝),以便用戶錄製視頻並將其上傳到Red5服務器。在本地機器上安裝Red5意味着我們需要創建一個單獨的安裝程序App,它爲用戶安裝了我們的應用程序和Red5。不是我們希望的無縫鋼管經驗。 – 2010-04-29 22:01:58

0

可悲的是,攝像頭在閃存中的視頻支持是很差差。當您流式傳輸原始數據時,問題在於您必須對FLV進行編碼,並且實時執行該操作需要非常快速的計算機。第一代概念將原始位圖寫入文件(或序列化數組),然後第二種方法將文件轉換爲FLV。基本上你必須輪詢相機並將每個幀保存爲位圖,然後堆疊在一個數組中。這是非常有限的,不能做音頻。它也很難達到5-10fps以上。

在零點九的紳士,提出了一個新的版本,你在正確的道路上。看看the new flv recorder。我花了很多時間處理這件事,但從未完全滿足我的需求(兩臺相機)。我無法得到我需要的FPS。但它可能適合你。它比原來的方法快得多。

我知道的唯一的其他工作選項是讓Red5保存視頻並將其下載迴應用。

2

我的解決方案是將Red5嵌入到AIR中。 與您分享我的文章

http://mydevrecords.blogspot.com/2012/01/local-recording-in-adobe-air-using-red5.html

一般情況下,解決方案是嵌入免費的媒體服務器的Red5成爲AIR類似的資產。所以,服務器將出現在AIR應用程序文件夾中。然後,通過NativeProcess,您可以運行Red5並將其實例存儲在內存中。因此,您可以在沒有任何網絡問題的情況下進行本地視頻錄製。

+0

歡迎來到Stack Overflow!雖然這可能會在理論上回答這個問題,[這將是更可取的](http://meta.stackexchange.com/q/8259)在這裏包括答案的基本部分,並提供參考鏈接。 – 2012-01-12 17:52:41

+0

嗨,彼得。謝謝。 問題是,僅僅在評論的正文中描述解決方案有點困難。 通常,解決方案是將免費的媒體服務器Red5嵌入到AIR中,就像資產一樣。所以,服務器將出現在AIR應用程序文件夾中。通過NativeProcess,您可以運行Red5並將其實例存儲在內存中。因此,您可以在沒有任何網絡問題的情況下進行本地視頻錄製。 – walv 2012-01-16 09:22:05

+0

謝謝。我已將您的評論置入您的答案中。 – 2012-01-16 13:50:49

相關問題