2009-06-13 9 views
5

Ich versuche, eine Flex-App zu implementieren, die ein Video von einer Webcam aufnehmen und dann auf einen Server hochladen kann.Benötigt die Webcam-Aufnahme mit Flex unbedingt einen Medienserver (FMS, Red5, Wowza, etc.)?

Ich habe nur Tutorials und Beispiele gefunden, die einen Medienserver wie Red5, Flash Media Server und Wowza und einen offenen rtmp-Stream zum Server benötigen.

Ich möchte jedoch wissen, ob es möglich ist, ein Video lokal aufzuzeichnen und es dann mit einer einfachen HTTP-Anforderung an den Server zu senden.

Gibt es irgendwo ein Tutorial, das zeigt, wie das geht? Ich bin wirklich neu in der Flex-Entwicklung und würde gerne ein Schritt für Schritt Verfahren haben: P

Antwort

2

Es gibt eine Chance:)

haXevideo ist ein FMS/Red5 Art von Server in haXe entwickelt. Der Unterschied zu diesen ist, dass es sehr leicht ist und keine Installation benötigt.

Sie können es also neben Ihrer App verteilen, damit Sie Audio und Video lokal in eine FLV-Datei aufnehmen können.

Nicht sicher, dass Sie sich an Screenweaver erinnern, aber die neueste Version wurde mit haXe entwickelt und heißt SWHX. Zusätzlich zu SWHX habe ich einen Wrapper namens HippoHX gebaut und HippoHX erledigt das Setup für Sie. Wenn Sie es herunterladen, gibt es ein Beispiel, das genau das tut, was Sie brauchen (Aufnahme in eine lokale Datei).

Sobald Sie die Datei aufgezeichnet haben, würde das einzige übriggebliebene Bit auf den Server hochgeladen werden, aber das ist keine große Sache.

Geben Sie es los und wenn Sie irgendwelche Probleme finden, feuern Sie mir eine E-Mail oder treten Sie der (eher ziemlich) Mailingliste für Hilfe.

Alles, was mich wissen,

Prost!

Juan

2

Ihr Pech mit diesem. Sie benötigen einen Streaming-Server. Flex verfügt nicht über die Funktionen zum Aufzeichnen von Video auf das lokale Laufwerk des Benutzers oder auf ein Laufwerk.

0

Um eine FLV zu einem ByteArray, starten durch Instanziieren ByteArrayFlvEncoder zu kodieren. Der Rest ähnelt der letzten Version. Sie können jedoch updateDurationMetadata() aufrufen, wenn Sie die Eigenschaft duration in den Metadaten aktualisiert haben. Rufen Sie abschließend kill() auf, um das Objekt für die Garbage Collection vorzubereiten:?

var baFlvEncoder:ByteArrayFlvEncoder = new ByteArrayFlvEncoder(myFrameRate); 

baFlvEncoder.setVideoProperties(myWidth, myHeight, VideoPayloadMakerAlchemy); 
// (Omit the 3rd argument to NOT use Alchemy if you're targeting Flash 9) 
baFlvEncoder.setAudioProperties(BaseFlvEncoder.SAMPLERATE_44KHZ, true, false, true); 

baFlvEncoder.start(); 

baFlvEncoder.addFrame(myBitmapData, myAudioByteArray); 
baFlvEncoder.addFrame(myBitmapData, myAudioByteArray); // etc. 

baFlvEncoder.updateDurationMetadata(); 

saveOutMyFileUsingFileReference(baFlvEncoder.byteArray); 

baFlvEncoder.kill(); // for garbage collection 

Und

Um eine FLV direkt in einer lokalen Datei (in der Luft), instanziiert FileStreamFlvEncoder mit einem Aktenzeichen, kodieren und die freiliegende Filestream öffnen, und es dann schließen, wenn Sie fertig sind :?

var myFile:File = File.documentsDirectory.resolvePath("video.flv"); 
var fsFlvEncoder:FileStreamFlvEncoder = new FileStreamFlvEncoder(myFile, myFrameRate); 
fsFlvEncoder.fileStream.openAsync(myFile, FileMode.UPDATE); 

fsFlvEncoder.setVideoProperties(myWidth, myHeight, VideoPayloadMakerAlchemy); 
fsFlvEncoder.setAudioProperties(BaseFlvEncoder.SAMPLERATE_44KHZ, true, false, true); 

fsFlvEncoder.start(); 

fsFlvEncoder.addFrame(myBitmapData, myAudioByteArray); 
fsFlvEncoder.addFrame(myBitmapData, myAudioByteArray); // etc. 

fsFlvEncoder.updateDurationMetadata(); 

fsFlvEncoder.fileStream.close(); 

fsFlvEncoder.kill(); 

Für weitere Einzelheiten bei Temperaturen unter Referenz-Link:

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