0

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

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

4

1 回答 1

0

要将 FLV 编码为 ByteArray,首先要实例化 ByteArrayFlvEncoder。其余部分与上一个版本类似,但您现在可以在更新元数据中的持续时间属性后调用 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/

于 2014-06-02T07:33:30.670 回答