- 浏览: 78374 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
兩ting:
说实话,我没有装成功。。。
Ubuntu上搭建Flex4的开发环境 -
chenzhou123520:
写得很好,赞一个,不过指出一个小错误引用表 2. IoSess ...
Mina服务器开发入门基础,实例讲解 -
jinx3166:
受益良多!
关于flex不能移除监听器总结 -
兩ting:
Flex太强大了,不过会的人不是很多.精通的人就更少了
Ubuntu上搭建Flex4的开发环境 -
liminjun:
你们平时开发也是用Ubuntu吗?Flex做企业项目还是有很大 ...
Ubuntu上搭建Flex4的开发环境
-
Flex提供了3个类实现与服务器端的通信:HTTPService,ReObject和WebService。另外,我们还可以根据外部中间插件来让Flex与服务器端进行通信,比如Blazeds(Lcds),Red5(FMS)流媒体服务器,PHPRPC。
HTTPService类用于超文本传输协议(HTTP)实现与服务器的通信。Flex应用程序用GET或POST请求将数据发送到服务端,并处理该请求所返回的XML或字符串。使用这个HTTPService类,可以与PHP页,ColdFusion页,JSP页,Javaservlet,RubyonRails,以及MicrosoftASP页进行通信。
RemoteObject类可以与服务器之间通过ActionScriptMessageFormat(AMF)对象进行通信。通常来说,我们也可以把Blazeds与Lcds归于这一类。RemoteObject也可以与java或coldFusion远程网关进行通信,或者通过开源项目(例如AMFPHP.SabreAMF或WebORB)与.NET和PHP进行通信。
关于Red5与FMS这两个流媒体服务器,应该说它们本身的优势在于多多媒体上,而实现Flex与服务器端相连,也是它们最基本的功能之一。
WebService类与web服务进行通信,使用基于SOAP的XML或XML,web服务通过web服务描述语言(WSDL)定义其接口。
本以为Blazeds会是个不错的选择,但是发现它对于流媒体的传送有点,让我不知道该怎么下手。虽说这个与java ee项目的直接访问,一开始让我很激动。
后来发现通过类似red5这种流媒体服务器,或许是可行的。比较有名的是FMS,Red5等,Red5是一个开源的项目,和FMS在功能上其实是类似的。所以后来还是用了他,不过对于它的搭建还是废了点劲的。
http://blog.csdn.net/zlxluofeng/article/details/5639446这个是找到的配置以及helloworld的例子。
red5启动起来后,在浏览器中输入http://localhost:5080/来访问Red5发布的网页,然后找到Demo,选择一个Demo进入,在Demo的链接地址处输入rtmp://localhost/服务器项目名,点击链接按钮,如果后天的“5”编程了绿色,说明链接成功了,如果没有反应,那就检查一下哪个地方是否设错了。
这篇是flex视频录制与播放,目前正在看这篇:http://www.iteye.com/topic/231569
- <?xml version="1.0" encoding="utf-8"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" height="312" width="328" creationComplete="init()">
- <mx:Script>
- <![CDATA[
- //预定义声明
- import mx.controls.Alert;
- import mx.events.SliderEvent;
- //创建一个基本的网络连接对象
- private var vi:Video;
- private var cam:Camera; //定义一个摄像头
- private var inNs:NetStream;
- private var outNs:NetStream;
- private var nc:NetConnection;
- //private var mic:Microphone; //定义一个麦克风
- private var _duration:Number; //视频播放时间
- private var playPosition:Number; //定义播放进度位置
- //private var soundPosition:Number; //定义声音大小控制条的位置
- private var flag:Boolean = false;
- private var lastVideoName:String = ""; //视频录制后保存的名字
- private var _url:String = "rtmp://127.0.0.1:1935/videoRec";
- public function init():void{
- setupCamera(); //初始化摄像头信息
- }
- //开始录制按扭点击
- public function clickConnect():void{
- nc = new NetConnection();
- nc.addEventListener(NetStatusEvent.NET_STATUS,nsHandler);
- nc.connect(_url); //连接red5服务器
- }
- public function nsHandler(evt:NetStatusEvent):void{
- if (evt.info.code == "NetConnection.Connect.Success"){ //如果连接成功
- playClick();
- }else{
- Alert.show("连接失败");
- }
- }
- //开始录制
- public function playClick():void{
- if(vi != null){
- vi.clear();
- vdisplay.removeChild(vi);
- vi = new Video();
- vi.width = 320;
- vi.height = 240;
- vi.attachCamera(cam);
- vdisplay.addChild(vi);
- }
- outNs = new NetStream(nc);
- outNs.attachCamera(cam); //把摄像头存入outNs
- //outNs.attachAudio(mic); //把麦克风存入outNs
- lastVideoName = "red5RecordDemo_" + Math.random()+getTimer();
- outNs.publish(lastVideoName, "record");
- startRec.enabled = false;
- stopRec.enabled = true;
- }
- //停止录制
- public function stopClick():void{
- //关闭ns与red5的连接
- outNs.close();
- vi.clear();
- vdisplay.removeChild(vi);
- //锁定开始按键使其生效
- startRec.enabled = true;
- //锁定停止按键使其失效
- stopRec.enabled = false;
- }
- //录制完以后播放
- public function playLastVideo():void{
- if(nc!=null){
- //addEventListener(Event.ENTER_FRAME,onEnterFrame);
- inNs = new NetStream(nc);
- //定义onMetaData,获取视频相关数据
- var customClient:Object = new Object();
- customClient.onMetaData = function(metadata:Object):void{
- _duration = metadata.duration; //获取视频持续时间
- t_sh.maximum = _duration;
- }
- inNs.client = customClient;
- //删除原_localVideo,便于在录制和播放视频之间切换
- vi = new Video();
- vi.width = 320;
- vi.height = 240;
- vi.attachNetStream(inNs);
- vdisplay.addChild(vi);
- inNs.play(lastVideoName+".flv");
- addEventListener(Event.ENTER_FRAME,onEnterFrame);
- }
- }
- //初始化摄像头
- public function setupCamera():void{
- //启动摄像头
- cam = Camera.getCamera();
- if(cam != null){
- cam.addEventListener(StatusEvent.STATUS,onStatusHandler);
- cam.setMode(320,240,30);
- cam.setQuality(0,70); //设置清晰度
- vi = new Video();
- vi.width = 320;
- vi.height = 240;
- vi.attachCamera(cam);
- vdisplay.addChild(vi);
- }
- // mic = Microphone.getMicrophone();
- // if(mic != null){
- // mic.setSilenceLevel(0,-1); //设置麦克风保持活动状态并持续接收集音频数据
- // mic.gain = 80; //设置麦克风声音大小
- // }
- }
- private function onStatusHandler(event:StatusEvent):void{
- if(!cam.muted){ //判断摄像头存不存在
- startRec.enabled = true;
- }else{
- Alert.show("错误:无法链接到活动摄像头!")
- }
- cam.removeEventListener(StatusEvent.STATUS,onStatusHandler);
- }
- public function thumbPress(event:SliderEvent):void{
- inNs.togglePause();
- removeEventListener(Event.ENTER_FRAME,onEnterFrame);
- }
- private function thumbChanges(event:SliderEvent):void{
- playPosition = t_sh.value; //当前播放视频进度的位置=当前播放进度条的位置
- inNs.seek(playPosition);
- addEventListener(Event.ENTER_FRAME,onEnterFrame);
- }
- private function thumbRelease(event:SliderEvent):void{ //释放mouse后执行
- inNs.seek(playPosition); //查找当前进度条位置
- inNs.togglePause();
- addEventListener(Event.ENTER_FRAME,onEnterFrame);
- }
- public function onEnterFrame(event:Event):void{
- if(_duration > 0 && inNs.time > 0){ //如果视频时间和正在播放视频的时间大于0
- t_sh.value =inNs.time;
- lbtime.text = formatTimes(inNs.time) + " / "+ formatTimes(_duration);
- }
- if(formatTimes(inNs.time)==formatTimes(_duration)){ //如果播放完毕,则关毕流,初始化摆放时间的label
- if(flag==true){ //如果是加载,就不执行 ||false代表是加载,true代表是播放结束
- removeEventListener(Event.ENTER_FRAME,onEnterFrame);
- inNs.close();
- lbtime.text = "0:00 / "+ formatTimes(_duration);
- }
- setTimeout(function():void{flag = true;},1000);
- }
- }
- //时间格式操作
- private function formatTimes(value:int):String{
- var result:String = (value % 60).toString();
- if (result.length == 1){
- result = Math.floor(value / 60).toString() + ":0" + result;
- } else {
- result = Math.floor(value / 60).toString() + ":" + result;
- }
- return result;
- }
- //声音音量控制
- // private function sound_thumbChanges(event:SliderEvent):void{
- // soundPosition = th_sound.value;
- // }
- // private function sound_thumbRelease(event:SliderEvent):void{
- // vdisplay.volume = soundPosition;
- // }
- ]]>
- </mx:Script>
- <mx:VideoDisplay x="0" y="0" width="324.5" height="240" id="vdisplay"/>
- <mx:Button x="10" y="250" label="开始录制" id="startRec" click="clickConnect()" enabled="false" />
- <mx:Button x="10" y="280" label="停止录制" width="70" id="stopRec" click="stopClick()" enabled="false" />
- <mx:Button x="253" y="268" label="播放" click="playLastVideo()" />
- <mx:HSlider x="98" y="248" width="143" id="t_sh" thumbPress="thumbPress(event)" thumbRelease="thumbRelease(event)" change="thumbChanges(event)"/>
- <mx:Label x="237" y="242" text="0:00/0:00" width="89" textAlign="center" height="18" id="lbtime"/>
- <!--mx:HSlider x="98" y="278" width="91" id="th_sound" minimum="0" maximum="1" value="{vdisplay.volume}" change="sound_thumbChanges(event)" thumbRelease="sound_thumbRelease(event)"/>
- <mx:Label x="187" y="270" text="sound" height="20" width="44" textAlign="center"/-->
- </mx:Application>
- 注:
- 1.red5做服务器,后面代码其实什么也没有,最关键的还是前端flex代码,当然还有些配置问题,相信做过red5 simple demo的朋友应该知道,在这就不一一细说了.
- 2.文章中注释地方是音频的录制,因为本机上无麦克风所以就屏掉了。如果要加上些功能,去掉注释即可。
- 3.以下是前端显示图
发表评论
-
BlazeDS的功能原理及配置实例
2013-05-01 23:26 1185BlazeDS Test Drive里面示例了主要的功能: ... -
Flex与Severlet(Jsp)通信传递中文参数乱码问题的解决
2013-02-19 15:51 723Java代码 var url ... -
Java与Flex建立Socket连接
2013-02-17 23:42 893Socket与其他的通信技术最大的不同是Socket连接在数 ... -
Ubuntu上搭建Flex4的开发环境
2013-02-15 20:58 1236原文出自:http://www.brighthub.com/ ... -
flex web应用程序生成自定义右键菜单
2013-01-25 17:13 1106屏蔽浏览器的鼠标右键,同时监听鼠标右键,当触发右键点击事件的 ... -
Flex通过HTTPService与servlet通信
2013-01-16 15:03 1031Flex通过HTTPService与servlet通信 ... -
Flex中多线程的实现(摘)
2012-12-25 19:49 1288Flex中多线程的实现 最近在网上看到一个工具 ... -
flash builder 4.7 install for windows 8
2012-12-23 01:02 1329之前在自己的win8上集成fb到myecl ... -
flex load map
2012-12-21 15:48 1010ArcGIS Server flex加载google地图 ... -
Flex与JavaScript交互调用函数
2012-12-21 09:43 893一、在JavaScript中调用Flex方法 在 Flex ... -
关于flex不能移除监听器总结
2012-12-20 00:07 1914首先看我从网上转载了一篇文章: <!--------- ... -
Flex中TitleWindow关闭按钮CloseButton的定制问题
2012-11-29 16:01 1208问题:TitleWindow的关闭 ... -
flex学习之联动下拉框实现
2012-11-27 12:55 1316Java代码 TbArea.java ... -
flex中弹出确认对话框
2012-11-22 16:30 858Xml代码 <?xml versi ... -
Flex(ActionScript3)解析XML
2012-11-20 17:21 695正文: 对于如下的一个XML文档,在flash中应该怎么读呢 ... -
MessageBroker /amf
2012-11-20 10:58 926MessageBroker 我们称他为信息经纪人,它职责就是把 ... -
Flex3 组件的定位和布局
2012-11-18 19:22 802Flex 组件的定位和布局 大多数 Flex 容器使用预定义 ... -
Flex异步令牌AsyncToken的用法介绍
2012-11-15 09:28 734什么是AsyncToken?官方文档是这样描述的:" ... -
Flex布局简介
2012-11-14 14:38 831★设置组件布局 对于所有的继承自UIComponent的组件包 ... -
Flex编程注意之直接获取某个组件的对象(this[]用法)
2012-11-14 13:09 668有这样一个需求:假如你new了一百次Button,同时这 ...
相关推荐
在本文中,我们将深入探讨如何使用FLEX技术实现视频...整个过程涉及了客户端的摄像头访问、视频录制、网络传输,以及服务器端的安装和配置等多个技术环节。理解并掌握这些知识,将有助于开发出高效、稳定的视频应用。
1. **初始化摄像头和网络连接**:在`init()`方法中调用`setupCamera()`初始化摄像头,这为后续的视频录制打下基础。同时创建了一个`NetConnection`对象用于连接到指定的RTMP服务器(例如:`rtmp://127.0.0.1:1935/...
在这个“flex多摄像头发布接收”示例中,我们将探讨如何在Flex中利用多摄像头功能进行视频流的发布与接收。 1. **Flex中的摄像头API** Flex提供了内置的`Camera`类,允许开发者访问和控制用户的摄像头设备。通过`...
源码会展示如何使用Flex API进行视频录制,包括设置摄像头和麦克风参数,开始/停止录制,以及处理录制后的FLV文件。同时,源码也会演示如何加载和播放这些FLV文件,可能涉及到VideoPlayer类或者其他自定义播放器组件...
`Camera` 和 `Microphone` 类分别用于捕获视频和音频输入,`Camera.getCamera()` 方法用于获取系统默认摄像头,`setMode` 和 `setQuality` 方法则分别用于设置摄像头的分辨率和视频质量,从而实现视频的实时录制与...
这个项目提供了一个简单示例,演示了如何利用Flex进行摄像头和音频的捕获与录制,以及如何将这些内容实时推送到FMS服务器进行广播。下面将详细介绍这个系统的工作原理和关键知识点。 1. **Flex**:Flex是Adobe推出...
在本例子中,Flex Camera组件被用来捕获和处理摄像头输入的视频流,从而实现视频录制和回放的功能。 首先,我们来深入了解一下Flex Camera组件。Camera类是Flex SDK中用于访问和控制用户计算机摄像头的关键类。通过...
而"VOD"模式则适用于点播视频服务,用户可以按需观看预先录制好的视频。 在Flex端,我们主要通过编写ActionScript代码来处理视频聊天的功能。以下是一段示例代码: 1. 首先,导入必要的事件类: ```actionscript ...
这段代码首先导入了`Camera`和`Video`类,然后通过`Camera.getCamera()`获取摄像头实例,并将其连接到`Video`对象上,最后将视频对象添加到舞台,以显示摄像头预览。 为了实现拍照功能,我们需要使用`Microphone`类...
通过以上知识点的介绍,可以看出《Flex Java Red5 完全学习手册》旨在为开发者提供一套全面的指南,涵盖了从Red5的安装到基于Flex和Java的实际应用开发,包括视频录制与播放、视频播放程序以及视频聊天等多个方面。...
总结来说,Flash ActionScript3.0发布H.264视频流涉及建立网络连接,创建NetStream对象,捕获和编码摄像头输入,以及监听流的状态。这个过程对于开发实时的在线视频应用,如视频聊天、直播或视频会议系统至关重要。
- **实时内容**:客户端通过摄像头捕捉的视频或音频,经过编码后通过服务器传输给其他客户端。 #### 四、技术要点总结 - **实时消息协议 (RTMP)**:用于客户端与服务器之间的数据交换,支持双向通信。 - **...
- **录制视频**:Red5具备录制功能,能将客户端摄像头或屏幕的视频流录制并保存至服务器。 - **设置视频保存位置**:通过配置,指定录制视频的保存路径和格式。 #### 七、利用Scope和Room管理客户端 - **Scope与...
客户端应用通常使用Flash或Flex开发,负责捕捉音视频和用户交互,而服务器端应用则在服务器上运行,管理用户连接、授权和其他逻辑。一个完整的FMS应用通常由客户端UI、客户端AS代码、媒体文件、输入设备(如摄像头或...
- **录制视频**:客户端可以将摄像头捕获的画面录制并上传至服务器。 - **设置视频保存位置**:可以在服务器上配置视频文件的保存路径。 #### 八、利用Scope与Room管理客户端 - **Scope与Room**:通过设置不同的...
20. **Back Camera**:后置摄像头,主要用于拍摄照片和录制视频。 21. **Speaker / Loud Speaker**:喇叭,播放音频输出。 22. **Earpiece speaker**:听筒,将声音传送到用户耳朵。 23. **Microphone**:麦克风...
例如,你可以创建一个简单的Java或Flex客户端,使用Red5的API将本地摄像头的视频流发布到服务器,然后其他用户可以通过订阅该流来观看。 最后,对于初学者,建议阅读Red5的官方文档和社区论坛,以便更好地理解和...