5

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

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

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

是否有教程显示如何执行此操作?我真的是 flex 开发的新手,很想有一个循序渐进的过程:P

4

3 回答 3

2

你对这个不走运。您将需要某种流媒体服务器。Flex 不具备将视频录制到用户本地驱动器或任何驱动器的能力。

于 2009-06-13T01:20:51.217 回答
2

有机会:)

haxevideo是在Haxe中开发的 FMS/Red5 类型的服务器。与它们的区别在于它非常轻巧,不需要任何安装。

因此,您可以将其与您的应用程序一起重新分发,这样您就可以在本地将音频和视频录制到 FLV 文件中。

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

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

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

有什么事告诉我

干杯!

胡安

于 2009-06-13T07:42:12.283 回答
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-02T08:09:07.180 回答