Alguns dias depois agradeci a Microsoft por me ajudar com as melhorias do Flash Player. Hoje li no site da Adobe que o Flash Player 11 tera suporte a H264 encode para transmiss?o de c?mera.
Isso mesmo, ap?s 9 anos da adi??a do codec Sorenson Spark, teremos no FP11 op??o de transmitir nossas c?meras com H264 codificado …
O sonho virou realidade
ArrayCollection XML FileReference Flex
Opa.
Resolvi criar este post pois ja havia feito isso para trabalho de faculdade, então, compratilhando o conhecimento adquirido.
Segue abaixo aplicação e os fonte com as explicações:
Clique em Listar e depois salvar.
xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundColor="white"> ? <mx:Script> [CDATA[ import mx.rpc.xml.SimpleXMLEncoder; import mx.utils.ObjectUtil; import mx.controls.Alert; import mx.collections.ArrayCollection; ? private var fr:FileReference; private static const FILE_TYPES:Array=[new FileFilter("Arquivo XML", "*.xml")]; private static const DEFAULT_FILE_NAME:String="trabalho.xml"; [Bindable] public var arr:ArrayCollection=new ArrayCollection( [{id:1, nome:"Felipe Borella", cidade:"Marau"}, {id:2, nome:"Mario Junior", cidade:"Rio de Janeiro"}, {id:3, nome:"Bãrdei Futebol Clube", cidade:"Marau"}, {id:4, nome:"Janderson Futebol Clube", cidade:"Rio de Janeiro"}]); ? private function iniciar():void { var xml:XML=objectToXML(arr.source); txt1.text=ObjectUtil.toString(arr.source); txt2.text=xml.toXMLString(); } ? ? private function objectToXML(obj:Object):XML { var qName:QName=new QName("pessoa"); var xmlDocument:XMLDocument=new XMLDocument(); var simpleXMLEncoder:SimpleXMLEncoder=new SimpleXMLEncoder(xmlDocument); var xmlNode:XMLNode=simpleXMLEncoder.encodeValue(obj, qName, xmlDocument); var xml:XML=new XML(xmlDocument.toString()); trace(xml.toXMLString()); return xml; } ? private function onLoadFileClick():void { //cria a instancia do FileReference fr=new FileReference(); //adiciona o evento para a escuta quando o arquivo for selecionado fr.addEventListener(Event.SELECT, onFileSelect); //adiciona o evento para a escuta quando o arquivo for cancelado fr.addEventListener(Event.CANCEL, onCancel); //abri somente arquivos XML fr.browse(FILE_TYPES); } ? //chamado quando o usuario seleciona o arquivo private function onFileSelect(e:Event):void { //quando o arquivo for carregado dispara a escuta da funcao onLoadComplete fr.addEventListener(Event.COMPLETE, onLoadComplete); // adiciona a escuta quando acontece erro ao carregar arquivo fr.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); //carrega o conteudo do arquivo fr.load(); } ? //Chamado quando o usuario cancela private function onCancel(e:Event):void { trace("File Browse Canceled"); fr=null; } ? //chama completa o arquivo carregado private function onLoadComplete(e:Event):void { //recupera os dados do arquivo como um byte array var data:ByteArray=fr.data; //le o arquivo como uma string e coloca em um text area txt2.text=data.readUTFBytes(data.bytesAvailable); //limpa a instancia do arquivo tipo filereference fr=null; } ? //quando ocorrer erros ao carregar private function onLoadError(e:IOErrorEvent):void { trace("Error loading file : " + e.text); } ? //chamadoquando o usuario digita no textarea private function onInputChange():void { //habilita o botao se ha texto para salvar saveButton.enabled=(txt2.text.length > 0); } ? //chamado quando o usuario clica o botao de carregar private function onSaveClick():void { //criando instancia de File Reference fr=new FileReference(); ? //escuta para falha quando foi salvo fr.addEventListener(Event.COMPLETE, onFileSave); ? //escuta para quando cancelar fr.addEventListener(Event.CANCEL, onCancel); ? //escuta para quando ha erros no salvar fr.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); ? //abre a caixa para saber onde salvar o XML usando o nome default fr.save('n'+txt2.text, DEFAULT_FILE_NAME); } ? //chamado quando o arquivo for salvo private function onFileSave(e:Event):void { trace("File Saved"); fr=null; Alert.show('Salvo com sucesso'); } ? //chamado se o usuario cancela a caixa de dialogo private function onCance2l(e:Event):void { Alert.show('Arquivo cancelado', 'Sistema'); fr=null; } ? //chamado se ocorrer erro enquanto salva o arquivo private function onSaveError(e:IOErrorEvent):void { Alert.show('Erro '+ e.text); fr=null; } ]]> mx:Script> ? <mx:DataGrid x="10" y="10" dataProvider="{arr}" width="299"> <mx:columns> <mx:DataGridColumn headerText="Nome" dataField="nome"/> <mx:DataGridColumn headerText="Cidade" dataField="cidade"/> mx:columns> mx:DataGrid> <mx:Button id="saveButton" x="412" y="130" label="Salvar" click="onSaveClick()"/> <mx:TextArea id="txt1" x="10" y="175" width="228" height="231" editable="false"/> <mx:TextArea id="txt2" x="246" y="175" width="228" height="231" editable="false"/> <mx:Button x="346" y="130" label="Listar" click="iniciar()"/> ? mx:Application>
Valeu ai!
Felipe
Marau-RS
TraceTarget – Usando a API de Log do Flex
Neste post vou explicar como usar a API de Log para mostrar os logs de execução da aplicação e também como usar o componente TraceTarget, que é muito útil para poder recuperar as informações das chamadas para o servidor, facilitando a resolução de problemas.
No Flex temos duas opções para recuperar informações ou logs de execução de uma aplicação. Uma primeira maneira e a mais utilizada, é usar a função global trace(”) para mostrar informações no console do FlashBuilder. Essa abordagem sempre requer que a aplicação esteja sendo executada em modo de debug, o que exige a instalação de um FlashPlayer versão de debug. Lógico que para o ambiente de desenvolvimento isso não é um problema, já que a instalação do FlashBuilder já inclui a versão correta do FlashPlayer versão debug. Mais e quando a aplicação está em produção, ou seja, quando não contamos com a versão de debug do FlashPlayer? Ai que entra a segunda opção.Na segunda opção vamos usar a API de Logging do Flex, que vai nos permitir delegar para uma classe a função de logar informações, seja usando o trace(”), primeira abordagem, ou até mesmo customizando a forma de apresentação. Esta abordagem também nos permite controlar o que é exibido, utilizado categorias e nível de log.
A API de Logging do Flex é muito simples de ser usada. Toda vez que queremos usa-la, estaremos envolvendo duas partes:
- O Logger, que possui os meios para enviar informações em diversos níveis (all, debug, info, warn, error e fatal) em uma determinada categoria para o Log Target. O Logger sempre irá implementar a interface ILogger, iremos utilizar a classe mx.logging.LogLogger, que já vem no SDK;
- O Log Traget, que será responsável por registrar a informação usando o trace(”) ou outra implementação. Iremos utilizar a classe mx.logging.targets.TraceTarget.
Para ficar mais fácil de entender como usar a API, vamos imaginar que queremos logar quando a aplicação é pré-inicializado, inicializado e criado.Inicialmente iremos usar a função global trace(”) e depois usar as classes de Log.
Flex tip: Understanding the SharedObject
Today the Flex tip will talk about the usage of the local SharedObject object and how to implement it to store simple data objects.
When you create a SharedObject obejct the Flash Player also creates an empty *.sol file that stores the SharedObject data limited up to 100 KB per domain. If you try to saving bigger data the user must to authorize this process through a Local Storage dialog box. The supported types are: Number, String, Boolean, XML, Date, Array and Objects. You can also store typed ActionScript instances by callling the flash.net.registerClassAlias() function in order to preserve the class type of an object when the object is encoded in AMF.
Use the SharedObject.getLocal() method for create a SharedObject object:
SharedObject.getLocal("chooseSomeName"): SharedObject |
For instance:
var sharedObject:SharedObject; sharedObject = SharedObject.getLocal("MyTextInformation"); |
You can also create multiple SharedObjects for the same Flex application:
sharedObject1 = SharedObject.getLocal("UserInformation"); sharedObject2 = SharedObject.getLocal("TravelInformation"); sharedObject3 = SharedObject.getLocal("AgreementInformation"); |
The code above will create 3 files in the Flex folder:
UserInformation.sol
TravelInformation.sol
AgreementInformation.sol
In order to store these information into a SharedObject you must use the property data:
sharedObject.data.information = "the information goes here"; |
The method flush() causes Flash Player to write the information in the respective data file. In case you don’t call it directly, the data will be persisted once you close the browser. Therefore, it’s a good practice to call it.
sharedObject.flush(); |
The clear() method clears the file and removes it from the local disk.
sharedObject.clear(); |
Check the complete example out:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="creationCompleteHandler(event)"> ? <fx:Script> [CDATA[ import mx.events.FlexEvent; ? private var sharedObject:SharedObject; ? protected function creationCompleteHandler(event:FlexEvent):void { sharedObject = SharedObject.getLocal("MyTextInformation"); if(sharedObject.size > 0) { information.text = sharedObject.data.information; currentDate.text = "Eu gravei essa data no objeto: " + sharedObject.data.currentDate; } } ? protected function saveClickHandler(event:MouseEvent):void { sharedObject.data.information = information.text; sharedObject.data.currentDate = new Date(); sharedObject.flush(); } ? ? protected function clearClickHandler(event:MouseEvent):void { sharedObject.clear(); } ? ]]> fx:Script> ? <s:layout> <s:VerticalLayout verticalAlign="middle" horizontalAlign="center"/> s:layout> ? <s:Label id="currentDate" /> <s:TextArea id="information" /> <s:HGroup> <s:Button label="Salvar informação" click="saveClickHandler(event)" /> <s:Button label="Apagar informação" click="clearClickHandler(event)" /> s:HGroup> ? s:Application> |
References:
http://livedocs.adobe.com/flex/3/html/help.html?content=lsos_5.html
Hope you enjoy it!
Como salvar “ SnapShots” de componentes do Flex na máquina do usuário.
https://github.com/mikechambers/as3corelib .
Implementação
Então vamos ao que interessa. Esta pequena função abaixo é que faz toda a mágica, é ela que gera a imagem a partir do componente AgonNewsSnapShot e o salva na maquina do usuário:
-
protected function saveSnapshot_clickHandler(event:MouseEvent):void
-
{
-
var imageBitmapData:BitmapData = ImageSnapshot.captureBitmapData(birthDaySnapshot);
-
var imgByteData:ByteArray = PNGEncoder.encode(imageBitmapData);
-
var file:FileReference = new FileReference();
-
file.save(imgByteData,“nomeDoArquivo.png”);
-
}
O componente AgonNewsSnapShot nada mais é do que um Group no qual todos os seus filhos (Labels, Background, Images, etc.) serão desenhados na imagem a ser salva, veja abaixo o exemplo de uma instância deste componente:

Vamos dividir em partes:
Primeiro é capturada a imagem Bitmap do componente AgonNewsSnapShot, que no nosso caso é o componente que será salvo como imagem no computador do usuário:
-
var imageBitmapData:BitmapData = ImageSnapshot.captureBitmapData(agonNewsSnapshot);
Usamos o PNGEncoder para converter a imagem e retornar o ByteArray da mesma:
-
var imgByteData:ByteArray = PNGEncoder.encode(imageBitmapData);
É chamado o system dialog padrão do S.O, para salvar o ByteArray na maquina do usuário no diretório selecionado por ele.
-
var file:FileReference = new FileReference();
-
file.save(imgByteData,“nomeDoArquivo.png”);
Pronto! Seu componente acaba de ser desenhado numa imagem e salvo no computador do usuário.
Bom galera esse é meu primeiro post, espero que tenham gostado, e virão mais por aí.
Abraços.
Referencias:
http://www.switchonthecode.com/tutorials/flex-tutorial-an-asynchronous-jpeg-encoder
http://ask.amoeba.co.in/save-images-from-flash-actionsctipt-3-filereference-save-jpgencoder/
Capturando imagem da webcam no Flex
Fala, galera #soudev.
Estou preparando um post ensinando como criar relatórios no iReport e exibi-los no Flex através do componente xViewer ou Java (estou avaliando ainda), mas enquanto isso, segue uma dica de como capturar imagem da webcam.
[as3]
creationComplete="initCam()"
width="358" height="212">
import flash.media.Camera; import mx.collections.*; [Bindable] [Bindable] private function initCam():void { private function Capture():void { private function Limpar():void { ]]>
import mx.controls.*;
import mx.events.*;
import mx.graphics.ImageSnapshot;
import mx.graphics.codec.JPEGEncoder;
import mx.rpc.events.ResultEvent;
private var imagemBase64:String;
private var imagemWebcam:ImageSnapshot;
var camera:Camera = Camera.getCamera();
Webcam.attachCamera( camera );
}
imagemWebcam =ImageSnapshot.captureImage( Webcam, 0, new JPEGEncoder( 100 ));
imagemBase64=ImageSnapshot.encodeImageAsBase64( imagemWebcam );
foto.source = imagemWebcam.data;
foto.graphics.clear();
}
foto.unloadAndStop(false);
}
[/as3]
Veja a aplicação funcionando:
Seu navegador não suporta iframe, lamento!
Divirta-se.
Até a próxima!
Os 45 tutoriais de Adobe Flex mais procurados
Está procurando alguns tutoriais de Adobe Flex? O blog Design Your Way separou 45 tutoriais muito bacanas para Adobe Flex, eu separei os que eu achei mais interessantes e relevantes.
Aproveite e bons estudos!
01º Flex MP3 Player
03º Criando uma galeria 3D do Flickr com Flex e Awaya3D
05º Construindo um ItemRenderer para TileList
06º Rotacionando a ViewStack em forma de Cubo
08º Cursor customizado no Flex
09º Como fazer gráficos no Flex
10º Visualizador de imagens em miniaturas no Flex
11º Jogo da Velha em Flex com Degrafa
13º Sistema de Login em Flex com PHP
14º Pegando informações de músicas do WebService da Amazon com o Adobe Flex
15º Instalando e usando o Google Maps no Flex
16º Galeria de imagens com o componente Accordion e XML no Flex
17º Interação entre Flex e Javascript
18º Múltiplos uploads com JQuery e Flex ou Flash
19º Desenvolvendo janelas em Flex ou Flash para o Adobe Photoshop
20º Criando um cliente Digg em Flex
21º Introdução ao Data Binding
23º Usando Flex, PHP e Json para modificar dados no MySQL
24º Trabalhando com o Debugger no Adobe Flex Builder
25º Criando um relógio de contagem regressiva em Flex
26º Transmitindo dados entre Flex e PHP usando Json
27º Criando um leitor de Feeds (RSS) em Flex
28º Como criar um gráfico de Bolhas em Flex
30º Criando um formulário de email em Flex com PHP
31º Criando grandes listas dinâmicas em Flex
32º Encodificador assincrono de JPEG
33º Criando seu jogo de aventura no Adobe Flex
34º Mudando o identificador de seleção de uma Lista no Flex
35º Criando um player customizado do You Tube em Adobe Flex
36º Criando uma lista de contatos usando Flex e XML
Como capturar a imagem da WebCam, e salvar no disco
Iniciamos hoje alguns artigos sobre a captura de imagem provenientes da WebCam do usuário. Inicialmente, algo simples apenas para nos ambientarmos com toda a estrutura. É válido lembrar que o Flash Player possui um bom suporte para capturar imagem/som do computador. No exemplo a seguir, iremos fazer isso de forma muito rápida:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600">
<s:creationComplete>
<![CDATA[
//cam é a instância de sua WebCam
//Geralmente surge uma mensagem de permissão ao usuário
var cam:Camera = Camera.getCamera();
// Aqui inserimos a instância da câmera no
// componente VideoDisplay
webcam.attachCamera(cam);
]]>
</s:creationComplete>
<mx:VideoDisplay id="webcam"
width="320" height="240"
top="100"
left="100"
/>
<s:Button id="salvar" label="Salvar"
top="350"
left="150">
<s:click>
<![CDATA[
import mx.graphics.ImageSnapshot;
import mx.graphics.codec.JPEGEncoder;
//Primeiro criamos a imagem Bitmap da câmera
var imageBitmapData:BitmapData;
imageBitmapData= ImageSnapshot.captureBitmapData(webcam);
//Depois transformamos essa imagem em bytecodes
var encoder:JPEGEncoder = new JPEGEncoder();
var rawBytes:ByteArray = encoder.encode(imageBitmapData);
//FileReference é usado para salvar a imagem no disco
new FileReference().save(rawBytes,"WebCam.jpg");
]]>
</s:click>
</s:Button>
</s:Application>
Veja o exemplo aqui (Botão direito do mouse para ver o código fonte)
Este exemplo rápido foi retirado dos sites: RiaCodes e Luiz Henrique Angeli
No próximo artigo iremos criar uma tela de cadastro que captura a imagem, o que está tornando muito usual hoje em dia!
ps: Renato, esta parte de gravar audio/vídeo pela web é complexa !! Eu recomendo o livro: Flex 3 + Flash Media Server 3.5, do nosso amigo Carlos Eduardo.
Autenticando usuarios no Flash Media Server com Flash Media Live Encoder
O Adobe Flash Media Live Encoder é um software gratuito que a Adobe oferece para que você possa utilizar para transmitir stream diretamente para um servidor Flash Media Server e distribuir para seu site ou aplicativo.
Dentre as opções disponiveis estão:
- High Quality Encode
- H264 / VP6 Video
- AAC / MP3 Audio
- Command-line
- Error Handling
- VITC Timecode
- Pre-processing
- Live Metadata
- Local Archive
- DVR Support
Com suporte aos mais variados dispositivos de captura de video como Webcam, SDI, Composite, Component, Firewire.
Há casos em que você necessita restringir o acesso ao Flash Media Server atraves do Flash Media Live Encoder, para isso a Adobe criou um plugin que é instalado no seu servidor Flash Media Server, o Flash Media Server Authentication Add-in.
Para instalar esse plugin, siga os seguintes passos:
Baixe e instale o Flash Media Server Authentication Add-in
https://www.adobe.com/cfusion/entitlement/index.cfm?e=fmle3
Em seguida use o prompt de comando e vá até o diretorio conf do Flash Media Server
C:Arquivos de programasAdobeFlash Media Server 3.5conf
Para criar um novo usuário basta usar o comando:
users add -u user -p 123
Onde user é o login e 123 é a senha
Perceba que no diretorio C:Arquivos de programasAdobeFlash Media Server 3.5conf agora existem mais dois arquivos, users.exe e users.dat, os logins e senhas são salvos em users.dat
Agora basta abrir o Flash Media Live Encoder e tentar conectar, ele pedirá login e senha.
Uma das vantagens do Flash Media Live Encoder é que ele reconhece mais dispositivos de captura que o Flash Player.
Mais:
http://www.adobe.com/products/flashmediaserver/flashmediaencoder/
http://www.adobe.com/support/documentation/en/flashmedialiveencoder/
Translations:
English Version
Características – Microsoft Silverlight 4 & Adobe Flex 4
INTRODUÇÃO
Boa noite Galera!
Hoje gostaria de compartilhar com vocês, uma postagem com as principais características, das mais comentadas tecnologias de desenvolvimento de aplicações RIA(Rich Internet Applications) do mercado, o Microsoft Silverlight e o Adobe Flex.
São ao todo 20 características destacadas, sendo que elas foram aplicadas nas últimas versões das plataformas destacadas.
Gostaria da opinião de vocês, meus amigos leitores e desenvolvedores, até mesmo para que possam avaliar o conteúdo, caso eu tenha descrito algo errado. Lembrando que a intenção desta postagem, não é denegrir nenhuma tecnologia, mas sim, apresentar suas características!
Abaixo, segue a tabela:
| Tecnologias | Adobe Flex 4 | Microsoft Silverlight 4 |
| Runtime | - Flash Player 10.1 | - Silverlight 4.0.5 |
| Aplicações Multi-Plataforma |
- Windows - MacOS - Linux - Solaris - Google Android |
- Windows - MacOS - Windows Phone 7 - XBox 360 - Microsoft Surface |
| Animação – Timeline | - Frame-by-Frame | - Baseada em tempo - Frame-by-Frame |
| 3D | - Baseado em simulação de perspectiva X, Y e Z. |
- Baseado em simulação de perspectiva X, Y e Z. |
| Aplicações baseadas em Desktop 2.0 |
- Adobe Air | - Silverlight OOB |
| Modelo de programação | - Orientado a Objetos | - Orientado a Objetos |
| Linguagem de interfaces | - Baseado em XML, o MXML | - Baseado em XML, o XAML |
| Linguagem base – Client | - ActionScript 3 |
- C# |
| Linguagens utilizadas com frequência – Server/Side | - Java - PHP - ColdFusion - C# |
- C# |
| Arquivo executável binário | - Arquivo SWF |
- Arquivo XAP |
| Característica da plataforma | - Data Binding - Event Handling - Layout - Navigation - Controls - DataGrid - Data Visualization - Styling - Câmera e Microfone - Suporte Offiline DRM - Peer-assisted P2P - Print Suport - Right-to-Left Text - HTML hosting - Aceleração de Hardware |
- Data Binding |
| Ferramentas de desenvolvimento | - Flash Builder 4 | - Microsoft Visual Studio 2010 |
| Ferramentas de design |
- Adobe Flash CS5 |
- Microsoft Expression Blend 4 - Microsoft Expression Design 4 |
| Integração com outras ferramentas de design |
- Adobe PhotoShop CS5 - Adobe Illustrator CS5 - Adobe Fireworks CS5 |
- Adobe PhotoShop CS5 - Adobe Illustrator CS5 |
| Linguagens baseadas em estilos |
- CSS | - XAML |
| Suporte a Imagens | - Todos os formatos | - PNG - JPG |
| Acesso remoto | - HTTP - Socket - Web Services - Remoting |
- HTTP - Socket - Web Services - WCF |
| Data Services | - Flash Remoting - Bynary e Soap Services |
- WCF Services - Bynary e Soap Services |
| Manipulação de vídeo | - Tipos de arquivos(FLV, F4V) - Tool: Adobe Media Encoder - Suporte a DRM |
- Tipos de arquivos(WMV, F4V) - Tool: Expression Media Encoder - Suporte a DRM |
| Distribuição de vídeo | -Adobe Flash Media Server | -Microsoft IIS Media Services |
Obrigado pessoal!
Abs.
Robson Fernandes





