2010-01-21 41 views
8

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!

+0

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

+0

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. –

risposta

2

Non è possibile riprodurre video in streaming direttamente sul disco locale senza utilizzare alcun servizio di streaming come codificatore Windows Media o server multimediale Red5 o Adobe o altro.

Ho provato tutti i campioni su Internet senza soluzione fino ad oggi.

un'occhiata a questo link per un'altra possibilità:

http://www.zeropointnine.com/blog/updated-flv-encoder-alchem/

0

Sto anche cercando di fare la stessa cosa, ma mi è stato detto dagli sviluppatori di avchat.net che non è possibile farlo con AIR al momento. Se scopri come farlo, mi piacerebbe saperlo!

Ho anche trovato questo link, non è sicuro quanto sia utile http://www.zeropointnine.com/blog/webcam-dvr-for-apollo/

+0

Ciao, Il backend di registrazione video dietro il DVR della Webcam è il SimpleFLVRecorder.as che mi è piaciuto sopra. Il problema principale per me con SimpleFLVWriter.as è che non supporta la registrazione audio insieme al video della webcam. Nella mia applicazione l'audio è molto importante (in realtà, una soluzione che registra solo l'audio e nessun video sarebbe migliore del video senza audio). –

0

Beh, penso solo che lasciandolo connettersi a niente (NULL) non funziona. Gli ho già lasciato provare a connettersi a localhost, ma non ha funzionato. Non penso che sia nemmeno possibile. Lo streaming video funziona solo con Flash Media Server e Red5, non in locale. Forse potresti installare Red5 sul tuo PC?

+0

L'obiettivo è di fornire una "app" che l'utente scarica dal sito web (idealmente installato senza problemi come consentito da AIR) che può utilizzare per registrare video e successivamente caricarlo su un server Red5. Installare Red5 sul computer locale significherebbe creare un'app di installazione separata che ha installato la nostra applicazione e Red5 per l'utente. Non l'esperienza dei seamles che stiamo sperando. –

0

Purtroppo il supporto video in flash dalle fotocamere è molto scadente. Quando si esegue lo streaming dei file raw, il problema è che è necessario codificare in FLV e farlo in tempo reale richiede un computer molto veloce. I concetti di prima generazione dovrebbero scrivere bitmap non elaborati in un file (o serializzare un array), quindi un secondo metodo converte il file in un file FLV. Fondamentalmente è necessario eseguire il polling della telecamera e salvare ogni fotogramma come bitmap, quindi impilarlo in una matrice. Questo è molto limitato e non potrebbe fare audio. Era anche molto difficile superare i 5-10fps.

Il gent al punto zero nove, si avvicinò con una nuova versione e il tuo sulla buona strada.Guarda the new flv recorder. Ho passato molto tempo a lavorare con questo, ma non l'ho mai fatto funzionare per le mie esigenze (due fotocamere). Non riuscivo a ottenere l'FPS di cui avevo bisogno. Ma potrebbe funzionare per te. Era molto più veloce del metodo originale.

L'unica altra opzione di lavoro che conosco è avere il Red5 salvare il video e scaricarlo nuovamente nell'app.

2

La mia soluzione era incorporare Red5 in AIR. condividere con voi il mio articolo

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

In generale, la soluzione è quella di incorporare libera server multimediale Red5 in aria come una risorsa. Quindi, il server sarà presente nella cartella dell'applicazione AIR. Quindi, tramite NativeProcess, è possibile eseguire Red5 e avere la sua istanza in memoria. Di conseguenza, è possibile avere una registrazione video locale senza problemi di rete.

+0

Benvenuti in Stack Overflow! Mentre questo può teoricamente rispondere alla domanda, [sarebbe preferibile] (http://meta.stackexchange.com/q/8259) per includere qui le parti essenziali della risposta e fornire il link per riferimento. –

+0

Ciao Peter. Grazie. Il problema è che è un po 'difficile descrivere la soluzione solo nel corpo del commento. In generale, la soluzione è incorporare il server multimediale gratuito Red5 in AIR come un asset. Quindi, il server sarà presente nella cartella dell'applicazione AIR. Quindi, tramite NativeProcess, è possibile eseguire Red5 e avere la sua istanza in memoria. Di conseguenza, è possibile avere una registrazione video locale senza problemi di rete. – walv

+0

Grazie. Ho inserito il tuo commento nella tua risposta. –

Problemi correlati