`
wwww2
  • 浏览: 14041 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

FMS3.5 flash视频聊天室(远程共享,录制,验证,播放,加缓冲)

    博客分类:
  • FMS
FMS 
阅读更多

我采用的是在fms的applications文件夹下赋值live文件夹改名为videoChat

配置fms.ini增加程序路径

配置videoChat里Application.xml文件

<StreamManager>
  <VirtualDirectory>
              <!-- Specifies application specific virtual directory mapping for streams.   -->
   <Streams>/;${VIDEOCHAT_DIR}</Streams>
  </VirtualDirectory>

 </StreamManager>

 

 

提个录制的问题:

根据网上资料:main.far中都改成yes,true但是反而没有权限了。。求助各位大侠!!都倒腾好几天了。。

另外问个小问题:写其他录制例子的时候不会自动生成streams文件夹。。特此求助,请各位大侠指点一二!

 

代码贴出:

import flash.text.TextFormat;
import flash.display.*;
import flash.text.*;
import flash.net.*;
import flash.events.*;
import flash.errors.*;
import flash.system.*;
import fl.managers.StyleManager;
import fl.controls.List;
import fl.data.DataProvider;
import fl.controls.TextArea;

//安全域
Security.allowDomain("*");
Security.allowInsecureDomain("*");
//定义变量
var fmsPath:String;
var myNC:NetConnection;
var myNS:NetStream;
var myNS2:NetStream;;//分支视频流 专门用来录像 
var time:String = null;//定义时间寄存器
var userName:String;
var msg:String;
var peopleArray:Array;
var mySO:SharedObject;
var tmpName:String;
var now:Date;
var mySubNS:NetStream;
var myCam:Camera;
var myMic:Microphone;

//组件样式
var myTF:TextFormat=new TextFormat();
myTF.size = 12;
StyleManager.setStyle("textFormat",myTF);
userName = "guest" + int(Math.random() * 10000);
userName1.text = userName;
userName2.text = "所有人";
now=new Date();
peopleList.addEventListener(MouseEvent.CLICK,selectChatTo);
peopleList.addEventListener(MouseEvent.DOUBLE_CLICK,getVideo);

plays.addEventListener(MouseEvent.CLICK, fl_ClickToLoadUnloadSWF);

//链接
myNC=new NetConnection();
myNC.client = this;
myNC.objectEncoding = ObjectEncoding.AMF0;
myNC.addEventListener(NetStatusEvent.NET_STATUS,netStatus);
myNC.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncError);
myNC.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityError);
myNC.connect("rtmp://192.168.1.4/videoChat",userName);

function netStatus(event:NetStatusEvent):void
{
 trace(event.info.code);
 switch (event.info.code)
 {
  case "NetConnection.Connect.Success" :
   chatContent.htmlText +=  "连接成功!";
   setMySO();
   sendBtn.addEventListener(MouseEvent.MOUSE_DOWN,sendMsgByMouse);
   stage.addEventListener(KeyboardEvent.KEY_DOWN,sendMsgByKey);
   record.addEventListener(MouseEvent.CLICK,onRecord);
            stops.addEventListener(MouseEvent.CLICK,onStop);
   recordPublish();
   publishStream();
   break;
  case "NetConnection.Connect.Failed" :
   chatContent.htmlText +=  "连接失败!";
   break;
  case "NetConnection.Connect.Rejected" :
   chatContent.htmlText +=  event.info.application.message;
   break;

 }
}
function securityError(event:SecurityErrorEvent):void
{
 chatContent.htmlText +=  "安全性错误!";
}

//创建一个远程对象
function setMySO():void
{
 mySO = SharedObject.getRemote("mySO",myNC.uri,false);
 mySO.addEventListener(SyncEvent.SYNC,mySoSync);
 mySO.connect(myNC);
}

//利用远程共享对象创建在线列表
function asyncError(event:AsyncErrorEvent):void
{
}
function mySoSync(e:SyncEvent):void
{
 peopleArray = new Array  ;
 for (var tmp in mySO.data)
 {
  peopleArray.push(tmp);
 }
 var tmpDP:DataProvider = new DataProvider  ;
 for (var i=0; i<peopleArray.length; i++)
 {
  tmpName = peopleArray[i];
  tmpDP.addItem({label:tmpName});

 }
 tmpDP.sortOn("label");
 tmpDP.addItemAt({label:"所有人"},0);
 peopleList.dataProvider = tmpDP;
}
function sendMsgByMouse(event:MouseEvent):void
{
 sendMsg();
}
function sendMsgByKey(event:KeyboardEvent):void
{
 if (event.keyCode == 13)
 {
  sendMsg();
 }
}

function sendMsg():void
{
 if (willSendMsg.length > 0)
 {
  if (userName2.text = userName1.text)
  {
   chatContent.htmlText +=  "您不能对自己发言" + "\n";
   chatContent.verticalScrollPosition = chatContent.maxVerticalScrollPosition;

  }
  else
  {
   var allPeople:Array = new Array  ;
   for (var i=0; i<peopleList.length; i++)
   {
    if (peopleList.getItemAt(i).label != "所有人" && peopleList.getItemAt(i).label != userName1.text)
    {
     allPeople.push(peopleList.getItemAt(i).label);
    }
   }
   //利用html标签格式化被发送的聊天内容,突出显示用户名和发送时间
   msg="<font color='#ff0000'>"+userName1.text+"</font>"+"对"+"<font color='#ff0000'>"+userName2.text+
   "</font>"+"说"+"("+"<font color='#0000ff'>"+now.getHours()+":"+((now.getMinutes()<10)?"0"+now.getMinutes():
       now.getMinutes())+":"+((now.getSeconds()<10)?"0"+now.getSeconds():now.getSeconds())+"</font>"+")"+":"+"\n"
   +willSendMsg.text+"\n";

   if (userName2.text == null)
   {
    userName2.text = "所有人";
   }

   //呼叫服务器端函数,并传递参数
   myNC.call("msgFromClient",null,userName1.text,userName2.text,msg,allPeople);
   chatContent.htmlText +=  msg;
   chatContent.verticalScrollPosition = chatContent.maxVerticalScrollPosition;
   willSendMsg.text = "";
  }
 }
}
//客户端获取服务器信息
function msgFromSrvr(msg)
{
 trace(msg);
 chatContent.htmlText +=  msg;
 chatContent.verticalScrollPosition = chatContent.maxVerticalScrollPosition;

}
//选择聊天对象
function selectChatTo(event:MouseEvent):void
{
 userName2.text = peopleList.selectedItem.label;
}
//发布自己视频
function publishStream():void
{
 liveVideo.visible = true;
 myCam = Camera.getCamera();
 myMic = Microphone.getMicrophone();
 liveVideo.attachCamera(myCam);
 myNS = new NetStream(myNC);
 myNS.client = this;
 myNS.addEventListener(NetStatusEvent.NET_STATUS,netStatus);
 myNS.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncError);
 myNS.attachCamera(myCam);
 myNS.attachAudio(myMic);
 myNS.publish(userName1.text,"live");
}
//发布录制的视频
function recordPublish():void
{
 myNS2 = new NetStream(myNC);
 myNS2.client = this;
 myNS2.addEventListener(NetStatusEvent.NET_STATUS,netStreamHandler);
 myNS2.attachCamera(myCam);
 myNS2.attachAudio(myMic);
 myNS2.publish(userName1.text, "live");
 
}

//NetStream事件处理器 
function netStreamHandler(e:NetStatusEvent):void
{
 var s:String = e.info.code;
 switch (s)
 {//停止录像时,再记录当前时间,并以此为标志位,发不到FMS 
  case "NetStream.Record.Stop" :
   myNS2 = new NetStream(myNC);
   myNS2.attachAudio(Microphone.getMicrophone());
   myNS2.attachCamera(Camera.getCamera());
   myNS2.publish(time,"live");
   break;
 }
}

 

//显示对方视频
function getVideo(event:MouseEvent):void
{
 if (userName2.text != userName1.text)
 {
  whoseVideo.text = userName2.text + "的视频";
  mySubNS = new NetStream(myNC);
  mySubNS.client = this;
  mySubNS.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncError);
  mySubNS.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityError);
  mySubNS.play(userName2.text);
 }
 else
 {
  mySubNS.close();
  liveVideo.clear();
  whoseVideo.text = "我的视频";
  liveVideo.attachCamera(myCam);

 }
}


//录制视频
function onRecord(event:MouseEvent):void
{
 myNS2.attachCamera(myCam);
 myNS2.attachAudio(myMic);
 myNS2.publish("videoC", "record");
}
function onStop(event:MouseEvent):void
{
 myNS2.close();
}

//播放
var fl_Loader:Loader;

function fl_ClickToLoadUnloadSWF(event:MouseEvent):void
{
  fl_Loader = new Loader();
  fl_Loader.load(new URLRequest("Legendexc.swf"));
  fl_Loader.addEventListener(Event.COMPLETE,onComplete);
  addChild(fl_Loader);
//加载的播放器的swf里处理视频播放的代码
}

function onComplete(e:Event):void{
 var loader:Loader=e.currentTarget as Loader;
 loader.content.width=800;
 
}

分享到:
评论

相关推荐

    FMS3.5使用教程

    1. **视频流式处理**:FMS 3.5能高效地对视频进行流式传输,使得内容能够在播放时即时加载,提升用户体验。 2. **ActionScript 3.0 支持**:利用AS3,开发者可以创建更复杂的应用,实现与服务器的深度交互。 3. **...

    FMS3.5 教程(PPT)

    Adobe FMS3.5,全称Adobe Flash Media Server 3.5,是一款强大的实时流媒体服务器,用于处理和分发富媒体内容,如音频、视频和数据。它提供了丰富的功能,包括实时视频直播、动态流媒体、数字视频录像(DVR)以及与...

    fms3.5注册机(上面上传的那个有问题)这个可以用

    fms3.5注册机 (肯定可用)fms3.5注册机 (肯定可用)fms3.5注册机 (肯定可用)fms3.5注册机 (肯定可用)

    流媒体服务器FMS3.5

    流媒体服务器FMS3.5 sn:1373-5465-5574-9110-6240-7230

    FMS3.5.rar_as3

    标题"FMS3.5.rar_as3"提示我们这个压缩包主要包含了与Adobe Flash Media Server (FMS) 3.5版本相关的学习资料,且与ActionScript 3 (AS3)有关。AS3是Flash平台上用于创建动态内容、交互式应用程序和网络服务的主要...

    fms3.5开发向导

    1. **实时视频流传输**:FMS3.5支持实时视频流传输,能够实现高质量的实时音视频通信,适用于直播、在线教育、远程会议等多种场景。 2. **内容分发网络(CDN)集成**:通过与CDN的无缝集成,FMS3.5能够在全球范围内...

    fms3.5开发指南

    《FMS3.5开发指南》是一份针对Adobe Flash Media Server 3.5的详细教程,旨在帮助开发者理解和创建富媒体应用。FMS是用于提供流媒体和交互式服务的服务器,支持即时启动、直播视频流和根据用户带宽调整流速率等功能...

    flash media server 3.5使用教程

    FMS 3.5作为网络中心存储音频和视频媒体文件,当用户请求时,通过实时消息协议(RTMP)与Flash Player进行通信,实现流畅的播放体验。RTMP是一种专为Flash设计的传输协议,能实现实时数据传输,且不需下载整个文件到...

    FMS3.5和4.0注册机

    破解FMS4.0 FMS3.5,本人FMS4.0成功

    FMS3系列(五):通过FMS实现时时视频聊天(Flash|Flex)

    在本篇博文中,我们将深入探讨“FMS3系列”的第五部分,主要关注如何通过Adobe Flash Media Server (FMS) 3实现实时视频聊天功能。这个话题对于开发交互性强、实时性高的网络应用来说至关重要,特别是对于那些需要...

    FMS聊天室下载FMS

    - **聊天室功能**:FMS聊天室是基于FMS构建的实时通信平台,用户可以通过文字、语音或视频进行互动交流。 - **实时性**:利用FMS的实时传输特性,确保消息即时发送和接收,实现低延迟的聊天体验。 - **多用户支持...

    Fms 视频录制屏幕共享 附源码.doc

    文档"《Fms 视频录制屏幕共享 附源码.doc》"主要涉及使用Adobe Flash Media Server (FMS) 实现屏幕共享和视频录制的功能。FMS 是一款强大的实时流媒体服务器,它允许开发者创建实时交互式的多媒体应用程序,包括视频...

    Flash+Media+Server3.5使用教程

    Flash Media Server 3.5 (FMS 3.5) 是 Adobe 公司推出的一款强大的多媒体服务器软件,主要用于处理和流式传输音频和视频内容。这款服务器是基于实时消息协议(RTMP)的,允许SWF文件与服务器之间的高效数据交换,特别...

    通过FMS实现时时视频聊天(Flash|Flex)源码

    【标题】中的“通过FMS实现时时视频聊天(Flash|Flex)源码”是指使用Adobe的Flash Media Server (FMS)技术,结合Flash和Flex这两种编程语言,开发出一款能够实现实时视频通信的应用程序。这个标题暗示了我们将在...

    FMS制作聊天室例子

    【标题】:“FMS制作聊天室例子”是一个关于利用Flash Media Server(FMS)构建实时聊天室的应用示例。FMS是Adobe公司提供的一款强大的流媒体服务器,它能够支持实时的音频、视频通信以及数据共享功能,非常适合用来...

    fms之P2P视频聊天

    FMS(Flash Media Server)是Adobe公司推出的一款流媒体服务器,它广泛用于实时视频和音频的传输。在这个“fms之P2P视频聊天”项目中,我们将探讨如何利用FMS和P2P技术来实现高清视频聊天功能,并可能将其扩展到更多...

    简易聊天室flash多人聊天 FMS实现

    【标题】"简易聊天室flash多人聊天 FMS实现"揭示了这个项目的核心是构建一个基于Flash的多人在线聊天系统,采用FMS(Flash Media Server)作为后台技术来实现实时的通信功能。Flash是一种广泛应用于网页上的多媒体...

    FMS视频聊天程序

    【标题】"FMS视频聊天程序"涉及到的核心技术是Adobe Flash Media Server (FMS)以及基于Flash的视频聊天应用开发。FMS是一个强大的实时流媒体服务器,它为开发者提供了创建实时交互式视频和音频应用程序的能力。在Web...

    FMS视频录制监控

    1. **实时播放**:除了录制,FMS还提供了实时播放功能,用户可以通过Web浏览器或其他支持Flash的客户端实时观看监控画面,无需等待视频上传完成。 2. **视频流分发**:FMS使用高效的流媒体技术,如HLS...

Global site tag (gtag.js) - Google Analytics