Здравствуйте все!
Вот беда у меня беда.. начал писать аудиочат на основе технологии Р2Р. Я запускаю 2 одинаковых приложения на локальном компе. Вроде бы всё работает, звук передаётся и воспринимается, но воспроизведение звука по началу отстаёт на 3-4 секунды, но по истечению некоторого времени (от 1 до 5 минут) всё выравнивается и звук воспроизводится сразу как только я что либо говорю в микрофон. В чём может быть беда?

Код AS3:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
applicationComplete="OnApplicationComplete()">
<fx:Script>
<![CDATA[
import mx.controls.Text;
private var netConnection:NetConnection;
private var netGroup:NetGroup;
private var netStream:NetStream;
private var speaker:NetStream;
private var groupspec:GroupSpecifier;
private var groupName:String;
private const SERVER:String ='rtmfp://p2p.rtmfp.net/';
private const DEVKEY:String = 'тут был мой ключ разраба';
function netStatusHandler(e:NetStatusEvent):void {
switch (e.info.code) {
case 'NetConnection.Connect.Success':
setupGroup();
break;
case 'NetStream.Connect.Success':
// Create new NetGroup
{netGroup = new NetGroup(netConnection, groupspec.groupspecWithAuthorizations());
netGroup.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
}
break;
case 'NetGroup.Connect.Success': OnNetStreamConnect(); break;
case 'NetGroup.SendTo.Notify' :
trace(e.info.message); break;
default:
}
}
private function OnNetStreamConnect():void
{
netStream.client = this;
var mic:Microphone = Microphone.getMicrophone();
if(mic)
{
mic.codec = SoundCodec.SPEEX;
mic.setSilenceLevel(0);
netStream.attachAudio(mic);
StatusMessage("Есть микрофон\n");
netStream.publish("stream");
}
}
private function OnApplicationComplete():void
{ userName.text = "user " + int(Math.random() * 65536);
groupName ="BerkutSoft";
StatusMessage("Connecting to \"" + SERVER + "\" ...\n");
netConnection = new NetConnection();
netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
netConnection.connect(SERVER + DEVKEY);
StatusMessage("--NetConnection--\n");
}
function setupGroup():void {
groupspec = new GroupSpecifier("bs/" + groupName);
groupspec.serverChannelEnabled = true;
groupspec.multicastEnabled = true;
groupspec.postingEnabled = true;
groupspec.routingEnabled = true;
groupspec.peerToPeerDisabled = false;
netStream = new NetStream(netConnection, groupspec.groupspecWithAuthorizations());
netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
speaker = new NetStream(netConnection, groupspec.groupspecWithAuthorizations());
speaker.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
speaker.play("stream");
}
private function StatusMessage(msg:Object):void
{
statusLog.text += msg;
statusLog.verticalScrollPosition = statusLog.textHeight;
statusLog.validateNow();
}
]]>
</fx:Script>
<s:TextInput id="userName" width="160" />
<mx:TextArea id="statusLog" width="100%" height="100%"/>
</s:Application>