我試圖將網絡攝像頭的視頻和音頻錄製到存儲在用戶本地硬盤上的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不支持錄製到磁盤,有沒有其他方法可以將音頻和視頻捕獲到用戶本地硬盤上的文件?
在此先感謝!
爲什麼不使用AIR 2.0嗎?可能會更容易使用AIR 2.0功能進行麥克風錄製...使用AIR 2.0的順便說一句,您至少可以壓縮視頻(不使用鍊金術)......或者您至少可以測試您的流是可玩的只是試圖播放它 - 不寫入文件系統 – Rella 2010-01-25 23:49:44
在問AIR 2.0時仍處於測試階段。我研究了它,並且它似乎沒有爲Camera或FileStrewam對象提供額外的API,但是,如果AIR 2.0允許本地錄製相機,我一定會使用它。 – 2010-03-14 10:52:05