Adobe Flash是否可以捕获视频流并在本地存储或缓存?

时间:2013-10-25 16:35:53

标签: actionscript-3 flash video video-capture h.264

以下链接介绍了如何构建一个Flash项目,该项目从网络摄像头捕获视频流,通过网络连接将h264和编码到媒体服务器:

http://www.adobe.com/devnet/adobe-media-server/articles/encoding-live-video-h264.html

我的有限经验是这种方法受可用带宽的限制,即如果项目配置为以超过可用带宽的比特率录制视频,则丢弃帧并且缺少最终视频。

我想知道闪存中是否有设备记录到本地存储或内存缓存,然后在录制完成后将其上传到媒体服务器?这是一个网络应用程序花费额外的时间上传,因为上传与录制分离,并且视频比特率和带宽之间没有争用。

2 个答案:

答案 0 :(得分:2)

实际上还有一种方法。我通过重新编译C / C ++代码在web Flash(或AIR)中构建了一个编码视频的库。它将视频存储为内存为ByteArray,目前与ogv(Theora / Vorbis编解码器)配合使用。它还可以在“实时”模式下运行,该模式在另一个线程上运行编码,因此它可以同时捕获和编码。您可以随时尝试免费版本,看看它是否有用...... http://rainbowcreatures.com/product_flashywrappers.php。如果正在编码的视频相对较短(几十秒)且较低的分辨率(640x480,800x600),则大小最大。 5-15 MB。

我已经能够用它构建演示,将视频分享到php,Facebook或存储到磁盘。

答案 1 :(得分:1)

除非您正在运行AIR应用程序,否则Flash中不存在此类功能。关于本地存储,基于Web的应用程序只有SharedObject,如果我没记错的话,通常限制在~100kb左右。你很幸运能在那个空间录制一帧视频。

您可以尝试直接保存到内存(即将其保留为ByteArray),但根据所使用的操作系统,浏览器和插件,您的应用可能会因强制使用内存而被迫关闭。即使它没有,这将是一个糟糕的选择,因为可能有一个512MB的RAM系统,你试图在其中保存300MB的文件。你甚至不用眨眼就会减慢那个系统(甚至更好的系统)的速度。

如果您使用的是AIR,则可以将视频保存到内存中,然后每隔几秒钟将视频保存到使用FileFileStream的磁盘。唯一的限制是它保存的驱动器的大小。然后,您可以在录制结束时或用户满意时上传。