Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Flash > `битый` исходящий стрим с флеш клиета


Автор: g613 12.9.2011, 16:00
День добрый !


делаем гейт flash<->sip ( freeswitch + mod_rtmp + их клиент для примера ). 

все настроено и вроде как работало ( сервер крутился, звонки ходили ) на тестовых машинках.
пришли манагеры и говорят голос гуано... :(.   В результате некоторых изысканий воспроизвести
удалось запуском клиента в вмвари за натом.


выгладит так, что вместо голоса на сервер приходит 'бульканье' к клиенту приходит чистый поток.

отловленные tcpdump'om пакеты выхглядят по разному ( с натом и без ). 

Кто то сталкивался с таким ? 

P.S.
Я как  то больше по voip,  так что если не хватает каких то данных говорите...



Автор: SoWa 13.9.2011, 12:59
В флеше со звуком выбор невелик - либо кодек, либо параметры эхоподавления. Ну плюс RTMP.
Кодек - SPEEX лучше Nellymoser(или как его звать...)
Эхоподавление - глупенькое оно у флеша, лучше его вырубать.
RTMP - передаете с помощью NetStream? Если так, то надо смотреть, выставлена ему буферизация или нет.

Автор: g613 13.9.2011, 14:48
Кодек speex.

Собственно так инициализируется:

Код

private function setupMic():void {
                                try {
                                        mic = Microphone.getMicrophone(mic_index);
                                        mic.addEventListener(ActivityEvent.ACTIVITY, activityHandler);
                                        mic.addEventListener(StatusEvent.STATUS, statusHandler);
                                        mic.codec = SoundCodec.SPEEX;
                                        mic.setUseEchoSuppression(true);
                                        mic.setLoopBack(false);
                                        mic.setSilenceLevel(0,20000);
                                        mic.framesPerPacket = 1;
                                        mic.gain = 55;
                                        mic.rate = 16;
                                        mic_index = mic.index;
                                        
                                        if (outgoingNetStream != null) {
                                                outgoingNetStream.close();
                                                outgoingNetStream = new NetStream(netConnection);
                                                outgoingNetStream.addEventListener(NetStatusEvent.NET_STATUS, netStatus);
                                                outgoingNetStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);             
                                                outgoingNetStream.attachAudio(mic);
                                                outgoingNetStream.publish("publish", "live");
                                        }
                                } catch(e:Error) {
                                        onDebug("Couldn't setup microphone: " + e.message);
                                }
                        }



весь http://fisheye.freeswitch.org/browse/freeswitch.git/clients/flex/freeswitch.mxml?hb=true.

ходит всё по tcp. А где и как смотреть буферизацию ?

Автор: g613 13.9.2011, 15:20
mic.setUseEchoSuppression(false);

ниче не поменяло

Автор: SoWa 13.9.2011, 17:55
 mic.framesPerPacket = 1; - это меня настораживает. Пробовали по дефолту, без этой установки?
Цитата

framesPerPacket    property  

framesPerPacket:int
Language Version:  ActionScript 3.0
Runtime Versions:  Flash Player 10, AIR 1.5




 Number of Speex speech frames transmitted in a packet (message). Each frame is 20 ms long. The default value is two frames per packet. 

The more Speex frames in a message, the lower the bandwidth required but the longer the delay in sending the message. Fewer Speex frames increases bandwidth required but reduces delay.



Автор: g613 13.9.2011, 18:29
по дефолту ( 2 ) не получится - freeswitch может только 1.  Самое фиговое то, что оно не всегда не работает. Включенный нат в вмваре - один из случаев. Смотрели тррафик в wireshark'e - он разный для хорошего и плохого потока.   

Автор: dursun266 30.11.2011, 23:36
Такая же ситуация с флешь клиентом из под MacOS (под linux,windows все ок).
Пробовал вместо Speex - ALAW,ULAW с framesperpacket=2 + изменения в mod_rtmp, в MacOS так же булькает.
Причем с asterisk'ом (rtmp от phsultan)  работает без проблем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)