Sto provando a registrare video e audio di una webcam su un file FLV memorizzato sul disco rigido locale dell'utente. Ho una versione di questo codice funzionante che utilizza NetConnection e NetStream per trasmettere il video su una rete a un server FMS (Red5), ma mi piacerebbe essere in grado di archiviare il video localmente per situazioni di bassa larghezza di banda/instabilità della rete. Sto usando FLex 3.2 e AIR 1.5, quindi non credo ci debbano essere restrizioni di sandbox che impediscono che ciò accada.Come registrare video su un disco locale in AIR?
cose che ho visto:
- FileStream - Permette reading.writing file locali ma non .attachCamera e methids .attachAudio per la creazione di un file FLV.
- flvrecorder - Produce screen grabs dalla web cam e crea il proprio file flv. Non supporta l'audio. La licenza proibisce l'uso commerciale.
- SimpleFLVWriter.as - Simile al flvrecorder senza la licenza wierd. Non supporta l'audio.
- This stackoverflow post - Che dimostra la riproduzione di un video da disco locale utilizzando NetConnection/NetStream.
Dato che ho già una versione che utilizza NetStream per lo streaming sul server, ho pensato che l'ultimo era più promettente e sono andato avanti e ho messo insieme questa applicazione demo. Il codice viene compilato e eseguito senza errori, ma non ho un file FLV su disco su cui è stato fatto clic sul pulsante stop. -
<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>
Mi sembra che ci sia sia qualcosa di sbagliato con il codice di cui sopra, che è impedendole di lavorare, o NetStream solo non può essere abusato in questo Wany per registrare video.
Quello che mi piacerebbe sapere è, a) Cosa (se qualcosa) è sbagliato con il codice sopra? b) Se NetStream non supporta la registrazione su disco, ci sono altre alternative che catturano Audio e Video su un file sul disco fisso locale degli utenti?
Grazie in anticipo!
Perché non utilizzare l'aria 2.0? Potrebbe essere più semplice usare le funzioni AIR 2.0 per la registrazione del microfono ... BTW usando AIR 2.0 sarai in grado di comprimere almeno il video (non usando Alchemy) ... O forse puoi almeno testare se il tuo stream è giocabile solo cercando di riprodurlo - non scrivere sul file system – Rella
Al momento di chiedere AIR 2.0 era ancora in beta. L'ho esaminato e non sembravano avere API aggiuntive per gli oggetti Camera o FileStrewam che lo rendessero possibile, tuttavia, se AIR 2.0 consentisse la registrazione locale di una fotocamera, lo userei sicuramente. –