如何使用flash / flex在没有媒体服务器的情况下通过摄像头录制视频?

时间:2013-10-17 03:38:39

标签: flash flex record flv

如何使用flash / flex在没有媒体服务器的情况下通过相机录制视频?

不需要按位置或浏览器缓存保存的媒体服务器,当停止记录时,它会通过http post而不是媒体流将flv文件上传到服务器

1 个答案:

答案 0 :(得分:0)

要将FLV编码为ByteArray,首先要实例化ByteArrayFlvEncoder。其余部分类似于上一个版本,但是当您完成更新元数据中的duration属性时,您现在可以调用updateDurationMetadata()。最后,调用kill()来准备垃圾回收对象: ?

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

要将FLV直接编码为本地文件(在AIR中),请使用File引用实例化FileStreamFlvEncoder,并打开公开的FileStream,然后在完成所有操作后将其关闭: ?

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();

有关详细信息,请参阅以下参考链接:

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