我试图将网络摄像头的视频和音频录制到存储在用户本地硬盘上的FLV文件中。我有一个使用NetConnection和NetStream通过网络将视频流式传输到FMS(Red5)服务器的代码版本,但我希望能够在本地存储视频以适应低带宽/片状网络情况。我正在使用FLex 3.2和AIR 1.5,所以我不认为应该有任何防止这种情况发生的沙箱限制。如何将视频录制到AIR中的本地磁盘?
事情我已经看到:
- FileStream - 允许reading.writing本地文件,但没有.attachCamera和.attachAudio methids创建FLV。
- flvrecorder - 从网络摄像头产生屏幕抓图并创建它自己的flv文件。不支持音频。许可证禁止商业使用。
- SimpleFLVWriter.as - 与没有奇怪许可证的flvrecorder类似。不支持音频。
- This stackoverflow post - 演示使用NetConnection/NetStream从本地磁盘播放视频。
鉴于我已经有一个使用NetStream流式传输到服务器的版本,我认为最后一个版本是最有前途的,并继续完成这个演示应用程序。代码编译和运行没有错误,但我没有在单击停止按钮的磁盘上的FLV文件。 -
<mx:Script>
<![CDATA[
private var _diskStream:NetStream;
private var _diskConn:NetConnection;
private var _camera:Camera;
private var _mic:Microphone;
public function cmdStart_Click():void {
_camera = Camera.getCamera();
_camera.setQuality(144000, 85);
_camera.setMode(320, 240, 15);
_camera.setKeyFrameInterval(60);
_mic = Microphone.getMicrophone();
videoDisplay.attachCamera(_camera);
_diskConn = new NetConnection();
_diskConn.connect(null);
_diskStream = new NetStream(_diskConn);
_diskStream.client = this;
_diskStream.attachCamera(_camera);
_diskStream.attachAudio(_mic);
_diskStream.publish("file://c:/test.flv", "record");
}
public function cmdStop_Click() {
_diskStream.close();
videoDisplay.close();
}
]]>
</mx:Script>
<mx:VideoDisplay x="10" y="10" width="320" height="240" id="videoDisplay" />
<mx:Button x="10" y="258" label="Start" click="cmdStart_Click()" id="cmdStart"/>
<mx:Button x="73" y="258" label="Stop" id="cmdStop" click="cmdStop_Click()"/>
</mx:WindowedApplication>
在我看来,有要么有毛病这是防止它的工作,或NetStream只是不能在此温妮被滥用来记录视频上面的代码。
我想知道的是,a)上面的代码有什么(如果有的话)是错误的? b)如果NetStream不支持录制到磁盘,有没有其他方法可以将音频和视频捕获到用户本地硬盘上的文件?
在此先感谢!
为什么不使用AIR 2.0吗?可能会更容易使用AIR 2.0功能进行麦克风录制...使用AIR 2.0的顺便说一句,您至少可以压缩视频(不使用炼金术)......或者您至少可以测试您的流是可玩的只是试图播放它 - 不写入文件系统 – Rella 2010-01-25 23:49:44
在问AIR 2.0时仍处于测试阶段。我研究了它,并且它似乎没有为Camera或FileStrewam对象提供额外的API,但是,如果AIR 2.0允许本地录制相机,我一定会使用它。 – 2010-03-14 10:52:05