Update, I got the video working. Kinda. I still get this error sometimes. Even with short videos.
Error #2030: End of file was encountered.
Sometimes it works fine. But at least I'm able to record FLVs from components. I haven't done the audio addition yet.
To run this code, you'll need the FLVRecorder found here: http://www.joristimmerman.be/wordpress/2008/12/18/flvrecorder-record-to-flv-using-air/
<?xml version="1.0" encoding="utf-8"?>
import mx.core.UIComponent;
import mx.events.FlexEvent;
private var file:File;
private var recorder:FLVRecorder=FLVRecorder.getInstance()
private var fps:uint = 10;
private var timer:Timer;
protected function viewnavigator1_creationCompleteHandler(event:FlexEvent):void
{
// 2. Define the target FLV-file’s properties, the file instance to your flv-file, width & height, framerate and the systemManager instance, that’s a Flash internal declared variable and the optional duration in seconds:
file=File.desktopDirectory.resolvePath("recording.flv");
recorder.setTarget(file,320,320,fps,systemManager)
var camera : Camera = Camera.getCamera();
if (camera)
{
var ui : UIComponent = new UIComponent();
var video : Video = new Video(320, 320);
camera.setMode(320, 320, 24.);
video.attachCamera(camera);
ui.addChild(video);
cameraGroup.addElement(ui);
}
timer = new Timer(1000/fps);
timer.addEventListener(TimerEvent.TIMER, captureScreen);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, stopRecording);
}
protected function stopRecording(event:Event):void
{
timer.stop();
//when saving is done
recorder.addEventListener(FLVRecorderEvent.FLV_CREATED, fileMade)
//when saving starts
recorder.addEventListener(FLVRecorderEvent.FLV_START_CREATION, startCreatingFLV)
// TODO Auto-generated method stub
recorder.stopRecording()
}
private function startCreatingFLV(e:FLVRecorderEvent):void{
recorder.addEventListener(FLVRecorderEvent.PROGRESS,onFLVCreationProgress)
}
private function onFLVCreationProgress(e:FLVRecorderEvent):void{
//e.progress: percent complete (0 to 1)
//pbSaving: ProgressBar component in Flex
trace("saving progress ", e.progress,1);
}
protected function captureScreen(event:TimerEvent):void
{
trace("captured screen");
recorder.captureComponent(movieGroup) //DisplayObject, takes a screenshot from that component
}
protected function startRecording(event:MouseEvent):void
{
// TODO Auto-generated method stub
timer.start();
}
protected function fileMade(event:Event):void
{
trace("file made");
}
]]>
</fx:Script>
<s:VGroup>
<s:HGroup>
<s:Button label="start" click="startRecording(event)"/>
<s:Button label="stop" click="stopRecording(event)"/>
<s:Label id="progress" text="waiting..."/>
</s:HGroup>
<s:Group id="movieGroup" width="50%" height="50%">
<s:Group id="cameraGroup" width="100%" height="100%"/>
<s:Image source="image.png" width="25%" height="25%"/>
</s:Group>
</s:VGroup>