flex+fms 视频聊天 触发不了SyncEvent.SYNC

糖牙 2009-10-22 11:29:06
import vo.Message;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import flash.net.URLRequest;

private var mycon:NetConnection;
private var serverApp:String="rtmp://localhost/FlexChart";
private var talk_so:SharedObject;
private var response:Responder;
private var arr:ArrayCollection=new ArrayCollection();
private var camera:Camera;
private var microphone:Microphone;
private var netStream:NetStream;

private function init():void
{
flash.system.Security.allowDomain("*");
btnSend.addEventListener(MouseEvent.CLICK,sendHandler);
mycon=new NetConnection();
mycon.addEventListener(NetStatusEvent.NET_STATUS,netStutasHandler);
mycon.connect(serverApp);
mycon.client=this;

initMedia();
btnrecord.addEventListener(MouseEvent.CLICK,recordFLV);
btnstop.addEventListener(MouseEvent.CLICK,stopRecord);
btnreplay.addEventListener(MouseEvent.CLICK,replayFLV);
}
public function onBWDone():void{};

private function netStutasHandler(evt:NetStatusEvent):void
{
trace(evt.info.code);
if(evt.info.code=="NetConnection.Connect.Success")
{
Alert.show("连接成功");
talk_so=SharedObject.getRemote("talk",mycon.uri,true);
talk_so.addEventListener(SyncEvent.SYNC,syncHandler);事件触发不了
talk_so.addEventListener(AsyncErrorEvent.ASYNC_ERROR,errorHandler);
talk_so.connect(mycon);
}
else
{
Alert.show("连接失败"+evt.info.code);
}
}
private function errorHandler(ev:AsyncErrorEvent):void
{
trace(ev.error);
Alert.show(ev.error.message);
}
private function syncHandler(evt:SyncEvent):void
{
txtcontent.text=" ";
Alert.show(talk_so.data.msgList);
if(talk_so.data.msgList!=null)
{
var tmp:ArrayCollection=new ArrayCollection();
covertArrayCollection(tmp,talk_so.data.msgList as ArrayCollection);
Alert("length:"+tmp.length);
for(var j:int=0;j<tmp.length;j++)
{
var message:Object=tmp.getItemAt(j);
var fullMessage:String=message.nickname+"在"+message.time+"说:"+message.msg;
txtcontent.text=txtcontent.text+fullMessage+"\n";
}
}
}
private function initMedia():void
{
camera = Camera.getCamera();

if(camera){
camera.setMode(160,120,15,false);//视频大小及帧速
camera.setQuality(0,90); //质量,100最大不过耗带宽较多
vd_myVideo.attachCamera(camera);
}
else
{
Alert.show("没有找到摄像头");
}
microphone=Microphone.getMicrophone();


}


private function sendHandler(e:MouseEvent):void
{
var arr:ArrayCollection=new ArrayCollection();

if(talk_so.data.msgList==null)
{
arr=new ArrayCollection();
}
else
{
covertArrayCollection(arr,talk_so.data.msgList as ArrayCollection);
}
var obj:Message=new Message();
obj.nickname=txtname.text;
obj.msg=txtspeak.text;
obj.time=new Date();
arr.addItem(obj);

talk_so.setProperty("msgList",arr);
//talk_so.send("msgList",arr);
txtspeak.text="";
}
private function covertArrayCollection(arrNew:ArrayCollection,arrOld:ArrayCollection):void
{
arrNew.removeAll();

for(var i:int=0;i<arrOld.length;i++)
{
arrNew.addItemAt(arrOld.getItemAt(i),i);

}

}
...全文
264 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
terjoypengbi 2011-05-30
  • 打赏
  • 举报
回复
3楼的回答没看懂。我也遇到了这问题,还没解决。。。
hohoxiaohao 2010-11-17
  • 打赏
  • 举报
回复
.............
fanr520 2010-04-17
  • 打赏
  • 举报
回复
这个问题前一段时间我也遇上过。今天总算解决了。
关键是在你用so.connect(nc);
这段代码时,他会先在SyncEvent的事件中触发一个clear事件,name 和 oldvalue都等于undefined这样表明so已连接成功,只有在这个事件发生后,用so.setProperty()才有效。
Z8157522 2010-03-03
  • 打赏
  • 举报
回复
同样的问题,我的是把聊天做成了一个控键,不知道为什么不能触发,奇怪
糖牙 2009-10-27
  • 打赏
  • 举报
回复
没人理。。。。。诶。。额

4,328

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧