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

问题描述 投票:5回答:3

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

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

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

是否有某个教程显示如何执行此操作?我在弹性开发方面真的很陌生,并且希望有一步一步的程序:P

flex video webcam video-capture flash-media-server
3个回答
2
投票

有机会:)

haxevideo是在Haxe开发的FMS / Red5服务器。与那些不同的是非常轻量级,它不需要任何类型的安装。

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

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

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

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

什么让我知道,

干杯!

Juan


2
投票

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


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/

© www.soinside.com 2019 - 2024. All rights reserved.