Таймер сработает, но более прямым решением является обработка первого ActivityEvent, отправленного экземпляром Camera после вызова Video.attachCamera (). Вот так:
var video:Video = new Video();
var camera:Camera = Camera.getCamera();
camera.addEventListener(ActivityEvent.ACTIVITY, onCameraActivity);
private function onCameraActivity (evt:ActivityEvent) :void {
camera.removeEventListener(ActivityEvent.ACTIVITY, onCameraActivity);
// wait a bit to ensure the camera frame is not empty
var timer:Timer = new Timer(50, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE,
function (evt:TimerEvent) :void {
timer.removeEventListener(TimerEvent.TIMER_COMPLETE, arguments.callee);
// take snapshot here
var bitmapData:BitmapData = new BitmapData(video.width, video.height);
bitmapData.draw(video);
}
);
timer.start();
}
РЕДАКТИРОВАТЬ: некоторые камеры требуют немного времени для инициализации, поэтому захват первого кадра после ActivityEvent.ACTIVITY приводит к пустому кадру. Добавлен короткий тайм-аут для решения этой проблемы.