Estoy tratando de grabar el video y el audio de una cámara web en un archivo FLV almacenado en el disco duro local de los usuarios. Tengo una versión de este código en funcionamiento que usa NetConnection y NetStream para transmitir el video a través de una red a un servidor FMS (Red5), pero me gustaría poder almacenar el video localmente para situaciones de redes con poco ancho de banda/escamosa. Estoy usando FLex 3.2 y AIR 1.5, por lo que no creo que haya restricciones de espacio aislado que impidan que esto ocurra.¿Cómo grabo video en un disco local en AIR?
cosas que he visto:
- FileStream - Permite reading.writing archivos locales, pero sin .attachCamera y methids .attachAudio para crear un FLV.
- flvrecorder - Produce capturas de pantalla de la cámara web y crea su propio archivo flv. No es compatible con Audio. La licencia prohíbe el uso comercial.
- SimpleFLVWriter.as - Similar a flvrecorder sin la licencia extraña. No es compatible con audio
- This stackoverflow post - Lo que demuestra la reproducción de un video del disco local usando NetConnection/NetStream.
Dado que ya tengo una versión que usa NetStream para transmitir al servidor, pensé que la última era la más prometedora y seguí y armé esta aplicación de demostración. El código se compila y se ejecuta sin errores, pero no tengo un archivo FLV en el disco que haga clic en el botón de detención. -
<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>
Me parece que hay algo mal, ya sea con el código anterior que se impide que trabaje, o NetStream simplemente no se puede abusar de este wany para grabar vídeo.
Lo que me gustaría saber es, a) ¿Cuál (si acaso) es malo en el código anterior? b) Si NetStream no es compatible con la grabación en el disco, ¿hay alguna otra alternativa que capture Audio Y Video en un archivo en el disco duro local del usuario?
¡Gracias de antemano!
Por qué no utilizar el aire 2.0? Puede ser que sea más fácil usar las funciones de AIR 2.0 para la grabación de micrófonos ... Por cierto, con AIR 2.0 podrás al menos comprimir videos (sin usar Alchemy) ... O tal vez puedas al menos probar si tu transmisión es reproducible simplemente tratando de reproducirlo, no para escribir en el Sistema de archivos – Rella
Al momento de solicitar AIR 2.0 todavía estaba en versión Beta. Lo investigué y no parecía tener API adicionales para la cámara o los objetos FileStrewam que lo harían posible. Sin embargo, si AIR 2.0 permite la grabación local de una cámara, definitivamente la usaría. –