Introducing Flash Player 11.3 – AIR 3.3 beta by Thibault Imbert

Flash Player 11.3/AIR 3.3Update 07/06/2012 : Flash Player 11.3/AIR 3.3 has now shipped.

I am excited to announce the public beta of Flash Player 11.3 and AIR 3.3.

This release includes a lot of little improvements that we included to either improve your workflow today for mobile development or simply add the things you always wondered why it was not there.

We also added key features like fullscreen text input to enable better gaming experiences for you developers leveraging fullscreen capabilities.

As we mentioned at Max last year, we have in the team an initiative called JDI (Just do it) where the goal is to add those little things which makes your life easier as a developer.

It is generally a very little feature, in the team, we like to say "Tiny APIs, big impact", cause it just makes things easier and better.

Here is below the list of improvements/features added to this release:

  • Frame-label events
To make things easier when working with timeline assets, you can now register a listener to a FrameLabel object.
Example:
var frame:FrameLabel = mc.currentLabels[0];

frame.addEventListener(Event.FRAME_LABEL, onFrame);
  • Silent auto update for Mac
We introduced this feature on Windows in Flash Player 11.2. Now, Flash Player 11.3 also gets silent auto update on MacOS. Faster penetration now on both platforms.
  • Audio latency improvements

This enhancement reduces the latency for Sound.play method and changes to volume and pan on SoundTransform.
The latency of SampleDataEvent.SAMPLE_DATA event should also be reduced considerably. For an input sample size of 2048, the latency should be optimal.

  • Reduced latency for un-buffered audio playback
The goal of this feature is to reduce latency for live un-buffered audio playback for all supported codecs.
The feature must be explicitly enabled. Application must use un-buffered playback NetStream.bufferTime = 0 and set NetStream.useJitterBuffer = true to enable the feature.
  • Fullscreen text input
Yes! You read it right. Enable full support for all keyboard keys available to an embedded SWF running in full screen mode.
To enable it, two things. First, enable it through the new HTML parameter:
<param name=”allowFullScreenInteractive” value=”true”/>

Which is then reflected through the new stage property:

trace(stage.allowsFullScreenInteractive);

To trigger it, just use the new StageDisplayState.FULL_SCREEN_INTERACTIVE constant:

stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
  • Texture streaming for Stage3D
You can now upload the mip-levels in the order you want, from the lowest definition to the highest, you can then now enable progressive texture loading with Stage3D.
Example:
[Embed( source = "MipLevel9.jpg" )]
var MipLevel9:Class;
var context3D:Context3D;
var texture:Texture;

stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, createdHandler);

function createdHandler(e:Event)
{
context3D = stage.stage3Ds[0].context3D;
//set streaming levels to 9, a 1x1 mip level for a complete texture size of 512 (Mip level 0 =512, Mip level 9 = 1)
texture = context3D.createTexture(512,512,Context3DTextureFormat.BGRA,false, 9);
var mip9:Bitmap = new MipLevel9();
texture.uploadFromBitmapData(mip9.bitmapData,9);
}
  • Drivers gating hardware acceleration relaxed to 2006 (was 2009 in 11, 2008 in 11.2)
In previous releases, we gated support to drivers older than January 1, 2008. In the future release, we will be changing the gating to apply to drivers older than January 1, 2006.
This Flash Player 11.3/AIR 3.3 beta integrates this change, the feature is enabled in the pre-released builds to gather early feedback.
Please note that this feature will be removed before the final release and added to a next release.
  • New driverInfo details
We expose more details now through context3D.driverInfo to detect why Stage3D fallback to software.
HW acceleration checkbox disabled? Drivers too old? Blacklisted chipset? We tell you.
In Flash Player 11.3 and AIR 3.3, the driverInfo string can now return the following values depending on the scenario:
  • "Software Hw_disabled=userDisabled"

HW acceleration setting checkbox in Settings UI is not checked so HW acceleration fail and SW rendering is used for Stage3D.

  • "Software Hw_disabled=oldDriver"

HW graphics driver is blacklisted due to known issue so SW rendering is used for Stage3D. It will be fixed by updating driver.

  • "Software Hw_disabled=unavailable"

It fail to use HW due to driver's capability or blacklisted in general or any failure of HW graphics initialization so SW rendering is used for Stage3D

  • "Software Hw_disabled=explicit"

Content request a software rendering explicitly through requestContext3D so SW rendering is used for Stage3D.

In the next beta, those Strings will be available as constants of a new class, to simplify your detection logic.

  • MouseEvent.RELEASE_OUTSIDE
The famous event which got removed in AS3, is back, much simpler than all the AS3 workarounds to emulate it.
Example :
s.addEventListener(MouseEvent.RELEASE_OUTSIDE, onReleaseOutsideHandler);
  • ApplicationDomain.getQualifiedDefinitionNames()
You remember Application.getDefinition()? The limitation is that you had to know ahead of time the name of the class definition you wanted to extract.
Now applicationDomain.getQualifiedDefinitionNames() extracts all of the classes available in a SWF, perfect for SWF introspection and runtime loaded assets. SWFExplorer non longer needed!
Example :
var definitions:Vector.<String> = this.loaderInfo.applicationDomain.getQualifiedDefinitionNames();
  • BitmapData.drawWithQuality
In the past, the BitmapData.draw() API did not accept a quality parameter, you had to change the stage quality to affect the rasterization, not anymore with BitmapData.drawWithQuality() which obviously takes a quality parameter.
Example :
bitmapData.drawWithQuality(sprite, sprite.transform.matrix, null, null, null, null, StageQuality.BEST);
  • Native Bitmap compression : BitmapData.encode()
Support for native JPEG/PNG/JPEG-XR compression.
Example :
var bitmapData:BitmapData = new BitmapData(640,480,false,0x00FF00);

var byteArray:ByteArray = new ByteArray();

bitmapData.encode(bitmapData.rect, new JPEGEncoderOptions(), byteArray);
And some other nice improvements :
  • Background behavior for AIR
  • Android 4.0 Stylus Support
  • USB Debugging
  • Landscape mobile
  • Simulator support for iOS

As usual, download everything on Adobe Labs. Let us know if you get any bugs. Thanks!

Comments (26)

  1. Tyler wrote::

    Some exciting improvements here! In regards to dynamic audio latency, should we expect to see all three latency options (2048, 4096, and 8192) start playback faster? This has always been a really tricky area. My applications rely on having the user record mic audio along to a dynamically generated accompaniment track (think Karaoke or Guitar Hero games), and I have to match the recorded audio to the dynamic audio in timing in order to do pitch detection and create synchronized mixes. If there was any way we could get some sort of time stamp as to when the dynamic audio will actually sound – either as a property on the SampleDataEvent or possibly as an event that gets fired – that would be a lifesaver.

    Am I correct in understanding that these changes in 11.3 don’t involve any code changes on my part to implement? The latency is just lower with the same swf built with prior versions? Or do I need to rebuild and target this player to see the change?

    Friday, April 6, 2012 at 2:11 am #
  2. Anonymous wrote::

    When I read about native bitmap compression a few days ago, I felt happy, now I can forget about using external libraries for these common tasks, but reading about getQualifiedDefinitionNames() made my day. I don’t know if I’ll need it any time soon, but reflection in Flash should be heavily improved. Not being able to inspect and invoke private members is sometimes a pain, specially in cases where the Flash Professional compiler hides some things from the developer.
    I love all the improvements, but most were already known for quite some time.
    I hope future releases will be even better than this one.

    Friday, April 6, 2012 at 2:46 am #
  3. Szymon Brych wrote::

    Glad you’re back :)

    Monday, April 23, 2012 at 8:57 pm #
  4. ferber wrote::

    Content de voir votre site de nouveau opérationnel.

    Monday, April 23, 2012 at 9:36 pm #
  5. Pascal wrote::

    Welcome back !

    Tuesday, April 24, 2012 at 3:47 pm #
  6. Mahron wrote::

    great new features ! If you could just put a remember option for the allow fullscreen option it would be nice.

    Tuesday, April 24, 2012 at 9:49 pm #
  7. Salut Thibault,

    Merci pour le post et content que le site soit de nouveau up & running.

    J’ai essayé d’encoder un BitmapData avec encode, mais j’obtiens l’erreur suivante :

    VerifyError: Error #1014: Class flash.display::JPEGEncoderOptions could not be found.

    Si je commente cette ligne, la compilation en AIR 3.3 se déroule bien (FlashDevelop).
    J’ai comme param “-swf-version=13″ car en 16, j’ai une erreur pré-compilation qui dit “[Fault] exception, information=Error: Error #3709: The depthAndStencil flag in the application descriptor must match the enableDepthAndStencil Boolean passed to configureBackBuffer on the Context3D object.”

    Merci !

    Wednesday, April 25, 2012 at 12:02 pm #
  8. Thibault Imbert wrote::

    Salut Florian,

    Il faut que tu utilises swf-version=16 pour acceder aux nouvelles API. Pour ton erreur, en effet on a changé la maniere dont le stencil buffer doit etre specifié. Pour configurer proprement, tu dois indiquer dans ton application descriptor (.xml) si tu utilises le stencil buffer ou non. Donc dans ton cas, vu que tu sembles l’utiliser, indique le dans le descriptor:

    https://gist.github.com/2489334

    Et voila :)

    Thibault

    Wednesday, April 25, 2012 at 2:21 pm #
  9. Polaco wrote::

    Hell yeah! happy to know that full text input is now supported in fullscreen. The bad thing is that community has been asking for it for around 5 years! I wondered if there will be some improvement for AS3 language and AVM like support for abstract classes, abstract methods, thread handling and alike.
    Thanks for your hard work!

    Thursday, April 26, 2012 at 4:55 pm #
  10. Szymon Brych wrote::

    Hi Polaco, this may cover some of your questions:

    http://www.adobe.com/devnet/flashplatform/whitepapers/roadmap.html

    Thursday, April 26, 2012 at 6:31 pm #
  11. Polaco wrote::

    Thanks Szymon! That doc promises a very exciting future for Flash, really anxious to see it’s evolution.

    Thursday, April 26, 2012 at 7:10 pm #
  12. David Mouton wrote::

    Excellent :)
    Quelles sont les performances du nouvel encoder JPEG fasse à la version de Mateusz Malczak (lib c++ compilée via alchemy ) ?
    En tout cas c’est du bon boulot.
    Toujours pas de support de son 5.1 de prévue ?
    Parceque la stereo ça va un moment :)

    Saturday, April 28, 2012 at 8:57 am #
  13. Pieter Bonne wrote::

    I can’t get hardware rendering to work, although I think it should work. GPU is Intel GMA X3100 (macbook from end 2008).

    I get driverInfo == “Software Hw_disabled=explicit (Direct)”

    I don’t explicitly ask for software mode when calling requestContext3D(). I’m also not sure what the “(Direct)” suffix means?

    Saturday, April 28, 2012 at 3:52 pm #
  14. jloa wrote::

    Yahooooo! Finally we’ve got back the MouseEvent.RELEASE_OUTSIDE THANK YOU!

    Sunday, April 29, 2012 at 6:20 pm #
  15. Salt wrote::

    Great to have MouseEvent.RELEASE_OUTSIDE, but I wonder could the same be added for right and middle mouse buttons now that we have access to them too?

    Tuesday, May 8, 2012 at 12:14 am #
  16. Bjørn Rustberggard wrote::

    Thibault, we have been doing extensive testing on H264 playback in both FLV and MP4 containers on Android AIR 3.2 / 3.3 (beta 3) for ICS. The process is documented here:
    https://bugbase.adobe.com/index.cfm?event=bug&id=3164920

    Summarized:
    ==========
    Android AIR 3.2 / 3.3 (beta 3) H264 playback (both in FLV and MP4 container) on Android 4 is severely broken.

    Video object (not StageVideo) with H264 content is:

    1) not playing videos consistently (“NetStream.Play.Stop” is triggered to early) so the movie stops before the end is reached. This also happens on Android 3. Note! The bug is not in AIR 3.1.

    2) not supporting filters (video frame is being scaled). Only Android 4 (ICS).

    3) not supporting seeking when video is paused (video frame is not being updated). Only Android 4 (ICS).

    For most practical video playback situations, H264 playback on ICS is broken for Android AIR 3.2 and AIR 3.3 (tested up to beta 3).

    Is there any attention from Adobe on this? New functionality doesn’t help much if you break critial core features.

    Thursday, May 10, 2012 at 6:21 pm #
  17. Amer wrote::

    Can we take bitmapdata snap shot form StageVideo with AIR 3.3 ?

    Friday, June 8, 2012 at 11:37 pm #
  18. @Seraf_NSS wrote::

    @Amer you can use stage3D>context>drawToBitmapData
    stage3D.context3D.drawToBitmapData(mySnap);

    Saturday, June 9, 2012 at 8:36 am #
  19. stankle wrote::

    drawWithQuality()is great, thank you! !!!!!!

    Saturday, June 9, 2012 at 9:35 am #
  20. FumioNonaka wrote::

    In the example of “Texture streaming for Stage3D”, the statement below may be needed after line 06.

    stage.stage3Ds[0].requestContext3D(Context3DRenderMode.AUTO);

    See: http://helpx.adobe.com/flash-player/release-note/developer-relese-notes-11_3.html#main_feature_usage

    Saturday, June 9, 2012 at 12:16 pm #
  21. Gary Paluk wrote::

    Oooh, missed this by a couple of days. Thanks Thibault, this means some fun for me this w/e especially with progressive textures for Stage3D, that will be incorporated into Zest3D. Both drawWithQuality and native bitmap encoding will also be really nice for Blib2D. Good to see some posts about threading floating around the Twittersphere too ;)

    Saturday, June 9, 2012 at 1:29 pm #
  22. Lejdi Koci wrote::

    Very good article, but i have a question. Flash Player 11.3 is out and actionscript workers are not yet usable… when do you think we will be able to access the API for them?

    Monday, June 25, 2012 at 6:21 pm #
  23. tlecoz wrote::

    Hello Thibault !

    Merci pour toutes ces améliorations ! Je n’avais pas vu ce post et j’ai vraiment hâte de tester les nouvelles perfs de Sound.play sur mobile :)

    “getQualifiedDefinitionNames”, “frameLabelEvent” et le stream de texture sont inattendu mais je suis ravi qu’ils existent. :)

    Dans le même genre de petits changements, serait il possible, dans une version future, de modifier la classe PerspectiveProjection pour la rendre compatible avec Stage3D , genre un PerspectiveProjection.getStage3dMatrix() ou un boolean en dernier paramètre du constructeur indiquant si on travaille ou non avec Stage3D.
    Ce serait plus naturel pour un flasheur que d’utiliser la classe PerspectiveMatrix3D dont le repère est inversé par rapport au fonctionnement de Flash.

    Thursday, July 12, 2012 at 4:52 pm #
  24. Raoul wrote::

    How do we can get back our image after Bitmapdata.encode ? could you show us any decode example ? Merci d’avance :)

    Tuesday, July 31, 2012 at 4:15 pm #
  25. arash hosseini wrote::

    Hi , i have a question about ApplicationDomain.getQualifiedDefinitionNames() i use this with the combination of the getDefinitionByName but every time i got this error :
    Error #1065: Variable …. is not defined.

    i use your swfexplorer and i got this error too

    :(

    Wednesday, August 1, 2012 at 9:27 am #
  26. Bruce wrote::

    Bonjour Thibault, je suis désolé si je suis hors sujet, mais ça fait 3 jours que je galère sur http://blog.magicalhobo.com/2011/10/01/air-3-native-extension-example-pentablet/ j’ai dans FB 4.6: VerifyError: Error #1014: Class com.magicalhobo.utils::PenTablet could not be found.

    at runtime::ContentPlayer/loadInitialContent()
    at runtime::ContentPlayer/playRawContent()
    at runtime::ContentPlayer/playContent()
    at runtime::AppRunner/run()
    at ADLAppEntry/run()
    at global/runtime::ADLEntry()
    ça arrive quand je recompile le tout…
    merci pour ton temps, si tu en as

    Friday, November 9, 2012 at 5:27 am #

Trackbacks/Pingbacks (6)

  1. Introducing SWFExplorer 0.7 - ByteArray.org on Monday, April 30, 2012 at 6:08 pm

    [...] 0.7 (refactoring). Update 03/30/12 : Flash Player 11.3 and AIR 3.3 now integrates natively getQualifiedDefinitionNames(). Post a comment | Trackback [...]

     
  2. [...] http://www.bytearray.org/?p=3705 [...]

     
  3. [...] sneak peek: Concurrency with ActionScript Workers by Thibault Imbert This week we just shipped Flash Player 11.3/AIR 3.3 with lots of cool features for mobile and desktop. But, we are already finalizing the last details [...]

     
  4. [...] sneak peek: Concurrency with ActionScript Workers by Thibault Imbert This week we just shipped Flash Player 11.3/AIR 3.3 with lots of cool features for mobile and desktop. But, we are already finalizing the last details [...]

     
  5. [CS6] Schlechte Performance bei Flash Player 11 - Flashforum on Sunday, January 6, 2013 at 1:08 am

    [...] [...]

     
  6. Flash Player 11.3とAIR 3.3が正式公開 « Education News & APP on Thursday, February 28, 2013 at 6:12 pm

    [...] Adobe Flash Player 11.3とAIR 3.3が正式に公開されました。最新のバージョンは11.3.300.257です。新たな機能はAdobeのThibault Imbert氏がByteArray.org「Introducing Flash Player 11.3 – AIR 3.3 beta」で紹介されています。その内容をまとめました(スクリプトはこの記事から引用しています)。 [...]