2009-12-07 40 views
1

我刚刚尝试了下面的代码,并且它可以很好地减少头戴式耳机上的回声。但是,回声问题依然存在,就像发言者一样。用于双向视频会议的闪光灯/红色5应用中的扬声器的回声问题

public var intCountMilliSec:int = 0; 
    public var intLastActivityLevel:int = 0; 

    public var intLastLowestActivityLevel:int = 100;//07-Dec-09 

    private function CancelEcho(e:TimerEvent):void 
    { 
     intCountMilliSec = intCountMilliSec + 50; 
     if (Red5OutgoingMic.activityLevel > intLastActivityLevel) 
     { 
      intLastActivityLevel = Red5OutgoingMic.activityLevel; 
     } 

     if (Red5OutgoingMic.activityLevel < intLastLowestActivityLevel) 
     { 
      intLastLowestActivityLevel = Red5OutgoingMic.activityLevel; 
     } 

     if (intCountMilliSec >= 1500) 
     { 
      if (intLastActivityLevel > 20) 
      { 
       Red5OutgoingMic.gain *= 0.8; 
      } 
      if (intLastLowestActivityLevel < 20) 
      { 
       if (Red5OutgoingMic.gain <= 30) 
       { 
        Red5OutgoingMic.gain = Red5OutgoingMic.gain/0.8; 
       } 
      } 

      intCountMilliSec = 0; 
      intLastActivityLevel = 0; 

      intLastLowestActivityLevel = 0; 
     } 
    } 

任何即时的帮助表示赞赏。

回答

0

您的体验称为反馈,它是一个硬件问题,麦克风拾取发言者发出的声音并通过扬声器再次播放。

通常情况下,它会作为尖叫声出现,但随着ip的延迟它可以只是回收声音。这是一个常见问题。

耳机是一种常见的解决方案。另一种解决方案是将音频输出从音频输入端移开:即将扬声器从麦克风移开。

请参见:http://en.wikipedia.org/wiki/Audio_feedback

+1

JERiv嗨, 感谢您立即作出反应。 其实,我试着将扬声器从麦克风移开。但问题依然存在。我只想确定任何代码修改是否有用,还是只能在硬件级别解决? 谢谢, 阿米特。 – Amit 2009-12-07 15:34:49

0

你正在寻找被称为回声消除解决方案。不幸的是,今天只有两种选择:

1)在Flash中做回声消除。 Adobe有能力将其嵌入到闪存中,但不幸的是,它们只允许在针对Adobe Connect的会议服务器运行时使用它。跛脚,但是的确如此。

2)您的另一种选择是解码服务器中所有参与者的音频,混合其中的音频,并使用回声消除库删除回声。一个C库的例子是spandsp,但是这需要很多额外的代码和一个可以从Flash解码的媒体服务器。 Red5开源服务器可以接收来自Flash的音频和视频,您可以使用Xuggle库将音频解码为原始音频。虽然删除回声将需要与正确的回声处理库集成。

简而言之,除非Adobe决定在非Adobe专有应用程序中实际启用Flash中的回显功能,否则您将遇到一条艰难的道路来解决此问题(即,无法从ActionScript解决此问题)。

希望有所帮助。

  • 艺术
+0

类似的问题在这里:http://stackoverflow.com/questions/592058/voice-echo-problem/592161#592161 – 2010-09-02 22:21:57