如何使用flash / flex在没有媒体服务器的情况下通过相机录制视频?
不需要按位置或浏览器缓存保存的媒体服务器,当停止记录时,它会通过http post而不是媒体流将flv文件上传到服务器
答案 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/