我正在尝试实现一个 flex 应用程序,该应用程序能够从网络摄像头录制视频,然后将其上传到服务器。
我只找到需要运行 Red5、Flash Media Server 和 Wowza 等媒体服务器以及到服务器的开放 rtmp 流的教程和示例。
但是,我想知道是否可以在本地录制视频,然后通过简单的 HTTP 请求将其提交到服务器。
是否有教程显示如何执行此操作?我真的是 flex 开发的新手,很想有一个循序渐进的过程:P
我正在尝试实现一个 flex 应用程序,该应用程序能够从网络摄像头录制视频,然后将其上传到服务器。
我只找到需要运行 Red5、Flash Media Server 和 Wowza 等媒体服务器以及到服务器的开放 rtmp 流的教程和示例。
但是,我想知道是否可以在本地录制视频,然后通过简单的 HTTP 请求将其提交到服务器。
是否有教程显示如何执行此操作?我真的是 flex 开发的新手,很想有一个循序渐进的过程:P
你对这个不走运。您将需要某种流媒体服务器。Flex 不具备将视频录制到用户本地驱动器或任何驱动器的能力。
有机会:)
haxevideo是在Haxe中开发的 FMS/Red5 类型的服务器。与它们的区别在于它非常轻巧,不需要任何安装。
因此,您可以将其与您的应用程序一起重新分发,这样您就可以在本地将音频和视频录制到 FLV 文件中。
不确定你是否记得 Screenweaver,但最新版本是使用 Haxe 开发的,它被称为 SWHX。在 SWHX 之上,您真正构建了一个名为HippoHX的包装器,HippoHX 为您完成所有设置。如果您下载它,就会有一个完全符合您需要的示例(记录到本地文件)。
一旦你记录了文件,剩下的唯一一点就是上传到服务器,但这没什么大不了的。
试一试,如果您发现任何问题,请给我发电子邮件或加入(相当)邮件列表寻求帮助。
有什么事告诉我
干杯!
胡安
要将 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/