<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="750" height="600" creationComplete="initApp()">
<mx:Style>
Alert{font-size:12px;}
</mx:Style>
<mx:Script>
<![CDATA[
import mx.events.CloseEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
private static const DEFAULT_CAMERA_WIDTH:Number = 260; //摄像头显示宽度
private static const DEFAULT_CAMERA_HEIGHT:Number = 220; //摄像头显示高度
// private static const DEFAULT_WEBSERVICE_URL:String = "http://localhost:1888/Web/TestWebService.asmx?WSDL"; //WebService地址
private var m_camera:Camera; //定义一个摄像头
private var m_localVideo:Video; //定义一个本地视频
private var m_pictureBitmapData:BitmapData //定义视频截图
[Bindable]
private var m_pictureData:String;
private function initApp():void
{
t_btn_Shooting.enabled = false;
t_ban_Save.enabled = false;
initCamera();
}
//初始化摄像头
private function initCamera():void
{
m_camera = Camera.getCamera();
if(m_camera != null)
{
m_camera.addEventListener(StatusEvent.STATUS,__onCameraStatusHandler);
m_camera.setMode(DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT,30);
m_localVideo = new Video();
m_localVideo.width = DEFAULT_CAMERA_WIDTH;
m_localVideo.height = DEFAULT_CAMERA_HEIGHT;
m_localVideo.attachCamera(m_camera);
t_vd_Video.addChild(m_localVideo);
}
else
{
Alert.show("没有找到摄像头,是否重新查找。","提示:",Alert.OK|Alert.NO,this,__InitCamera);
return;
}
}
//拍照按钮事件,进行视频截图
private function SnapshotPicture():void
{
m_pictureBitmapData = new BitmapData(DEFAULT_CAMERA_WIDTH,DEFAULT_CAMERA_HEIGHT);
m_pictureBitmapData.draw(t_vd_Video,new Matrix());
var m_pictureBitmap:Bitmap = new Bitmap(m_pictureBitmapData);
t_img_Picture.addChild(m_pictureBitmap);
t_panel_Picture.visible = true;
t_ban_Save.enabled = true;
}
//保存按钮事件,保存视频截图
//通过WebService保存
// private function SavePicture():void
// {
// m_pictureData = "";
// for(var i:int = 0; i < DEFAULT_CAMERA_WIDTH; i++)
// {
// for(var j:int = 0; j < DEFAULT_CAMERA_HEIGHT; j++)
// {
// if(m_pictureData.length > 0)
// {
// m_pictureData += "," + m_pictureBitmapData.getPixel32(i,j).toString();
// }
// else
// {
// m_pictureData = m_pictureBitmapData.getPixel32(i,j).toString();
// }
// }
// }
// // t_ws_SavePicture.SavePicture.send();
// }
//检测摄像头权限事件
private function __onCameraStatusHandler(event:StatusEvent):void
{
if(!m_camera.muted)
{
t_btn_Shooting.enabled = true;
}
else
{
Alert.show("无法链接到活动摄像头,是否重新检测。","提示:",Alert.OK|Alert.NO,this,__InitCamera);
}
m_camera.removeEventListener(StatusEvent.STATUS,__onCameraStatusHandler);
}
//当摄像头不存在,或连接不正常时重新获取
private function __InitCamera(event:CloseEvent):void
{
if(event.detail == Alert.OK)
{
initApp();
}
}
//WebService保存图片成功事件
private function __onSavePictureResult(event:ResultEvent):void
{
//trace(event.result);
if(event.result.toString() == "保存成功")
{
Alert.show(event.result.toString(),"提示",Alert.OK,this,__onAlertCloseHandler);
}
else
{
Alert.show(event.result.toString(),"提示",Alert.OK);
}
}
//连接WebService失败事件
private function __onSavePictureFault(event:FaultEvent):void
{
//Alert.show(event.fault.toString(),"提示",Alert.OK);
Alert.show("连接WebService失败。","提示",Alert.OK);
}
//保存图片成功后的弹出窗口确认事件
private function __onAlertCloseHandler(event:CloseEvent):void
{
if(event.detail == Alert.OK)
{
//trace("转向页面");
}
}
public function SavePicture(){
var params:URLVariables = new URLVariables();
m_pictureData = "";
for(var i:int = 0; i < DEFAULT_CAMERA_WIDTH; i++)
{
for(var j:int = 0; j < DEFAULT_CAMERA_HEIGHT; j++)
{
if(m_pictureData.length > 0)
{
m_pictureData += "," + m_pictureBitmapData.getPixel32(i,j).toString();
}
else
{
m_pictureData = m_pictureBitmapData.getPixel32(i,j).toString();
}
}
}
params.width = DEFAULT_CAMERA_WIDTH;
params.height = DEFAULT_CAMERA_HEIGHT;
params.bitmap_data = m_pictureData;
savePictureService.url = "http://localhost:8088/archive/savepicturesrv";
savePictureService.send(params);
}
]]>
</mx:Script>
<mx:HTTPService showBusyCursor="true" id="savePictureService" method="POST" resultFormat="xml"
fault="__onSavePictureFault(event)" result="__onSavePictureResult(event)"/>
<mx:Panel x="10" y="10" width="280" height="300" layout="absolute" title="视频拍照" fontSize="12">
<mx:VideoDisplay id="t_vd_Video" width="260" height="220"/>
<mx:ControlBar horizontalAlign="right">
<mx:Button id="t_btn_Shooting" label="拍照" click="SnapshotPicture()"/>
</mx:ControlBar>
</mx:Panel>
<mx:Panel id="t_panel_Picture" x="298" y="10" width="280" height="300" layout="absolute" title="拍照图片" fontSize="12" visible="false">
<mx:Image id="t_img_Picture" x="0" y="0" width="260" height="220"/>
<mx:ControlBar horizontalAlign="right">
<mx:Button id="t_ban_Save" label="保存" click="SavePicture()" />
</mx:ControlBar>
</mx:Panel>
</mx:Application>
分享到:
相关推荐
在本文中,我们将深入探讨如何使用FLEX技术实现视频摄像头录制,并将录制的视频上传到FMS(Flash Media Server)服务器。首先,我们先来理解一下FLEX是什么以及它的核心功能。 FLEX全称为Flex Framework,是Adobe...
在这个“flex多摄像头发布接收”示例中,我们将探讨如何在Flex中利用多摄像头功能进行视频流的发布与接收。 1. **Flex中的摄像头API** Flex提供了内置的`Camera`类,允许开发者访问和控制用户的摄像头设备。通过`...
在这个代码中,我们首先获取摄像头实例,然后在用户点击"Start Camera"按钮时,我们将摄像头连接到`videoDisplay`组件。如果未找到摄像头,程序会输出一条错误消息。 此外,Flex还提供了Microphone类,可以用来访问...
本文将详细阐述如何使用Flex连接到FMS,并实现视频发送功能。 **一、准备工作** 1. **开发工具**: 首先,你需要安装Flash MX Authoring工具,这是Flex的基础。同时,你也需要Flash MX Communication Server,它是...
此外,还可以使用 `attachCamera()` 和 `attachNetStream()` 方法来连接摄像头或网络流。 #### 三、Flex Video 的核心属性详解 ##### 1. accessibilityProperties: AccessibilityProperties 该属性用于定义 Flex ...
此外,`Camera` 和 `Microphone` 类分别用于捕获视频和音频输入,`Camera.getCamera()` 方法用于获取系统默认摄像头,`setMode` 和 `setQuality` 方法则分别用于设置摄像头的分辨率和视频质量,从而实现视频的实时...
1. **初始化摄像头和网络连接**:在`init()`方法中调用`setupCamera()`初始化摄像头,这为后续的视频录制打下基础。同时创建了一个`NetConnection`对象用于连接到指定的RTMP服务器(例如:`rtmp://127.0.0.1:1935/...
6. **移动开发特定功能**:由于目标是Android应用,所以课程可能会涉及如何利用Flex实现特定的移动功能,如访问手机硬件特性(摄像头、GPS)、使用本地存储、处理设备方向变化等。 7. **Adobe AIR for Android**:...
3. 实现视频捕捉:在Flex应用中,使用Camera类捕获用户的摄像头视频,用户可以选择开启或关闭摄像头。 4. 实现音频捕捉:通过Microphone类获取用户的麦克风声音,同时可以处理音频增益和静音等设置。 5. 建立RTMP...
这使得开发者能够利用Android的硬件功能,如GPS、摄像头、蓝牙等,同时保持跨平台的Flex代码。 七、调试和测试 Flash Builder提供了一套完整的调试工具,包括源码级调试、性能分析等。你可以直接在模拟器或连接的...
4. **处理Android特定功能**:通过ActionScript调用Android Native API,实现访问硬件特性,如摄像头、GPS等。 5. **测试与调试**:使用模拟器或连接的Android设备进行测试,确保应用在不同设备上的兼容性和性能。 ...
- Flex 支持跨平台部署,但在不同操作系统上的摄像头驱动可能不同,需测试兼容性。 - Java 后端则通常具有良好的跨平台特性。 - **错误处理**: - Flex 和 Java 应用中都需要实现异常处理机制,确保程序在遇到...
在本文中,我们将深入探讨Flex中的关键概念,主要聚焦于摄像头操作、视频播放、自动弹出框、屏幕分辨率获取以及XML文件的读取。Flex是一个用于构建富互联网应用(RIA)的开发框架,它允许开发者创建具有交互性、动态...
这个项目提供了一个简单示例,演示了如何利用Flex进行摄像头和音频的捕获与录制,以及如何将这些内容实时推送到FMS服务器进行广播。下面将详细介绍这个系统的工作原理和关键知识点。 1. **Flex**:Flex是Adobe推出...
Flex应用可以通过建立RTMP连接,实现实时的视频流通信。 1. **视频捕捉与编码**:在Flex中,我们可以使用Camera类获取用户的摄像头视频流,并通过Video对象显示。Camera类提供了调整摄像头设置(如分辨率、帧率)的...
通过Flash Player,Flex可以捕获用户的摄像头和麦克风输入,实现实时的视频和音频传输。此外,它还能够对视频和音频数据进行编码和解码,确保数据在网络中的高效传输。 2. **Socket通信**:为了实现多用户间的实时...
Flex Mobile M-JPEG 是一种技术实现,用于在Adobe Flex移动应用程序中播放来自IP摄像头的M-JPEG(Motion JPEG)格式的视频流。Flex是基于ActionScript 3的开放源码框架,常用于创建富互联网应用(RIA)以及移动应用...
8. **错误处理**:在开发过程中,确保添加适当的错误处理代码,以便在摄像头未连接、权限问题或其他异常情况时向用户提供反馈。 9. **多设备兼容性**:虽然Flex主要用于桌面应用,但也可以通过Adobe AIR运行在移动...
开发者可以通过 ActionScript 实现业务逻辑,与移动设备的硬件特性如摄像头、GPS 等进行交互。 五、移动项目的创建与配置 在 Flash Builder 中,你可以选择“Mobile Project”模板来创建一个新的移动应用项目。在...