Create cool AIR / Flash apps with video recording.

Record AIR / Flash content such as Stage3D, webcam, Movieclips and output mp4 videos!

Coming up: JavaScript / HTML5 support


FlashyWrappers iOS powering Ray Ban #CAMPAIGN4CHANGE by ANTIDOTO Design demonstrates video frame composing.

"Whenever you need a quick app with webcam recording or are working on a creative app with user created content, adding video capture can either become the core of your app or provide means to promote your app through user shared videos."

Key features

  • Capture videos from Flash & AIR: Develop apps with user-generated content, kiosk apps, record game replays etc.
  • Capture individual DisplayObjects: MovieClips, Sprites, BitmapData, Stage3D(on desktop) in case you don't want to capture the UI or other app elements
  • Capture the screen: The usual mode, you can capture the whole app's screen as it is happening
  • Create videos from scratch: Send raw video frames in simple ByteArrays to create MP4's. Don't just capture, create
  • For AIR & Flash, native by heart: FW's core is C++ native code crafted for each platform. Even FW Flash is C++, cross-compiled to SWC / SWF!
  • Full video file control: Full access to mp4 files you produce, you can save the mp4 file, send it to your server etc.
  • Crossplatform: One source for AIR iOS / Android* / Mac / Windows and Flash
  • 100% client-side: No server needed! Video is encoded in the client, inside Flash / AIR. You get a ByteArray representing your video.
  • Audio recording: Record playing sounds(Sound class) & microphone through FWSoundMixer and mix with video
  • MP4 export option on all platforms: Native MP4 encoding on mobile, desktop (for Flash see licensing table for details)
  • OGV export option in Flash Player: Free & open codec alternative for FP
  • Native encoders: We don't use FFmpeg except for Flash Player. On iOS / Android and Windows / OS X, we talk directly to the hardware accelerated encoders.
  • Optimized for iOS: Hardware accelerated video encoding & accelerated fullscreen capture (direct OpenGL ES to video), encoding powered by AVFoundation
  • Optimized for Android: Hardware accelerated video encoding & accelerated fullscreen capture (direct OpenGL ES to video), encoding powered by MediaCodec *
  • Optimized for Flash Player: C++ code crosscompiled to optimized AVM2 bytecode to squeeze out everything Flash got, powered by FFmpeg
  • Optimized for Windows: C++ code compiled to Windows native code, encoding powered by MediaCodec Windows API
  • Optimized for Mac: C++ code compiled to Mac native code, encoding powered by AVFoundation
  • Simple and explained: Quickstart step-by-step guide in PDF, examples with source code (basic, webcam and Starling game)
  • Multithreading: Supports Workers in Flash Player (Feb 2020: ONLY FP < 30, Adobe broke multithreading, please take our free survey to support a workaround) and native multithreading on other platforms when encoding videos
  • FREE option: FlashyWrappers is free or commercial (with full source code access)
  • * currently in alpha

    JavaScript / Unity / GameMaker etc.


    Let's face it, Flash is almost dead and AIR situation isn't the best. However, FlashyWrappers video recording core doesn't depend on Flash / AIR. FW has always been C++ based. This makes it very possible to port FW to other platforms. The only question is your demand.


    Currently, you can take a survey to tell us which port you'd prefer. You might also contact us directly.

  • Record mp4 videos from HTML5 Canvas with JS: With Flash support dying soon, we might be forced moving to JavaScript / HTML5 to keep supporting client-side web based video recording. Although the same issue which forced Adobe to disable an important multithreading feature in FP 30 exists also in EMScripten (which we'd use to port FW to JS), there are developements. For example the latest Chrome re-enabled full support for that JS feature, which should allow FW working in desktop Chrome browsers. The only question will be performance, but hopefully it should be comparable to AS3 / Flash.
  • Porting FW to other platforms (Unity, Cocos2D, GameMaker etc.) We might add FW's client-side recording core to any platform supporting native extension and being reasonably open to support screen / audio grabbing. In fact, we think FW might work better on those other platforms as other they are not such a black box as AIR is, which often made recording from AIR's screen pretty hacky(especially on Android).
  • NOTE: Whenever the above happens depends on your demand / interest. We're currently not in a position to port FW to new platforms with uncertain / non-existing demand.

    Features comparsion

    Quick overview of the free and full version features.

    FW "Free" FW "Standard" FW "Premium"
    Recording time 30 seconds Unlimited Unlimited
    Flash Player OGV / MP4 encoder X X
    Android MP4 encoder (alpha) X X
    iOS, Mac, Win video encoders X X X
    Capture individual DisplayObjects, Stage3D or from ByteArrays X X X
    Realtime and non-realtime video encoding X X X
    Hardware acceleration on mobile
    (FW Android requires 4.3+)
    X X X
    Fast fullscreen GLES capture from AIR on mobile X X X
    Export video as MP4 ByteArray X X X
    Use in commercial apps X X
    No FlashyWrappers logo in videos X X
    Free basic support & updates 1 year
    X X
    Latest builds & betas X
    Full source code X

    Get it (16MB)
    Request download link

    Flash & MP4 licensing

    If your target is AIR (desktop or mobile) there are no issues and you can skip this. FlashyWrappers is middleware SDK connecting AIR with OS specific MP4 encoders(like AVFoundation or MediaFoundation). For Flash Player where FW can't connect to the native OS, we piggyback bunch of encoders inside SWF file. Keep in mind that H.264 and AAC encoders, when embedded like that, are subject to patents & royalty payments to the patent holders. To avoid any licensing issues, we're providing also Flash encoders for the completely free OGV codecs.

    Using MP4 encoding in your Flash app is solely under your own responsibility including any royalty payments to H.264 / AAC patent holders.

    Performance

    Our goal is to make FlashyWrappers as effective and stable as possible. This is an ongoing proccess, as we are learning more about the target platforms and also sometimes changes in AIR / Flash Player make the job a little harder. Here's a quick overwiew of how things are now and what you can expect in the future in terms of improvement.

    Android iOS desktop
    (i5 - i7 laptop)
    Flash Player
    (recording at half resolution compared to desktop ANE)
    right now fast (4.3+) very fast very fast bearable / ok
    potential very fast (4.3+) super fast super fast ok
    reason HW accelerated encoding HW accelerated encoding (room for more multithreading) strong CPU's (room for OpenGL / DirectX capturing) running on Flash VM (stuck in non-native Flash sandbox, slow VM)

    Flash Player is the most problematic platform right now because we're stuck in security sandbox. Sometimes users have unrealistic expectations of what FlashyWrappers can do in the web Flash Player. On mobile there's a great potential because of all the hardware acceleration FW can take advantage of(despite the weaker CPU's). But Flash Player is a virtual machine (similar to Java), and there's no way to capture OpenGL / DirectX. We're stuck without any acceleration AND non-native code.

    Online demos (Flash Player)


    Adobe stopped supporting shared ByteArrays in FP 30+ (security vulnerability), so online demos are currently disabled. We're looking at porting FW to JavaScript as a workaround.



    This demo shows webcam & microphone capturing. Keep in mind this is the slowest platform (Flash Player), so test it on decent hardware (i5-i7 laptop at least). On AIR desktop / AIR iOS the same demo performs with much higher performace which allows ito to capture at 100% resolution.



    This demo focuses on the way audio & microphone is captured through FWSoundMixer in Flash Player. Keep in mind this is demo of the slowest platform (Flash Player), so if you can try it on "decent" hardware (i5-i7 laptop is fine).


    Hello world!

    Sample code shows how easy it is to generate a video in AS3 (FW 2.4 API)

    
    		    
    
    
    
    package  {       
    
    	
    
    	import com.rainbowcreatures.*;
    
    	import com.rainbowcreatures.swf.*;
    
    	import flash.events.*;
    
    	import flash.net.FileReference;
    
    	import flash.display.MovieClip;
    
    	
    
    	public class Helloworld extends MovieClip {
    
    		
    
    		var myEncoder:FWVideoEncoder;
    
    		var frameIndex:Number = 0;
    
    		var maxFrames:Number = 50;
    
    		
    
    		public function Helloworld() {
    
    			// init FlashyWrappers!
    
    			myEncoder = FWVideoEncoder.getInstance(this);			
    
    			myEncoder.addEventListener(StatusEvent.STATUS, onStatus);
    
    			myEncoder.load();
    
    		}
    
    		
    
    		private function onStatus(e:StatusEvent):void {
    
    			if (e.code == "ready") {
    
    				// FlashyWrappers ready, capture in non-realtime mode(realtime set to false), with no audio
    
    				myEncoder.start(20, FWVideoEncoder.AUDIO_OFF, false);	
    
    			}
    
    			if (e.code == "started") {
    
    				addEventListener(Event.ENTER_FRAME, onFrame);
    
    			}
    
    			if (e.code == "encoded") {
    
    				// save the video
    
    				var saveFile:FileReference = new FileReference();
    
    				saveFile.save(myEncoder.getVideo(), "video.mp4");
    
    			}
    
    		}
    
    		
    
    		private function onFrame(e:Event):void {
    
    			// animate 
    
    			somethingInstance.x++;
    
    			
    
    			// capture the whole stage every frame - you can also capture individual DisplayOjects
    
    			myEncoder.capture();
    
    			frameIndex++;
    
    			if (frameIndex >= maxFrames - 1) {
    
    				// we've had enough of that, let's finish up!
    
    				removeEventListener(Event.ENTER_FRAME, onFrame);				
    
    				myEncoder.finish();
    
    			}
    
    		}							
    
    	}	
    
    }