Actionscript 3 Red5服务器、Flash客户端、语音聊天/会议语音聊天Yahoo风格

Actionscript 3 Red5服务器、Flash客户端、语音聊天/会议语音聊天Yahoo风格,actionscript-3,flash,red5,Actionscript 3,Flash,Red5,我不知道是否有人还记得以前的雅虎聊天室,但我目前在我的网站上有一个聊天室。这是blueimp的Ajax聊天。一切都很好,效果也很好。我想添加一个talk按钮,这样用户就可以按下它说话,聊天室里的其他人都可以听到。我所拥有的有点有用。但在使用几分钟后,并不是所有用户都能听到这个人说话。所以我的问题是,我如何解决这个问题,以便用户能够继续听到谁在说话 代码如下: import flash.net.NetConnection; import flash.net.NetStream; import fl

我不知道是否有人还记得以前的雅虎聊天室,但我目前在我的网站上有一个聊天室。这是blueimp的Ajax聊天。一切都很好,效果也很好。我想添加一个talk按钮,这样用户就可以按下它说话,聊天室里的其他人都可以听到。我所拥有的有点有用。但在使用几分钟后,并不是所有用户都能听到这个人说话。所以我的问题是,我如何解决这个问题,以便用户能够继续听到谁在说话

代码如下:

import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequestMethod;
import flash.media.Microphone;
import flash.media.Sound;

var Mic:Microphone;
var aud:Sound;
var nc:NetConnection = new NetConnection;
nc.client = this;
var istream:NetStream;
var ostream:NetStream;
Security.showSettings("2");
if(Microphone.names.length <= 0) {
    //they has no mic
} else {
    Mic = Microphone.getMicrophone();
    Mic.setUseEchoSuppression(true);
    Mic.setLoopBack(false);
    Mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
    Mic.addEventListener(StatusEvent.STATUS, statusHandler);
}
btnTalk.addEventListener(MouseEvent.MOUSE_DOWN, talkDown);
btnTalk.addEventListener(MouseEvent.MOUSE_UP, talkUp);
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
nc.connect("rtmp://MYSERVER:1935/oflaDemo");

function talkDown(e:MouseEvent):void {
    trace("talking");
    ostream.publish("charchar");
    istream.receiveAudio(false);
}

function talkUp(e:MouseEvent):void {
    trace("done talking");
    ostream.close();
    istream.receiveAudio(true);
}

function netStatusHandler(event:NetStatusEvent):void {
    trace(event.info.code)
    ostream = new NetStream(nc);
    istream = new NetStream(nc);
    istream.play("charchar");
    ostream.attachAudio(Mic);


}



function activityHandler(event:ActivityEvent):void {
            trace("activityHandler: " + event);
        }
function statusHandler(event:StatusEvent):void {
            trace("statusHandler: " + event);
        }

示例:3个用户加载该页面,所有用户都能听到。在有人交谈了几次之后,User1可以听到User2,但是User3听不到User1。谁能听到谁的声音是混合和匹配的,但这是正在发生的事情的一个例子。

如果要对所有客户端使用相同的流charcharchar,则需要实现某种锁以防止竞争条件。顺便说一句,这将是非常棘手的,而且肯定需要服务器端修改代码

您必须提供更多信息-可能是因为服务器端问题,也可能是因为客户端问题。调试,调试,调试!:测试客户机是否接收到数据,若未接收到,则测试服务器在尝试将数据发送给其他人之前是否从客户机接收到任何数据。没有像这样的现成解决方案可以解决所有问题..这就是我要找的信息,谢谢!