使用Flex进行网络摄像头录制是否严格要求媒体服务器(FMS,Red5,Wowza等)?

时间:2009-06-13 00:21:33

标签: flex video webcam video-capture flash-media-server

我正在尝试实施一个能够从网络摄像头录制视频然后将其上传到服务器的灵活应用。

我只找到了需要运行媒体服务器的教程和示例,例如Red5,Flash Media Server和Wowza以及服务器的开放rtmp流。

但是,我想知道是否可以在本地录制视频,然后使用简单的HTTP请求将其提交给服务器。

是否有某个教程显示如何执行此操作?我是弹性开发的新手,我很乐意逐步完成一个程序:P

3 个答案:

答案 0 :(得分:2)

你对这个运气不好。你需要某种流媒体服务器。 Flex无法将视频录制到用户本地驱动器或任何驱动器上。

答案 1 :(得分:2)

有机会:)

haxevideoHaxe中开发的FMS / Red5服务器。与那些不同的是,它非常轻巧,不需要任何安装。

所以你可以做的是将它与你的应用程序一起重新分发,这样你就可以将音频和视频本地录制到FLV文件中。

不确定您是否记得Screenweaver,但最新版本是使用Haxe开发的,它被称为SWHX。在SWHX之上,您真正构建了一个名为HippoHX的包装器,HippoHX为您完成了所有设置。如果您下载它,那么有一个样本可以完全满足您的需要(记录到本地文件)。

一旦你记录了文件,剩下的唯一一点就是上传到服务器,但这没什么大不了的。

试一试,如果您发现任何问题,请给我发电子邮件或加入(相当完整的)邮件列表寻求帮助。

任何事都让我知道,

干杯!

答案 2 :(得分: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/