Flash AS3目前不支持AEC的处理

http://forums.adobe.com/thread/448445


Flash AS3目前不支持AEC的处理

Travis, have you managed to find a work around? I have been thinking about a server side solution. It basically involves decoding the Speex stream to RAW, running an AEC algorithm, re-encoding and sending the data on its way. Its just a thought and I not sure on the additional latency it will add.


在RTMP Server端做AEC处理似乎也不可行
server side AEC post encoding:  http://lists.xiph.org/pipermail/speex-dev/2007-July/005935.html
For AEC, the following conditions must be met:
1) No codec must be used in the echo path (maybe G.711 is OK)
2) There must not be any drift in the sampling clocks
3) There must not be any audio samples lost on the echo path
The entire path from AEC to loudspeaker and from mic back to AEC must be free of any non-linearity, codec, drift


It turns out the Adobe does have AEC. They use it on Adobe Connect Pro http://www.adobe.com/products/acrobatconnectpro/. The AEC is delivered via a Flash plugin (yes they exist) through Flash Player Express Install (see http://www.flashmagazine.com/news/detail/plugins_for_the_flash_player/). The Express Install mechanism has been used since Flash 7 to auto update Flash and it is used in install AIR.


Adobe's Mysterious System.Product and Connect Pro:  http://www.lingolesson.com/misc/adobe-s-mysterious-systemproduct-and-connect-pro/
Adobe Connect Pro有AEC的处理, 但是没有开放给普通开户者。


http://stackoverflow.com/questions/1860522/echo-problem-with-speakers-in-flash-red5-application-for-two-way-video-conferenci
The solution you're looking for is called echo cancellation. Unfortunately today there are only two options:

1) do the echo cancelling in Flash. Adobe has the ability to do this embedded in flash, but unfortunately they only allow it to be used when running against Adobe Connect's conferencing server. Lame, but true.

2) your other option is to decode the audio from all participants in a server, mix the audio there, and remove echo using an echo cancelling library. An example of a C library that does this is spandsp, but this requires a lot of extra code, and a media server that can decode from Flash. The Red5 open-source server can receive audio and video from Flash, and you can use the Xuggle library to decode the audio into raw audio. Removing the echo though would require integration with the right echo canelling library.

In short, unless Adobe decides to actually enable echo-canelling in Flash for non-Adobe-proprietary apps, you're left with a hard road to fix the issue (i.e. there is no way to fix this from ActionScript today).

 

http://stackoverflow.com/questions/592058/voice-echo-problem
This is a known problem in Adobe's software for which there is no fix presently.

For now you can only work around the problem.

You should implement a Push-to-Talk mode in your application and make it easy for users to switch to Push-to-Talk if they are experiencing sound quality problems.

If all users of the application have headsets then they won't have to resort to Push-to-Talk.

If your application is doing many-to-many conferencing it might be an interesting idea to allow users to request a speaker token.

Using an approach based on the suggestion of tst it might be possible to have the application checking which people are talking and then granting the speaker token automatically, rather than have users manually requesting it. Obviously usability testing would have to conducted to ensure this works well in practice.


I had the same problem in my webconference system and I couldn't find any solution on the web. As far as I understand, "Use Echo Suppression" will cancel only echo made by a loop back. But I've made a simple solution - not perfect, but still better than nothing:

every 50ms check Microphone.activityLevel
 
if during last 1500ms activityLevel was greater than 20
then Microphone.gain *= 0.8

http://stackoverflow.com/questions/1860522/echo-problem-with-speakers-in-flash-red5-application-for-two-way-video-conferenci

你可能感兴趣的:(server,Flash,application,Adobe,actionscript,audio)